Azure表高级查询

时间:2013-06-28 11:19:27

标签: c# performance azure-table-storage

我在某处查询了查询除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来存储不同的数据以进行分离,但我还需要能够尽可能高效地按日期查询。系统将承担相当大的工作量,并且会有很多这样的请求,因此及时工作非常重要。

1 个答案:

答案 0 :(得分:1)

所有查询再次使用TableStorage首先应用PatitionKey和第四个RowKey过滤器,然后为每个块应用其他过滤器。如果要通过其他某些字段提高查询性能,则需要将它们作为PartitionKey或RowKey的一部分包含在内。这是唯一的方法。您可以在PartitionKey和RowKey属性中找到一些高级技术来执行连接,并从TableStorage中检索它们。