我正在使用 Java 查询 Azure 表,我想使用以下代码检索具有给定分区 ID 的所有实体。但是由于Azure Table中有以下限制,我想知道应该如何解决它们。我担心的限制是:
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++;
}
最佳答案
1) 使用执行将自动且延迟地跟随连续标记从一页到另一页结果。 executeSegmented 不会。因此,您拥有的代码应该可以很好地用于分页。
2) 如果超过限制或出现峰值,您可能会受到限制。例如,随着系统负载平衡,0 到 2000 很快就会受到限制。该库默认有一个重试策略机制(指数),它将重试受限制的请求几次。您也可以更改重试策略设置或使用自定义重试策略。有关详细信息,请参阅 TableRequestOptions 类和 Retry*Retry 类。
关于java - 检索 Azure 表中某个分区的所有实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34320164/