1.行键应该尽可能短
行键存在于HBase中的每一个单元格中。如果行键越长,用于存储单元格的I/O开销就会越大。通常我们采用MD5加密的定长键来代替行键
2.对于组合行键 排序顺序应该取决于访问模式
如果是一个以主机名和事件类型存储的日志数据库,可能的键值选取方法有以下几种:
[主机名][事件类型][时间戳]
:适用于访问模式使用主机名和事件类型查询日志的方式。[事件类型][时间戳][主机名]
: 适用于访问模式使用事件类型和时间戳查询日志的方式。[事件类型][反转时间戳][主机名]
: 反转时间戳的值是Long.MAX_VALUE减去时间戳,这样可以确保最近发生的时间排在前面。适用于按照事件发生顺序进行处理的场合。
1.单调递增的行键/时序数据
在一个集群中,一个导入数据的进程一动不动,所有的client都在等待一个region(就是一个节点),过了一会后,变成了下一个region…如果使用了单调递增或者时序的key就会造成这样的问题。使用了顺序的key会将本没有顺序的数据变得有顺序,把负载压在一台机器上。所以要尽量避免时间戳或者(e.g. 1, 2, 3)这样的key。
2.尽量最小化行名和列名的字段大小
在HBase中,值是作为一个单元(Cell)保存在系统的中的,要定位一个单元,需要行,列名和时间戳。通常情况下,如果你的行和列的名字要是太大(甚至比value的大小还要大)的话,你可能会遇到一些有趣的情况。在HBase的存储文件中,有一个索引用来方便值的随机访问,但是访问一个单元的坐标要是太大的话,会占用很大的内