HBase key設置加快查詢速度小談

    最近作一個基於HBase 的大日誌存儲,分析系統。 在key的設置上有一些心得,拿出來你們共享。session

    咱們這個日誌系統有個需求,就是根據某個操做找出整個會話的全部操做,按通常的作法就是根據SID(會話Id)字段來掃描全表,返回全部該會話SID的記錄。代碼以下:spa

               Scan scan = new Scan();設計

FilterList filterList = new FilterList();日誌

filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes("CF"),get

Bytes.toBytes("SID"), op, Bytes.toBytes("10000000")));it

scan.setFilter(filterList);io

ResultScanner rs = currentTable.getScanner(scan);List


因爲hbase 是key ,value存儲系統,所以對基於V的條件查詢都是全表掃描,對於小數據量沒問題,可是一旦數據量大到百萬,千萬級(咱們這裏是一天就千萬級)那就會沒法接受,會很是很是很是慢。。 可是咱們知道Key是是順序排列的,基於key的訪問就會很是快。所以咱們在設計Key的時候加點小小技巧就可讓你輕鬆快速查找到相同SID的操做。技巧

具體:KEY = DATETIME +SID+SEQ (SEQ爲同一SID的不一樣操做的順序編號)。 這樣咱們查找SID=100000的全部操做的代碼以下:im

                Scan scan = new Scan();

                String startkey = DATETIME + "100000"

                String endkey =  DATETIME +"100000"+"99999"  (咱們假設每一個session最多有100000個操做,固然實際上遠遠小於這個數值。)

scan.setStartRow(Bytes.toBytes(startKey));

scan.setStopRow(Bytes.toBytes(endKey));

       ResultScanner rs = currentTable.getScanner(scan);

 

通過上面一改,不論你的hbase記錄多大,上述查詢時間都在毫秒級了。。。

相關文章
相關標籤/搜索