我需要对表存储运行查询。我需要从大约10个连续分区键中获得特定的数据。更准确地说,我的Azure表包含一个PK/RK模式,因此每个PK大约有300行。在每个PK中,我需要检索大约100行。
我可以这样调用:
var query = table.CreateQuery<Item>()
.Where(n => string.Compare(n.PartitionKey, fromPk, StringComparison.Ordinal) >= 0 &&
string.Compare(n.PartitionKey, toPk, StringComparison.Ordinal) <= 0 &&
string.Compare(n.RowKey, fromRk, StringComparison.Ordinal) >= 0 &&
string.Compare(n.RowKey, endRk, StringComparison.Ordinal) <= 0
).AsTableQuery();
或10个调用this:
var query = table.CreateQuery<Item>()
.Where(n => string.Compare(n.PartitionKey, pk, StringComparison.Ordinal) == 0 &&
string.Compare(n.RowKey, fromRk, StringComparison.Ordinal) >= 0 &&
string.Compare(n.RowKey, endRk, StringComparison.Ordinal) <= 0
).AsTableQuery();
更好的是什么?
我自己没有分析过,我猜在某些情况下差异可能非常小,但单一查询可能是可行的方法。
单个查询是相当有效的,但是由于您拥有的数据量(结果集中大约有3000行)以及一次最多将获得1000行的事实,这将导致至少3次对底层API的调用。
单个查询可能更快,您可能不会得到延续令牌,您可以并行运行它们。如果您不能并行运行查询,我预计请求的延迟会压倒任何查询性能差异。