首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在毫秒内从HBase表中查询数据?

如何在毫秒内从HBase表中查询数据?
EN

Stack Overflow用户
提问于 2016-08-17 05:33:49
回答 3查看 1.7K关注 0票数 1

我正在编写一个接口来查询Hbase表中的分页数据,我通过一些条件查询分页数据,但是它的.My rowkey非常慢:12345678:yyyy-mm-dd、8个随机数的长度和日期.I尝试使用Redis缓存所有rowkeys并在其中进行分页,但是很难通过其他条件查询数据。我还考虑在Hbase中设计二级指标,并与同事讨论,他们认为二级指标很难维持。那么,谁能给我一些想法呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-20 16:28:56

首先,AFAIK随机数+行键的日期模式可能会导致热点,如果你用大数据进行缩放。

关于页数:

如果您使用的是solr + hbase,则提供cloudera + cloudera search。它提供了良好的性能(在我们的例子中得到了证明),同时每页查询100个,并且通过webservice调用,我们已经填充了angularjs仪表板。

另外,最重要的是可以在页面之间来回移动,没有任何问题。

下图描述了这一点。

为此,您需要创建集合(从hbase数据),并可以使用索尔杰 api。

单独使用扫描api的Hbase不适用于快速查询。

除此之外,请看我的答案。对实现细节更有洞察力..。

如何在HBase中实现分页?

Hbase的唯一解决方案可以是Hindex (基于协处理器的解决方案)。

链接更详细地解释了

Hindex架构:

票数 4
EN

Stack Overflow用户

发布于 2016-08-17 06:58:02

在Hbase中,为了获得良好的读取性能,您希望通过少量gets (对单行的请求)或小扫描(对行范围的请求)检索数据。Hbase存储按键排序的数据,所以最重要的想法是想出这样的行键来允许它。您的密钥似乎只包含随机整数和日期,因此我假设您的查询是关于对标记为时间的记录的分页。

第一个想法是,在典型的分页场景中,您一次只访问一个页面,并从第1页导航到第2页到第3页,等等。如果您想对所有记录进行分页,则可以使用启动键'\0: 2015-08-16‘(因为它比2015-08-16中的任何一行都小)扫描50行来检索第一页。在检索了第一页之后,你有了第一页的最后一个键,比如'12345:2015-08-16‘。您可以使用它(或12346:2015-08-16)进行另一次扫描,启动键为12346:2015-08-16的50行检索页2等等。因此,使用这种方法,您可以将页面快速查询为具有预定义的返回行数的单个扫描。因此,您可以使用最后一个页面行键作为分页API的参数,或者将最后一行键放在redis中,这样下一个分页API调用就会在那里找到它。

所有这些都非常好,直到有用户进入并直接点击到100页。或者当他在第2页时尝试点击第5页。在这种情况下,您可以对nSkippedPages * 50行使用类似的扫描。这不会像顺序访问那样快,但它不是通常的页面使用模式。然后,您可以使用redis缓存页面的最后一行,生成类似pageNumber -> rowKey的结构。然后,如果下一个用户出现并点击第100页,它将看到相同的性能在通常的点击第1页-点击页面2-点击第3页的场景。

然后,为了使第一次点击页面99的用户更快,您可以编写一个单独的守护进程,它每50行检索一次,并将结果作为页面索引。然后每10-15分钟启动一次,并说页面索引最多有10-15分钟陈旧的数据。

您还可以设计一个单独的API,它为N个页面预加载行键(例如,大约100页,它可以是异步的,例如,不要等待实际的预加载完成)。它只需扫描KeyOnlyFilter和50*N的结果,然后为每个页面选择行键。因此,它接受行键,并为N个页面填充具有行键缓存的redis。然后,当用户进入第一页时,您将为他获取前100页行键,因此当他单击页面上的某个页面链接时,页面开始行键将可用。使用适当的预加载批量大小,您可以接近所需的延迟。

可以使用Scan.setMaxResults()或使用PageFilter实现限制。“跳过nPages * 50行”,特别是“每50行输出”功能似乎更棘手,例如,对于后者,您可能会结束执行检索键或写入地图的完整扫描--减少操作,并且首先不清楚如何在不通过网络发送行的情况下完成它,因为请求可以分布在多个区域。

票数 2
EN

Stack Overflow用户

发布于 2016-08-17 14:03:41

如果您正在寻找在HBase中维护的辅助索引,那么有几个开源选项(Splice、Lilly等)。您可以在几毫秒内完成索引查找。

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

https://stackoverflow.com/questions/38988780

复制
相关文章

相似问题

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