发布网友 发布时间:2023-06-20 10:36
共1个回答
热心网友 时间:2023-10-11 14:16
我们都知道 HBase 的数据根据 rowkey 字典序排序的,理解这个概念很重要。
根据 wiki 解释:
通俗的理解,字典序是把字符左对齐,从左到右比大小的排序,一旦比出大小就停止比较后续的字符。
那么排序规则是什么?如果只考虑字母的话,就是: a < b < c < ... < z,当然这个规则也是人为约定的,举例以下就是字典序:
有了之前的概念,理解 HBase Rowkey 字典序会容易一点:
下面这里从实现层面举个例子:假如 HBase 要比较 rowkey "19" 和 "2" ,怎么做?
这里值得一提的是:ASCII 可见字符都是单字节表示,所以字符与 ASCII 字节数组是一一对应的。
但如果你用非 ASCII 可见字符做 rowkey ,例如汉字,就会出现不可控因素,因为一个汉字对应的是多个字节。所以建议 rowkey 就采用常见的可见字符,避免用特殊字符。
ASCII 码可显示字符有 95 个,大致顺序如下
第一个是:「空格」,最后一个是:「~」
下一篇将讲讲 rowkey 的设计与优化,包括预分区的选择策略。
wiki https://zh.wikipedia.org/wiki/ASCII