2014-03-03 130 views
1

我有一個大約5億行的大型HBase表,大約有100列(每行不同)數據。提高HBase查詢性能

我想根據任何列限定符值儘可能快地查詢這些數據。

我知道,當我們知道ROW-KEY時,HBase是爲快速讀取而優化的,但我想根據不同的列值進行查詢。但是應用列過濾器(使用JAVA API)會導致全表掃描,從而降低系統的速度

我有什麼選擇?

  • INDEXING:每行中存在的列發生更改。我還可以做索引嗎?
  • 我是否繼續使用HBase存儲數據?或者將它與Solr或ElasticSearch一起使用?
  • 基於任何列值可能有10億行的隨機查詢,我可以期待什麼樣的性能?

歡迎任何其他建議。

回答

1

在Hbase中從行鍵獲取數據很快,但由於值沒有編入索引,因此使用值過濾器查詢是很慢的。如果要索引的列數很少,可以考慮反轉表索引。

但是,如果你想要更多的東西,比如多條件查詢,你應該看看elasticsearch並使用它來只存儲你的列索引並保持你的數據在hbase中。不要忘記在創建索引時使用「_source」禁用源存儲:{「enabled」:false},所有的數據已經在hbase中,不要浪費你的硬盤:)

+0

感謝您的回覆。 如果有數據進入HDFS,我必須運行一些MR作業將其推送到HBase表中,那麼在這種情況下,我可以使用elasticsearch-hadoop插件將其移入ElasticSearch嗎? – coldmix

+0

確實,或者你可以開發你自己的mapper/mapreducer來索引你的數據。 –