Dynamodb-best-practices

提供:Dev Guides
移動先:案内検索

DynamoDB-ベストプラクティス

特定のプラクティスでは、さまざまなソースや要素を操作するときにコードを最適化し、エラーを防ぎ、スループットコストを最小限に抑えます。

以下は、DynamoDBで最も重要で一般的に使用されるベストプラクティスの一部です。

テーブル

テーブルの分散は、読み取り/書き込みアクティビティをすべてのテーブルアイテムに均等に分散する最適なアプローチを意味します。

テーブルアイテムへの均一なデータアクセスを目指します。 最適なスループットの使用は、主キーの選択とアイテムのワークロードパターンに基づいています。 ワークロードをパーティションキー値全体に均等に分散します。 少量の頻繁に使用されるパーティションキー値などを避けます。 大量の個別のパーティションキー値など、より適切な選択肢を選択します。

パーティションの動作を理解します。 DynamoDBによって自動的に割り当てられたパーティションを推定します。

DynamoDBはバーストスループットの使用を提供します。これにより、電力の「バースト」のために未使用のスループットが予約されます。 バーストは大量のスループットをすぐに消費するため、このオプションを頻繁に使用しないでください。さらに、信頼できるリソースであることは証明されていません。

アップロード時に、パフォーマンスを向上させるためにデータを配信します。 割り当てられたすべてのサーバーに同時にアップロードすることにより、これを実装します。

頻繁に使用されるアイテムをキャッシュして、読み取りアクティビティをデータベースではなくキャッシュにオフロードします。

アイテム

調整、パフォーマンス、サイズ、およびアクセスコストは、引き続きアイテムの最大の懸念事項です。 1対多のテーブルを選択します。 アクセスパターンに一致するように属性を削除し、テーブルを分割します。 このシンプルなアプローチにより、効率を劇的に改善できます。

大きな値を圧縮してから保存します。 標準の圧縮ツールを使用します。 S3などの大きな属性値には代替ストレージを使用します。 オブジェクトをS3に、識別子をアイテムに保存できます。

仮想アイテムを介して複数のアイテムに大きな属性を配布します。 これにより、アイテムサイズの制限に対する回避策が提供されます。

クエリとスキャン

クエリとスキャンは、主にスループット消費の課題に悩まされます。 通常、強い整合性のある読み取りへの切り替えなどの結果として生じるバーストを避けます。 リソースの少ない方法で並列スキャンを使用します(つまり、スロットルなしのバックグラウンド機能)。 さらに、それらを大きなテーブルでのみ使用し、スループットまたはスキャン操作を十分に活用していない状況では、パフォーマンスが低下します。

ローカルセカンダリインデックス

インデックスは、スループットとストレージコスト、およびクエリの効率の分野で問題を提示します。 頻繁に属性を照会しない限り、索引付けは避けてください。 予測では、インデックスが膨張するため、賢明に選択してください。 頻繁に使用されるもののみを選択してください。

スパースインデックスを使用します。これは、すべてのテーブル項目にソートキーが表示されないインデックスを意味します。 ほとんどのテーブル項目に存在しない属性のクエリに役立ちます。

アイテムコレクション(すべてのテーブルアイテムとそのインデックス)の展開に注意してください。 追加/更新操作により、テーブルとインデックスの両方が大きくなり、コレクションの制限は10GBのままです。

グローバルセカンダリインデックス

インデックスは、スループットとストレージコスト、およびクエリの効率の分野で問題を提示します。 主要な属性の分散を選択します。これは、テーブルでの読み取り/書き込みの分散のように、ワークロードの均一性を提供します。 データを均等に分散する属性を選択します。 また、スパースインデックスを利用します。

適度な量のデータを要求するクエリで高速検索を行うために、グローバルセカンダリインデックスを活用します。