我使用Java查询Azure Table,我想使用以下代码检索具有给定partitionid的所有实体。但是,由于Azure表中存在以下限制,因此我想知道如何解决这些问题。我所关注的限制是:
1)由于Azure Table具有分页机制,如果分区包含更多一定数量的实体(我相信它是1000),它将返回前1000个实体。如何以m代码获取所有记录。
2)由于每个分区的每秒条目数为2000,如果分区包含超过2000个条目且我的应用程序的多个实例同时查询同一个分区,会发生什么?
String partitionFilter = TableQuery.generateFilterCondition(
"PartitionKey",
QueryComparisons.EQUAL,
term);
TableQuery<AzureTableDFEntity> partitionQuery =
TableQuery.from(AzureTableDFEntity.class)
.where(partitionFilter);
// Loop through the results
int count = 0;
for (AzureTableDFEntity entity : cloudTableIDF.execute(partitionQuery)) {
count++;
}
答案 0 :(得分:3)
1)使用execute将自动和懒惰地跟随结果页面之间的延续令牌。 executeSegmented不会。所以,你所拥有的代码应该适用于分页。
2)如果你超过限制或有尖峰,你可能会受到限制。例如,当系统负载平衡时,非常快速的0到2000将受到限制。默认情况下,库具有一个重试策略机制(指数),它将重试限制请求几次。您也可以更改重试策略设置或使用自定义重试策略。有关详细信息,请参阅TableRequestOptions类和Retry * Retry类。