Bigtable 查询的正则表达式过滤器 - performance/recommendations

Regex filters on Bigtable queries - performance/recommendations

我想询问有关在带或不带前缀的 Bigtable 中使用 Regex 查询的建议和性能注意事项。

我们在行键末尾有信息需要使用 Regex 进行过滤。

Bigtable 是否需要进行完整的 table 扫描才能执行不包含前缀的 Regex 查询?性能方面的考虑是什么?这是推荐的吗?

在查询中引入前缀将如何影响推荐?

感谢 advice/thoughts 我们优化架构。

我是 Cloud Big 的工程团队成员table。

Bigtable 过滤器引擎将尝试解析出您的 Regex 查询中存在的任何前缀,并使用它来缩小扫描范围。

编辑 (2019-05-14): 事实证明这不太准确。 Bigtable 将解析出前缀并使用它来寻找过去不相关的数据,但这对每个 tablet 都是单独发生的。特别是,即使 tablet 最终被完全跳过,我们仍然必须向每个 tablet 发送请求。所以这将比真正的完整 table 扫描快得多,但仍然存在性能问题。我们正在研究改进。

但是,如果您不提供前缀,那么 Bigtable 将无事可做,因为任何行 都可能 匹配。因此,这种类型的查询将导致完整的 table 扫描。对于需要良好执行的查询,不建议使用大型扫描,因此最好安排行键以尽可能避免它们。您可以找到有关 schema design in the docs.

的更多信息

请注意,您始终可以在我们支持的所有客户端中为您的扫描设置明确的行边界。这对于限制无限扫描的大小很有用,但如果您确实需要加速大型查询,也可以使用它并行读取 table 的多个分片: