HBase 一张表须要有 row key ,而 rowkey 是按照 ASCII 码来排序的,这就像关系型数据库的索引一样, row key 的规则限制了读取数据的方式。如果业务方需要使用另一种读取数据的方式,就必须重新输出 row key 。从这个角度来看, HBase 没有关系型数据库方便。但是 Base 张表能够存储TB 甚至几十 TB 的数据,而关系型数据库必须要分库分表才能实现这个量级的数据存储。因此,对于海量数据的实时计算,一般会采用非关系型数据库,以应对大量的多并发读写。下面介绍在数据统计中表名设计和 rowkey 设计的些实践经验。
1.表名设计
设计规则:汇总层标识+数据域+主维度+时间维度
例如: dws trd _s lr dtr ,表示汇总层交易数据,根据卖家( sir )主维度+0 点截至当日(dtr)进行统计汇总。
这样做的好处是,所有主维度相同的数据都放在一张物理表中,避免表数量过多,难以维护。另外,可以从表名上直观地看到存储的是什么数据内容,方便排查问题。
2.rowKey设计
设计规则: MD5 +主维度+维度标识+子维度 +时间维度+子维度
例如:卖家 ID MD5 前四位+卖家 ID+ app 级类目 ID+ddd +二级类目 ID
以MD5 前四位作为 row key 的第 部分,可以把数据散列,让服务器整体负载是均衡的,避免热点问题。在上面的例子中,卖家 ID于主维度 ,在查数据时是必传的。每个统计维度都会生成一个维度标识,以便在 rowkey 上做区分。