首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Hbase中检索大量结果(就像SQL中的in )

如何在Hbase中检索大量结果(就像SQL中的in )
EN

Stack Overflow用户
提问于 2013-06-17 02:48:48
回答 2查看 97关注 0票数 0

我在我的数据库中存储产品(timeseries)的价格和库存。我的rowkey的结构如下:

productid-时间戳

与家庭的股票,价格等。

是否可以扫描超过1个product-id?

例如:给我所有来自product-id 4711,4744,8485,8585的数据...不需要一个以上的电话。

向凯文致敬

EN

回答 2

Stack Overflow用户

发布于 2013-06-17 03:38:17

如果您有足够新的HBase版本,则可以使用HTable batch method在一次调用中获取多个ids

票数 0
EN

Stack Overflow用户

发布于 2013-06-17 04:16:59

HBase有两个基本的检索选项: GET和SCAN。一次扫描意味着:从第N行开始,按顺序返回所有记录,直到到达第M行(其中M >= N)。GET只是一次单行扫描(M==N);实际上,它实际上就是这样实现的,这是有意义的,因为行是排序的,所以没有更有效的方法可以到达其中之一。

因此,对于您的情况,您有几个选择:

  1. 你可以只用一个get调用就能得到它们中的每一个,这会在每次都产生RPC开销。
  2. 你可以用一个batch调用来得到多个RPC,这只会产生一个RPC(如果你的行跨多个区域,则每个区域;如果你得到很多行,则受批处理大小的限制)。
  3. 如果你的行聚集在行键的一个小空间中,你可以手动将它们组装成多个并行运行的扫描,然后在客户端进行后期过滤,只返回你想要的那些(在你的例子中,你可以从4711->4744和从8485->8585进行扫描)。这需要更多的智能才能正确执行,但在某些纯粹的性能场景中可能会胜出,这取决于表的稀疏性或密度、行大小等。您可能只能通过
  4. 来确定这一点。在这种情况下,您可以使用带有SEEK_NEXT_USING_HINT的自定义筛选器来节省原始扫描时间,方法是执行“跳过扫描”,即一旦您看到所需ID簇的末尾,就可以跳转到下一簇。同样,这取决于表格的特征,这可能是一场胜利,也可能不是。

还有另一个不错的选择:您可以使用Phoenix,它是HBase之上的一种SQL皮肤。它已经为这种情况内置了跳过扫描,并作为JDBC驱动程序公开。它还有许多其他的性能优化,从零开始创建会很费力(聚合协处理器等)。

(完全公开,我为创建Phoenix的公司工作,但它是完全开源的,所以除了认为它很酷之外,我没有任何特别的既得利益来建议它。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17136524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档