には、希望する方向に応じて、いくつかの異なるオプションがありますDynamoDBMapper
。
ここで重要なのは、メソッド間の違いと、返されたオブジェクトがカプセル化する機能を理解することです。
と について説明しますがPaginatedScanList
、ScanResultPage
これらのメソッド/オブジェクトは基本的に相互にミラーリングされています。
次のPaginatedScanList
ように述べています。
AWS DynamoDB でのスキャンの結果を表す List インターフェイスの実装。ページ分割された結果は、ユーザーがそれらを必要とする操作を実行すると、オンデマンドで読み込まれます。size() などの一部の操作では、リスト全体をフェッチする必要がありますが、可能な場合、結果はページごとに遅延フェッチされます。
これは、リストを反復処理するときに結果が読み込まれることを示しています。最初のページを通過すると、別のリクエストを明示的に行わなくても、2 番目のページが自動的に取得されます。DynamoDBMapperConfig
結果の遅延ロードはデフォルトのメソッドですが、オーバーロードされたメソッドを呼び出してに別の を指定するとオーバーライドできますDynamoDBMapperConfig.PaginationLoadingStrategy
。
これは とは異なりScanResultPage
ます。結果のページが与えられ、ページネーションを自分で処理するのはあなた次第です。
以下は、DynamoDBLocal を使用して 5 つの項目のテーブルで実行した両方のメソッドの使用例を示す簡単なコード サンプルです。
final DynamoDBMapper mapper = new DynamoDBMapper(client);
// Using 'PaginatedScanList'
final DynamoDBScanExpression paginatedScanListExpression = new DynamoDBScanExpression()
.withLimit(limit);
final PaginatedScanList<MyClass> paginatedList = mapper.scan(MyClass.class, paginatedScanListExpression);
paginatedList.forEach(System.out::println);
System.out.println();
// using 'ScanResultPage'
final DynamoDBScanExpression scanPageExpression = new DynamoDBScanExpression()
.withLimit(limit);
do {
ScanResultPage<MyClass> scanPage = mapper.scanPage(MyClass.class, scanPageExpression);
scanPage.getResults().forEach(System.out::println);
System.out.println("LastEvaluatedKey=" + scanPage.getLastEvaluatedKey());
scanPageExpression.setExclusiveStartKey(scanPage.getLastEvaluatedKey());
} while (scanPageExpression.getExclusiveStartKey() != null);
そして出力:
MyClass{hash=2}
MyClass{hash=1}
MyClass{hash=3}
MyClass{hash=0}
MyClass{hash=4}
MyClass{hash=2}
MyClass{hash=1}
LastEvaluatedKey={hash={N: 1,}}
MyClass{hash=3}
MyClass{hash=0}
LastEvaluatedKey={hash={N: 0,}}
MyClass{hash=4}
LastEvaluatedKey=null