gpt4 book ai didi

java - 使用比较过滤器的 HBase 扫描在返回最后一行时有很长的延迟

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:35 24 4
gpt4 key购买 nike

我的 HBase 在独立模式下运行,并且在使用 Java API 查询表时遇到了一些问题。该表有几百万个条目(但可能会增长到数十亿),它们具有以下行键指标:

<UUID>-<Tag>-<Timestamp>

我使用两个比较操作过滤器来查询表示时间间隔的特定行范围。

Scan scan = new Scan();
RowFilter upperRowFilter = new RowFilter(CompareOp.LESS,
new BinaryComparator(securityId + eventType + intervalEnd)
.getBytes()));

RowFilter lowerRowFilter = new RowFilter(CompareOp.GREATER_OR_EQUAL,
new BinaryComparator(securityId + eventType + intervalStart)
.getBytes()));

FilterList filterList = new FilterList();
filterList.addFilter(lowerRowFilter);
filterList.addFilter(upperRowFilter);

scan.setFilter(filterList);
scanner = table.getScanner(scan);
result = scanner.next();

当我调用 ResultScanner#next() 方法时,一切正常,直到到达最后一个通过过滤器指定的键范围的行。最多需要 40 秒直到 ResultScanner 返回最后一行,该行在词法上小于上面的行行范围限制。

当我更改filterList中过滤器的顺序时

filterList.addFilter(lowerRowFilter);
filterList.addFilter(upperRowFilter);

filterList.addFilter(upperRowFilter);
filterList.addFilter(lowerRowFilter);

扫描仪需要长达 40 秒的时间才能开始返回任何结果,但没有返回最后一行的延迟更多,因此我认为延迟来自 CompareOp.LESS - 过滤器。

我知道解决此延迟的唯一方法是省略 upperRowFilter 并手动检查行键是否超出范围,但我确信一定有问题,因为我在互联网上搜索时没有发现任何问题。

我也已经尝试通过缓存消除这个问题,但是当我使用小于返回的行数的缓存大小时,它不会改变任何内容,并且如果我使用大于返回的行数的缓存大小,延迟仍然存在,但在返回任何结果之前再次出现。

您知道什么会导致这种行为吗?我是否做错了或者我遗漏了什么?

提前致谢!

最佳答案

问题在于您的扫描程序正在扫描整个表并丢弃与您的查询不匹配的结果。您需要显式设置(securityId + eventType + IntervalEnd)的停止行。如果您设置相应的起始行(securityId + eventType + IntervalStart),那么您根本不需要过滤器,并且无论数据集大小如何,扫描都会高效。

关于java - 使用比较过滤器的 HBase 扫描在返回最后一行时有很长的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com