HBASE的设计
hbase的表设计
表设计应当做到:
- 1)防止数据热点问题,建表的时候,最好进行表的预分区。并且插入的时候,rk 不要顺序递增。预分区的个数,不要超过regionserver个数。具体以数据量进行预分区。
- 2)列族不建议过多
hbase的列族设计
列族设计应该注意以下几点:
- 1)将具有相同io属性的列放在同一个列族中。
实际上io属性是很难界定的。所以需要注意第二点: - 2)列族设计不宜过多,一般不超过3个。实际上,大多数的hbase都是只有一个列族。
如果列族过多,就会造成跨文件访问,查询时消耗资源过多。(不同的列族是存储在不同的物理文件中的)
hbase的行键设计
行键设计的三原则:
- 1)唯一性
- 2)不宜过长,一般是 0-100 byte。 一般 8byte 或者 16 byte。最好是8 的倍数。
原因如下: -
- 2.1、行健存储在每一个列族文件中,即storefile 中。如果太大,造成大量磁盘空间浪费。
-
- 2.2、行健信息,也会别写入到每一个store的memstore中,如果行键过大,造成内存空间的极大浪费。
-
- 2.3、计算机的底层存储是 8 通道
- 3)散列性
为了避免数据热点,按照rowkey进行字典顺序排序的。如果rowkey过于集中,造成数据操作过于集中在 某一个或几个region上,造成数据热点问题。所以需要对数据进行打散。
散列算法有: -
- 3.1、hash 算法
-
- 3.2、加盐。随机数 + rowkey
-
- 3.3、反转
字符串反转(eg:手机号反转)
时间戳反转
- 3.3、反转
-
- 3.4、对uuid 进行md5加密
避免数据热点,核心是避免高频访问的数据在同一个或个别几个region上。将数据访问均衡的分散在多个region上,合理设计rowkey。
rowkey设计依据:
- 1)首先考虑业务需求,按照哪一个指标(手机号、uuid等)进行查询。
eg:电信运营商设计rk, 采用 手机号+时间戳 ,查询话费、通话记录等 - 2)避免热点