簡體   English   中英

Hbase對列限定符進行排序

[英]Hbase sort on column qualifiers

我有一個Hbase表,有幾百萬條記錄。 每條記錄都有幾個描述記錄的屬性,每個記錄都存儲在一個列限定符中。(主要是int或字符串值)我要求我能夠看到基於列限定符分頁和排序的記錄(甚至更多)不止一個,將來)。 這樣做的最佳方法是什么? 我使用協處理器(主要是huawei的hindex)查看了二級索引,但它似乎與我的用例完全不符。 我還考慮過將所有數據復制到多個表中,每個表對應一個排序屬性,這些表將包含在rowkey中,然后將查詢重定向到這些表。 但這似乎非常繁瑣,因為我已經有一些所謂的屬性..

謝謝你的任何建議。

你需要你的NoSQL數據庫才能像RDBMS一樣工作,並且考慮到數據的大小,如果你堅持下去,你的生活會更簡單,除非你期望指數增長:)另外,你沒有提到你的數據是否得到了更新,這對做出正確的決定非常重要。

話雖如此,你有很多選擇,這里有一些:

  • 如果你可以等待結果:寫一個MapReduce任務來進行掃描,對它進行排序並檢索前X行,你真的需要每個排序類型超過1000頁(20-50k行)嗎? 另一種選擇是使用像Hive這樣的東西。

  • 如果您可以聚合數據並“減少”數據集:編寫MapReduce任務以定期將最新的聚合數據導出到SQL表(將處理查詢)。 我已經做過幾次了,它就像一個魅力,但它取決於你的要求。

  • 如果您有足夠的存儲空間:編寫MapReduce任務以定期為每個屬性重新生成(或附加數據)一個新表(在行鍵中按它排序)。 您不需要多個表,只需在每個案例的rowkeys中使用前綴,或者,如果您不想要表,並且您不會有很多查詢,只需將已排序的數據寫入csv文件並將其存儲在HDFS,您的前端應用程序可以輕松讀取它們。

  • 手動維護一個二級索引:哪個不能容忍架構更新和新屬性,但對於近實時結果非常有用。 要做到這一點,您必須更新代碼,以便使用良好的緩沖區寫入輔助表,以幫助提高性能,同時避免熱區。 想想這種類型的rowkeys: [4B SORT FIELD ID (4 chars)] [8B SORT FIELD VALUE] [8B timestamp]字符串[4B SORT FIELD ID (4 chars)] [8B SORT FIELD VALUE] [8B timestamp] ,只有一列存儲主表的rowkey。 要檢索按任何字段排序的數據,只需使用SORT FIELD ID作為起始行執行SCAN,將起始排序字段值作為分頁的樞軸(忽略它以獲取第一頁,然后設置最后一個檢索到的),即你將擁有主表的rowkeys的方式,你可以只執行一個multiget來檢索完整的數據。 請記住,您需要一個小腳本來掃描主表,並將數據寫入現有行的索引表。

  • 依靠你提到的協處理器的任何自動二級索引,盡管我根本不喜歡這個選項。

您主要列舉了選項。 您知道HBase本身不支持二級索引。 除了hindex,你可以考慮鳳凰

https://github.com/forcedotcom/phoenix

(來自SalesForce)除了二級索引之外還有jdbc驅動程序和sql支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM