RowKey 设计
HBase 作为一款分布式的NoSQL数据库,数据的分布根据rowKey range方式来划分,每个Region 存储了一定范围rowKey 的数据, 数据的读写通常情况下需要指定rowKey 来定位到具体的Region 与 RegionServer, 如果大量的请求根据rowKey都打到同一个Region或者很少的Region上,那么这些Region就会形成热点, 无法使用集群特性有效负载均衡。因此,RowKey 的设计在实践中至关重要。
一些原则
长度原则
HBase 实际按照KV的方式进行存储,K 是rowKey、Column Family、Column Qualifier、Timestamp 的组合, 如果Qualifier 比较多, 那么对应rowKey也会被多次存储,既占用内存也占用磁盘存储,因此RowKey 长度尽可能精简。
唯一原则
RowKey 本身具有唯一性, 写入相同RowKey的数据下相同的列会被覆盖。
排序原则
数据的存储是按照RowKey进行字典方式升序存储,主要是为了方便检索。
散列原则
设计的RowKey应均匀的分布在各个HBase节点上,避免产生热点。
散列方式
为了使整个集群负载均衡, 需要将rowKey 尽可能的打散分布到各个节点上去,通常使用的打散方式: