有没有人有一个示例 java 代码对 dynamoDB 表执行扫描操作,其中扫描操作仅使用特定百分比的吞吐量限制?提前致谢。
问问题
2088 次
1 回答
5
昨天,我们在AWS Java 开发人员博客上发布了一篇关于如何在 Amazon DynamoDB 中进行速率受限扫描的博文。我不确定您使用的是哪种编程语言,但如果您使用的是 Java,那么这种使用 GoogleGuava RateLimiter类的方法可能适合您。但格雷格之前的回复也是正确的。如果您使用的是 Amazon Elastic Map Reduce,则 DynamoDB 插件支持可配置的读取和写入吞吐量百分比,以便在扫描表时将其限制为自身。DynamoDB 的Amazon Redshift 集成也有此设置。
以下是博客文章的片段,展示了如何使用 RateLimiter 和适用于 Java 的 AWS 开发工具包执行限制自身每秒消耗 25 个读取容量单位的分页扫描:
// Initialize the rate limiter to allow 25 read capacity units / sec
RateLimiter rateLimiter = RateLimiter.create(25.0);
// Track how much throughput we consume on each page
int permitsToConsume = 1;
// Initialize the pagination token
Map<String, AttributeValue> exclusiveStartKey = null;
do {
// Let the rate limiter wait until our desired throughput "recharges"
rateLimiter.acquire(permitsToConsume);
// Do the scan
ScanRequest scan = new ScanRequest()
.withTableName("ProductCatalog")
.withLimit(100)
.withReturnConsumedCapacity(ReturnConsumedCapacity.TOTAL)
.withExclusiveStartKey(exclusiveStartKey);
ScanResult result = dynamodb.scan(scan);
exclusiveStartKey = result.getLastEvaluatedKey();
// Account for the rest of the throughput we consumed,
// now that we know how much that scan request cost
double consumedCapacity = result.getConsumedCapacity().getCapacityUnits();
permitsToConsume = (int)(consumedCapacity - 1.0);
if(permitsToConsume <= 0) {
permitsToConsume = 1;
}
// Process results here
processYourResults(result);
} while (exclusiveStartKey != null);
于 2013-06-14T16:03:44.133 回答