hbase 中 rowkey 的设计
2020-04-05 本文已影响0人
莱布尼茨不会求导
RowKey 长度, 建议越短越好
- RowKey是一个二进制 byte 流,可以是任意字符串,最大长度为64kb,实际应用中一般为10-100byte,以字节数组 byte[] 形式保存,一般设计成定长, 也有一些不定长的例如 openTSDB、kylin 在 hbase 中就不是定长的。
- rowkey 建议越短越好,不要超过16个字节。HBase 中的数据无论是存储在写缓存 MemStore 还是 HFile 中的数据都是按照 KeyValue 存储的,rowkey 过长会占用更多的内存和磁盘资源
- rowkey 中经常出现的字符串, 建议像 OpenTSDB 一样对 rowkey 进行切割, 并对切割后的部分字段进行编码
RowKey 散列原则, 设计的RowKey应均匀的分布在各个HBase节点上
- Rowkey 的先导列一般都是经常被用到的列, 例如像 OpenTSDB 的先导列是 metric ,因为每次对OpenTSDB 的查询都需要指定 metric
- 在 RowKey 的前面添加固定长度的 slat 或者是对 RowKey 中部分数据进行编码
RowKey 唯一原则
- 必须在设计上保证其唯一性,由于在 HBase 中数据存储是Key-Value形式,若向HBase中同一张表插入相同 RowKey 的数据,则原先存在的数据会被新的数据覆盖