hbase实现分页查询

[Author]: kwu 

hbase实现分页查询,实现按时间查询最新的15条,hbase的查询主要是通过rowkey来进行的,保证查询的高效。column的filter查询效率较低。


1、rowkey的设计

以时间的倒序进行查询,如20150818_152130来看,设计rowkey

20150818的hash64值+(999999-152130)。

1)MurmurHash的64的冲突非常小,并实现rowkey的散列。

2)日分秒与999999的差值,可以实现逆序


2、插入数据的操作

[java]  view plain copy
  1. String[] splited = jsData.split("`");  
  2.   
  3. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");  
  4. Date date = new Date();  
  5. String format = sdf.format(date);  
  6.   
  7. String dateday = format.substring(08);  
  8. String datehour = format.substring(810);  
  9. String dateMin = format.substring(1012);  
  10. String dateSec = format.substring(1214);  
  11.   
  12. int datehourSub = 99 - new Integer(datehour);  
  13. int dateMinSub = 99 - new Integer(dateMin);  
  14. int dateSecSub = 99 - new Integer(dateSec);  
  15.   
  16. String dateHash = MurmurHash.hash64(dateday) + "_" + datehourSub  + dateMinSub  + dateSecSub;  
  17.   
  18. Put put = new Put((dateHash + "_" + splited[0]).getBytes());  
  19. put.add("cf1".getBytes(), "bdcCookieId".getBytes(), splited[0].getBytes());  
  20. put.add("cf1".getBytes(), "pcScreenRatio".getBytes(), splited[1].getBytes());  
  21. put.add("cf1".getBytes(), "objClassName".getBytes(), splited[2].getBytes());  
  22. put.add("cf1".getBytes(), "pageOpenTime".getBytes(), splited[3].getBytes());  
  23. put.add("cf1".getBytes(), "pageLoadCompleteTime".getBytes(), splited[4].getBytes());  
  24. put.add("cf1".getBytes(), "pageCloseTime".getBytes(), splited[5].getBytes());  
  25. put.add("cf1".getBytes(), "category".getBytes(), splited[6].getBytes());  
  26. put.add("cf1".getBytes(), "browserVersion".getBytes(), splited[7].getBytes());  
  27. put.add("cf1".getBytes(), "currentURL".getBytes(), splited[8].getBytes());  
  28. put.add("cf1".getBytes(), "targetParentURL".getBytes(), splited[9].getBytes());  
  29. put.add("cf1".getBytes(), "referrer".getBytes(), splited[10].getBytes());  
  30. put.add("cf1".getBytes(), "clickX".getBytes(), splited[11].getBytes());  
  31. put.add("cf1".getBytes(), "clickY".getBytes(), splited[12].getBytes());  
  32. put.add("cf1".getBytes(), "targetURL".getBytes(), splited[13].getBytes());  
  33. put.add("cf1".getBytes(), "objID".getBytes(), splited[14].getBytes());  
  34. put.add("cf1".getBytes(), "objName".getBytes(), splited[15].getBytes());  
  35. put.add("cf1".getBytes(), "objValue".getBytes(), objValue.getBytes());  
  36. put.add("cf1".getBytes(), "siteCookieId".getBytes(), splited[17].getBytes());  
  37. put.add("cf1".getBytes(), "scrollValue".getBytes(), splited[18].getBytes());  
  38. put.add("cf1".getBytes(), "sessionId".getBytes(), splited[19].getBytes());  
  39. put.add("cf1".getBytes(), "ip".getBytes(), splited[20].getBytes());  
  40. put.add("cf1".getBytes(), "macAdress".getBytes(), splited[21].getBytes());  
  41. put.add("cf1".getBytes(), "gaId".getBytes(), splited[22].getBytes());  
  42. put.add("cf1".getBytes(), "baiduId".getBytes(), splited[23].getBytes());  
  43. put.add("cf1".getBytes(), "activeTime".getBytes(), splited[24].getBytes());  
  44. put.add("cf1".getBytes(), "status".getBytes(), splited[25].getBytes());  
  45. put.add("cf1".getBytes(), "triggertime".getBytes(), splited[26].getBytes());  
  46.   
  47. List<Put> list = new ArrayList<Put>();  
  48. list.add(put);  
  49.   
  50. HTable table = new HTable(configuration, "jsActionPage");  
  51. table.put(list);  
  52.   
  53. table.close();  


3、查询 利用scan 时间倒序

[java]  view plain copy
  1. HTable table = new HTable(configuration, "jsActionPage");  
  2. Scan scan = new Scan();  
  3. scan.setStartRow(startRow.getBytes());  
  4. scan.setStopRow(stopRow.getBytes());  
  5.   
  6. JSONObject resultJson = new JSONObject();  
  7.   
  8. JSONObject temp = null;  
  9. ResultScanner scanner = table.getScanner(scan);  
  10.   
  11. for (Result result : scanner) {  
  12.     JSONArray jsonArray = new JSONArray();  
  13.   
  14.     String rowkey = "";  
  15.     for (KeyValue keyValue : result.raw()) {  
  16.         byte[] row = keyValue.getRow();  
  17.         rowkey = new String(row);  
  18.   
  19.         String qualifier = new String(keyValue.getQualifier());  
  20.         String value = new String(keyValue.getValue());  
  21.   
  22.         temp = new JSONObject();  
  23.         temp.put(qualifier, value);  
  24.         jsonArray.add(temp);  
  25.     }  
  26.     resultJson.put(rowkey, jsonArray);  
  27. }  
  28.   
  29. table.close();  

最后返回json的数据格式

你可能感兴趣的:(分页,hbase)