我尝试使用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中使用实际的前缀搜索,我们将不胜感激。在
read_rows
方法有两个参数start_key
和{例如,假设表中有以下行键:
如果要检索带有前缀为
^{pr2}$a
的行,可以运行:这将只扫描}的行)。在
a
和b
(b
除外)之间的行,因此它将返回所有行键前缀为a
(a
和{相关问题 更多 >
编程相关推荐