大量のデータを管理することは、主にクエリまたはスキャン結果が複数のページに実行される場合、データ管理者にとって困難な作業になる可能性があります。 DynamoDB のページネーションは、結果を複数の管理可能なページに分割することで、データベースが大量のデータを処理できるようにします。また、DynamoDB のページネーションが他のデータベースのページネーションとどのように異なるかについても強調しています。
DynamoDB のページネーションとは?
一般に、「ページ」という言葉に由来するページネーションは、データ レコードを複数のチャンク、セグメント、またはページに分割するためにデータベースで使用される手法です。また、AWS DynamoDB は大量のデータの保存をサポートしているため、信頼性の高いページネーション機能を備えています。
DynamoDB のページネーション コンポーネントにより、スキャンまたはクエリごとに最大 1 GB のデータしか取得できないことが保証されます。これはデフォルトの設定ですが、クエリに limit パラメータを追加して制限を指定できます。さらに、各スキャン クエリのレコード数に制限を設定できます。
特に、DynamoDB のページネーションと一般的な SQL データベースのページネーションにはいくつかの違いがあります。最も明白なことは、DynamoDB で取得されるページ付けされた各レコードには直接コストがかかるため、DynamoDB でページ付けを使用する場合、これは不文律になります。この機能により、ページネーションは、取得されたレコードと直接コストの両方を制限する上で重要な要素になります。
DynamoDB でページネーションを使用する方法
1. クエリ操作中のページネーション
DynamoDB では、クエリは最大 1 MB の結果のみを返します。ただし、結果を精査することで、より多くの結果があるかどうかを効果的に確認できます。特に、低レベルのクエリ操作の結果には、取得する必要があるクエリに関連するアイテムが他にもあることを示す、null 以外の LastEvaluatedKey 要素が含まれています。
null 以外の LastEvaluatedKey 要素のない結果は、クエリに一致するすべてのアイテムが 1 MB の制限内に収まり、取得するアイテムがこれ以上ないことを意味します。もちろん、結果ごとのアイテム数に制限を設定することもできます。次のサンプル コマンドを参照してください。
aws dynamodb クエリ\
--テーブル名 MyTableName \
--キー条件式 'パーティションキー = :pk \
-- 式属性値 '{' :pk ':{' S ':' a1234b '}}、
--制限 10 \
前のコマンドを使用して、同じキー条件式の値を持つ項目についてテーブルをクエリできます。 「Orders」テーブルで Darry Tech の order_Ids を検索してみましょう。また、1 ページあたり 10 アイテムに制限を設定しています。 –limit パラメーターの別のオプションは、同じ目的で –page-size パラメーターを使用することです。
ページネーションは、1MB 未満のデータに対する AWS CLI の自動操作です。クエリを特定の順序から開始したい場合は、コマンドに排他的な開始キーを追加できます。
応答は次のようになります。
提供された結果では、最初のページに 10 個の Darry Tech が表示されます。 LastEvaluatedKey 値を使用して、検索の式キー値に一致する注文をさらに取得し、新しいクエリを作成できます。新しいクエリ リクエストには、ExclusiveStartKey パラメータに LastEvaluatedKey 値が含まれています。
構文の例を次に示します。
aws dynamodb クエリ\--table-name ExampleTable \
--キー条件式 'パーティションキー = :pk \
-- 式属性値 '{' :pk ':{' S 「:ダリーテック」 \
--制限 10 \
--exclusive-start-key '{' パーティションキー ':{' S 「:ダリーテック」 }、 「ソートキー」 :{ 'S' : 「5356」 }} '
前のコマンドは、指定された主キーを持つ注文 ID から始まる、次のページで次のセットオフ注文を生成します。 「5356-sy」}}。
2. スキャン操作中のページネーション
スキャン操作にページネーションを使用することもできます。すべてがクエリ コマンドと同じように機能します。ただし、filter-expression 属性を使用する必要があります。コマンドは次のようになります。
aws dynamodb スキャン\--テーブル名 MyTable \
--フィルター式 '属性名 = :値' \
--式属性値 '{':値':{'S':'ABC123'}}' \
--制限 20 \
--exclusive-start-key '{'PartitionKey':{'S':'ABC123'},'SortKey':{'S':'XYZ987'}}'
前のコマンドは、主キーが {'PartitionKey': 'ABC123', 'SortKey': 'XYZ987'} であるアイテムから始まる、ページごとに最大 20 個のアイテムを MyTable テーブルから取得します。結果をフィルタリングして、AttributeName 属性の値が「ABC123」であるアイテムのみを含めます。
応答では、 LastEvaluatedKey フィールドには、結果セットの最後の項目の主キーが含まれます。この値を ExclusiveStartKey その後の スキャン 結果の次のページを取得する操作。
結論
DynamoDB のページネーションにより、データの管理性が向上します。ただし、システムがページネーションの恩恵を受けるかどうかを知ることは非常に重要です。アプリケーション内のアイテムのリストが長い場合は、ページネーションを使用する必要があります。提供されている図は AWS CLI 呼び出しに焦点を当てていますが、Python の Boto3 などの AWS SDK や任意の SDK でページネーションを使用することもできます。