我使用的是Azure.Data.Tables(12.6.1),我需要从单个表的多个分区中查询单个记录(因此结果将是多个记录,每个分区1个记录)。每个实体都需要通过其分区键和行键进行查找-对于单个TableClient.GetEntity()
调用,这将是一个点查询。
在阅读文档后,我很困惑使用多个分区键/行键对调用TableClient.QueryAsync()
是否有效,而我找到的搜索结果提供了相互矛盾的建议。
这样做是否有效(对于多个分区键/行键组合,最多可达50个),或者对每个实体逐个调用GetEntity()
是否更好?
var filter = "(PartitionKey eq 'p1' And RowKey eq 'r1') Or " +
"(PartitionKey eq 'p2' And RowKey eq 'r2') Or ...";
var results = await tableClient.QueryAsync(filter, 500, null, cancelToken);
2条答案
按热度按时间ybzsozfc1#
我不知道这里是否有一个明确的答案,因为它可能取决于您的具体要求。我建议测试不同的选项,并进行相应的调整。
以下是关于表https://learn.microsoft.com/azure/storage/tables/table-storage-design-for-query的查询性能的一般参考,仅供参考
yhived7q2#
我决定在这种情况下对点查询进行并行化,并给出了很好的结果。我有大量的突发读取情况,我可能要对数以亿计的记录进行数以千计的查找)。我更喜欢使用一系列OR的查询,因为它们往往会提供更差的吞吐量(我现在没有任何统计数据...)。
对我来说,并行化通过两种方式实现:
1.较低级别:等待一批任务,每个任务进行单独的点查询
1.更高级别:构建一个特别繁重的工作负载,以便在多个示例上横向扩展,每个示例通过1)进行并行查询