“全”是指覆盖面要全,在业务上要考虑各种用户的数据覆盖,如买方、卖方、平台方等全角度的数据;在应用端上要考虑 PC、APP、小程序等各个端的数据;在数据来源上要考虑前端、后端、数据库、甚至第三方数据源的采集;在量级上,我们要获取全量的数据,而非抽样的数据,尽量做到各种数据的全覆盖。
“细”是指日志数据要记录的细致,在埋点设计时不能唯需求论。因为需求只需要这5个字段,所以我只记录这5个字段,这会大幅度限制后续的数据探索和使用。我们一般通过事件模型来定义需要采集的信息,包括 Who、When、Where、How、What,来记录一个事件的完整信息,保证后续数据分析的弹药充足。
“时”是指时效性要高,比如双十一的活动,我们一定想知道实时的准确的活动业绩;又比如广告投放场景,我们也需要高时效的数据反馈,来实时调整我们的投放策略,这是真金白金的效果。高时效的数据价值普遍会比低时效的数据价值高,当然高时效也会带来成本的提高,所以时效性的选择也是基于业务的实际需要来确定。
第一范式:保证每列的原子性,表中的所有字段值都是不可分割的原子值。
第二范式:保证每行的原子性,表中所有行都有主键,其他字段的值与主键一一对应。
第三范式:保证每张表的数据是原子性的,表中数据不存在冗余关系。
星型模型:
雪花模型:
分层方式上,离线为了考虑效率问题,一般会利用空间换时间,层级划分较多;实时更多考虑时效性,分层较少,也减少了中间流程出错的概率。
存储上,离线更多基于 HDFS,实时更多使用 MQ 或 OLAP 数据库。
ETL 上,离线多基于 HIVE、Spark 等批处理,实时则基于实时计算引擎如 Strom、Flink 等。