使用Python sdk按前缀扫描Bigtable

2024-09-30 18:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用pythonsdk在googlecloudbigtable上执行多个前缀的搜索。我使用的是read_rows,我看不出一个很好的方法来显式地按前缀搜索。在

{{cd2>是^我的第一个选择。我测试了三个查询,得到的时间分别是~1.5s,~3.5s和~4.2s,比使用NodeSDK(它有一个过滤器选项)的搜索慢一个数量级。~0.19,~0.13,~0.46。在

第二个选项是使用RowFilterChain+RowKeyRegexFilter。其中两个查询的性能很差:~3.1s,~70s,~75s~0.124s,~72s,~69s。看起来它正在进行完整扫描。以下是代码部分:

            regex = f'^{prefix}.*'.encode()
            filters.append(RowKeyRegexFilter(regex)) 

我的第三个选择是使用另一个基于Happybase的SDK,它有前缀过滤。有了这些,我得到了36秒,3秒,1秒,0.4秒,0.1秒,0.17秒。第一个查询涉及多个前缀,而且它似乎不支持在同一个请求中进行多个筛选,因此我执行与前缀一样多的请求,然后连接迭代器。另外两个似乎利用了前缀过滤器。在

更新:我删除了第一次,因为环境有错误。在正确地执行之后,对于范围查询来说,时间并不差,但似乎还有改进的空间,因为Happybase测试在利用前缀搜索时仍然更快。在

如果您能在Happybase中使用多个前缀搜索,或者在Python主SDK中使用实际的前缀搜索,我们将不胜感激。在


Tags: 方法利用过滤器read选项时间sdkregex
1条回答
网友
1楼 · 发布于 2024-09-30 18:21:38

read_rows方法有两个参数start_key和{},可用于根据行键有效地过滤行(请参见docs)。在幕后,这个方法执行扫描,所以这可能是基于行键过滤行的最有效方法。在

例如,假设表中有以下行键:

a
aa
b
bb
bbb

如果要检索带有前缀为a的行,可以运行:

^{pr2}$

这将只扫描abb除外)之间的行,因此它将返回所有行键前缀为aa和{}的行)。在

相关问题 更多 >