DynamoDB-ベストプラクティス

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

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

テーブル

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

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

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

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

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

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

アイテム

スロットリング、パフォーマンス、サイズ、およびアクセスコストは、依然としてアイテムの最大の懸念事項です。1対多のテーブルを選択します。属性を削除し、テーブルを分割してアクセスパターンに一致させます。この単純なアプローチにより、効率を劇的に向上させることができます。

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

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

クエリとスキャン

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

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

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

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

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

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

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

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