2014-03-03 132 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来索引你的数据。 –