我想问一下在Bigtable中使用带有或不带前缀的Regex查询的建议和性能注意事项。
我们需要使用Regex过滤行键末尾的信息。
Bigtable是否需要执行全表扫描才能执行不包含前缀的Regex查询?有哪些性能考虑因素?这是推荐的吗?
如何为查询引入前缀会影响推荐?
在我们优化架构时,会对此提出建议/想法。
答案 0 :(得分:2)
我是Cloud Bigtable的团队成员。
Bigtable过滤器引擎将尝试解析Regex查询中存在的任何前缀,并使用它来缩小扫描范围。
编辑(2019-05-14):原来这不太准确。 Bigtable将解析前缀并使用它来寻找过去无关的数据,但这会针对每个平板电脑单独发生。特别是,即使平板电脑最终被完全跳过,我们仍然需要向每个平板电脑发送请求。因此,这将比真正的全表扫描快得多,但仍会出现性能问题。我们正在寻求改进。
但是,如果您不提供前缀,那么Bigtable没有任何内容,因为任何行可能匹配。因此,此类查询将导致全表扫描。对于需要执行良好的查询,不建议使用大扫描,因此最好尽可能安排行键以避免它们。您可以找到有关schema design in the docs。
的更多信息请注意,您始终可以在我们所有受支持的客户端中的扫描上设置显式行边界。这对于限制无限制扫描的大小非常有用,但如果您确实需要加速大型查询,还可以使用它来并行读取表的多个分片: