1.RowKey的设计需要充分考虑到业务的读写特点
- 当客户端需要频繁写一张表,随机的RowKey会获得更好的性能
- 当客户端需要频繁的读一张表,有序的rowkey则会获得更好的性能
2. Rowkey特性
- 唯一性:Rowkey必须能够唯一的识别一行数据
- 散列性:避免访问热点,降低查询效率
- 尽可能短:在不影响业务的前提下,建议越短越好
2.1 唯一性
必须设计上保证其唯一性,rowkey是按照字典顺序排序存储的,可充分利用这个特点,将经常一起读的数据存储到一起。
2.2 散列性
rowkey的第一个字段必须要做哈希处理,字段之间用ascii码的03分隔符分隔
如 rowkey=md5(第一个字段)+X03+第二个字段+X003+第三个字段
2.3 长度尽可能短
rowkey是一个二进制码流,最大长度64kb,实际应用中一般为10-100bytes
原因:
若一个rowkey长度100b,1000W行数据仅仅rowkey就要占用:
100*1000W=10亿个字节(将近1G)
3.RowKey设计案例
明细主表rowkey设计
rowkey:系统账号+交易日期+时间戳+账户交易序号+客户账号+账号序号+交易日志号
索引表rowkey设计
rowkey:系统账号+交易日期+时间戳(排序)+账户交易序号+客户账号+账号序号+交易日志号