2017-06-05 26 views
2

に動作していない私は、Java AWS-SDKバージョン1.11.140DynamoDBのAWSのJavaスキャンwithLimitは

を使用して1のDynamoDBScanExpression withLimitを使用するために、私は.withLimitを使用する場合でも(1)すなわち

List<DomainObject> result = mapper.scan(new DynamoDBScanExpression().withLimit(1)); 
をしようとしています

は私にすべてのエントリー、すなわち7のリストを返します。私は何か間違っていますか?

P.S.このクエリにcliを使用してみました。

aws dynamodb scan --table-name auditlog --limit 1 --endpoint-url http://localhost:8000 

私はただ1つの結果を返します。

答えて

0

DynamoDBMapper.scanはPaginatedScanListを返します - ページ区切りされた結果は、ユーザーが必要とする操作を実行するとオンデマンドでロードされます。 size()などの一部の操作では、リスト全体をフェッチする必要がありますが、結果はできるだけページごとに遅延して取得されます。

したがって、DynamoDBScanExpressionに設定されたlimitパラメータは、ページごとにフェッチされるアイテムの最大数です。

あなたのケースでは、PaginatedListが返され、PaginatedList.sizeを実行すると、DynamoBからすべての項目をロードしようとします。項目は1ページにつき1つずつ読み込まれます(各ページはDynamoDbへのフェッチ要求です)。 PaginatedListの終わりまで来ます。

あなたは、ダイナモからのすべての7つの項目を取得せずになることを得るための良い方法最初の結果で唯一興味があるので:

Iterator it = mapper.scan(DomainObject.class, new DynamoDBScanExpression().withLimit(1)).iterator(); 
    if (it.hasNext()) { 
     DomainObject dob = (DomainObject) it.next(); 
    } 

上記のコードでは、最初のアイテムだけが取り出されますdynamodbから。

これは、次のとおりです。DynamoDBQueryExpressionのlimitパラメータは、改ページ目的でのみ使用されます。ページあたりのアイテム数の制限は、リクエストできるページ数の制限ではありません。

関連する問題