本文目的:搞清楚HBase里面行與行之間的排序排序規則,如何正序和反序輸出掃描結果。
明確:
HBase里面同一列的元素按照rowkey進行排序,排序規則是rowkey的ASCII碼排序,小的在前大的在后。
舉例說明:rowkey的時間設計是Long.MAX_VALUE減去真實的timestamp(單位:秒)(System.currentTimeMillis()/1000得到),由此來看rowkey的排序。
其中箭頭表示HBase掃描內容時的掃描方向。
假設startRowKey由時間戳產生startTime產生,endRowKey由endTime產生,其中endTime > startTime,例如endTime表示"2016-01-02 00:00:00",startTime表示"2016-01-01 00:00:00",則對應關系為
此時掃描由於startRowkey > endRowKey不會有掃描結果!證明箭頭方向表示掃描方向。但是可以通過設置反向掃描數據,這時相當於掃描方向反轉,而不是endRowKey和startRowKey位置互換
1 scanner.setReversed(true);
通過依次輸出結果可以看出時間戳遞增,同樣證明箭頭方向表示掃描方向,且掃描方向被反轉。
//{"timestamp":1478620651} //{"timestamp":1478620661} //{"timestamp":1478620671} //{"timestamp":1478620681} //{"timestamp":1478620692} //{"timestamp":1478620703}
如果想掃描出結果還有一種辦法,startRowKey由時間戳產生endTime產生,endRowKey由startTime產生。此時相當於endRowKey和startRowKey位置互換
此時輸出結果與之前相反,時間順序由大到小。
//{"timestamp":1478620703} //{"timestamp":1478620692} //{"timestamp":1478620681} //{"timestamp":1478620671} //{"timestamp":1478620661} //{"timestamp":1478620651}