一、数据存储
实时任务在运行过程中,会计算很多维度和指标,这些数据需要放在一个存储系统中作为恢复或者关联使用。其中会涉及三种类型的数据:
中间计算结果:在实时应用处理过程中,会有一些状态的保存(比如去重指标的明细数据),用于在发生故障时,使用数据库中的数据恢复内存现场。
最终结果数据:指的是通过ETL处理后的实时结果数据,这些数据是实时更新的,写的频率非常高,可以被下游直接使用。
维表数据:在离线计算系统中,通过同步工具导入在线存储系统中,供实时任务来关联实时流数据。
数据库系统缺点,以Hbase为例,一张表必须要有rowkey,而rowkey是按照ASCII码来排序的,这就像关系型数据库的索引,rowkey的规则限制了读取数据的方式。如果业务方需要使用另一种读取数据的方式,就必须重新输出rowkey。从这个角度来看,Hbade没有关系型数据库方便。但是Hbase的一张表能够存储几TB甚至几十TB的数据,而关系型数据库必须要分库分表才能实现这个量级的数据存储。因此,对于海量数据的实时计算,一般会采用非关系型数据库,以应对大量的多并发读写。
rowkey的实践经验
1.表名设计
设计规则:汇总层标识+数据域+主维度+时间维度
2.rowkey设计
设计规则:MD5+主维度+维度标识+子维度+时间维度+子维度2
以MD5的前四位作为rowkey的第一部分,可以把数据散列,让服务器整体负载是均衡的,避免热点问题。在上面的例子中,卖家ID属于主维度,在查数据时是必传的。每个统计维度都会生成一个维度标识,以便在rowkey上做区分。
网友评论