我們都知道 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