最近做乙個基於hbase 的大日誌儲存,分析系統。 在key的設定上有一些心得,拿出來大家共享。
我們這個日誌系統有個需求,就是根據某個操作找出整個會話的所有操作,按一般的做法就是根據sid(會話id)欄位來掃瞄全表,返回所有該會話sid的記錄。**如下:
scan scan = new scan();
filterlist filterlist = new filterlist();
filterlist.addfilter(new singlecolumnvaluefilter(bytes.tobytes("cf"),
bytes.tobytes("sid"), op, bytes.tobytes("10000000")));
scan.setfilter(filterlist);
resultscanner rs = currenttable.getscanner(scan);
由於hbase 是key ,value儲存系統,因此對基於v的條件查詢都是全表掃瞄,對於小資料量沒問題,但是一旦資料量大到百萬,千萬級(我們這裡是一天就千萬級)那就會無法接受,會非常非常非常慢。。 但是我們知道key是是順序排列的,基於key的訪問就會非常快。因此我們在設計key的時候加點小小技巧就可以讓你輕鬆快速查詢到相同sid的操作。
具體:key = datetime +sid+seq (seq為同一sid的不同操作的順序編號)。 這樣我們查詢sid=100000的所有操作的**如下:
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記錄多大,上述查詢時間都在毫秒級了。。。
Hive Hive中表連線的優化,加快查詢速度
1 多表連線的執行順序和mapreduce job優化 select a.ymd a.price close b.price close c.price close from stocks a join stocks b on a.ymd b.ymd join stocks c on a.ymd c...
Android Studio配置,加快編譯速度
在project 的gradle.properties中新增 org.gradle daemon true org.gradle parallel true org.gradle jvmargs xmx1024m如果記憶體足夠大,可以這樣 org.gradle jvmargs xmx4096m xx...
如何加快按生產訂單查詢物料憑證的報表的速度
在sap的物料憑證中mseg表中有aufnr欄位對應訂單主資料的aufk的aufnr欄位,很多程式設計師會按照該關係去查詢資料,由於mseg表中有aufnr沒有建立索引,查詢非常慢。其實訂單到物料憑證的關係存在aufm表,通過該錶查詢速度將快100倍以上。aufm其實就類似sd的索引器。大家以後碰到...