2

スキャン操作がスループット制限の特定の割合のみを使用する dynamoDB テーブルでスキャン操作を行うサンプル Java コードを持っている人はいますか? 前もって感謝します。

4

1 に答える 1

5

昨日、Amazon DynamoDB でレート制限されたスキャンを行う方法に関するブログ記事をAWS Java 開発者ブログで公開しました。使用しているプログラミング言語はわかりませんが、Java を使用している場合は、GoogleGuava RateLimiterクラスを使用するこのアプローチが役立つ可能性があります。しかし、Greg の以前の回答も正しいです。Amazon Elastic Map Reduce を使用している場合、DynamoDB プラグインは、テーブルをスキャンするときに制限する設定可能な読み取りおよび書き込みスループット パーセントをサポートします。DynamoDB のAmazon Redshift 統合にもこの設定があります。

RateLimiter とAWS SDK for Javaを使用して、1 秒あたり 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 に答える