我正在尝试使用 Python SDK 在 Google Cloud Bigtable 上通过多个前缀执行搜索。我正在使用read_rows
,但看不到明确按前缀搜索的好方法。
我的第一个选择是RowSet
+ RowRange
。我正在测试三个查询,我得到的时间是~1.5s、~3.5s 和 ~4.2s,比使用 Node SDK(具有过滤器选项)的搜索慢一个数量级〜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,它具有前缀过滤功能。有了这个,我得到~36s, ~3s, ~1s〜0.4,〜0.1,〜0.17。第一个查询涉及多个前缀,它似乎不支持在同一个请求中进行多个过滤,所以我执行的请求与前缀一样多,然后连接迭代器。另外两个似乎利用了前缀过滤器。
更新:我第一次删除是因为环境出错。正确执行后,范围查询的时间还不错,但似乎还有改进的余地,因为 Happybase 测试在利用前缀搜索时仍然更快。
希望能帮助您在 Happybase 中使用多个前缀搜索,或在主要 Python SDK 中使用实际前缀搜索。