答案是分页。将top_size
-- max number of results or records in result -- 与next_partition_key
和next_row_key
延续标记一起使用。这在性能上产生了显着的甚至阶乘差异。一方面,您的结果在统计上更有可能来自单个分区。简单的结果表明,集合是按分区继续键而不是行继续键分组的。
换句话说,您还需要考虑您的 UI 或系统输出。不要费心返回超过 10 到 20 个结果,最多 50 个。用户可能不会再使用或检查。
听起来很愚蠢。在 Google 上搜索“dog”并注意搜索只返回 10 个项目。不再。如果您费心点击“继续”,接下来的记录对您有用。研究证明,几乎没有用户冒险超出第一页。
select
(返回键值的子集)可能会有所不同;例如,使用select
="PartitionKey,RowKey"
或'Name'
您需要的任何最小值。
“我相信,跨越这些边界的效果也会导致延续令牌,这需要额外的往返存储来检索结果。这会导致性能降低,以及事务计数(以及随后的成本)的增加。”
...有点不正确。使用延续令牌不是因为跨越边界,而是因为 azure 表允许不超过 1000 个结果;因此,这两个延续标记用于下一组。默认的 top_size 基本上是 1000。
为了您的观赏乐趣,这里是来自 azure python api 的查询实体的描述。其他的也差不多。
'''
Get entities in a table; includes the $filter and $select options.
table_name: Table to query.
filter:
Optional. Filter as described at
http://msdn.microsoft.com/en-us/library/windowsazure/dd894031.aspx
select: Optional. Property names to select from the entities.
top: Optional. Maximum number of entities to return.
next_partition_key:
Optional. When top is used, the next partition key is stored in
result.x_ms_continuation['NextPartitionKey']
next_row_key:
Optional. When top is used, the next partition key is stored in
result.x_ms_continuation['NextRowKey']
'''