Azure表高级查询

本文关键字:查询 高级 Azure | 更新日期: 2023-09-27 18:20:27

我在某处读到,查询RowKey和PartitionKey以外的数据将导致完整的表扫描。我希望能正确理解整个查询过程,但我对整个折磨有点茫然。

假设我在一个存储器中有几百万行的数据对象。我通过PartitionKey将其划分为数据的子集。假设我按照创建了一个查询

var query = new TableQuery<MyEntity>()
    .Where(TableQuery.CombineFilters(
        TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, pPartition),
        TableOperators.And,
        TableQuery.GenerateFilterCondition("Timestamp", QueryComparisons.GreaterThanOrEqual, startTime));

这个查询是如何在表末尾构造的?我可以控制首先应用哪个过滤器吗?这是应用它们的顺序吗?所以在这种情况下,我首先会得到一个子集,比如。。100k行,然后应用时间戳过滤器。

我考虑这样做的原因是,我想同时使用PartitionKey和RowKey来存储不同的数据以进行分离,但我也需要能够尽可能有效地按日期查询。该系统将有相当大的工作负载,有很多这样的请求,因此及时工作很重要。

Azure表高级查询

针对TableStorage的所有查询首先应用PatitionKey和th RowKey过滤器,然后对每个块应用额外的过滤器。如果您想通过一些其他字段来提高查询的性能,则需要将它们作为PartitionKey或RowKey的一部分。这是唯一的方法。您可能会在PartitionKey和RowKey属性中找到一些高级技术来执行Joins,并从TableStorage中检索它们。