スループットキャパシティーを最大限に活用することができます。このような設計により、テーブルのキャパシティーを過剰に消費する可能性があるホットパーティションの発生を防ぐことができます。つの方法は、パーティションキースペースを拡大させることです。この戦略は、パーティションキーに追加のサフィックスを付加して、基盤となるパーティション全体での配分を向上させるもので、書き込みシャーディングと呼ばれます。このアプローチは、いくつかの興味深い設計面での疑問を生じます。テーブルのための動的な書き込みシャーディングのメカニズムを説明します。テーブルの書き込みキャパシティーを最適化できるようにしてくれます。水平分散されたワークロードで能力を発揮します。テーブルを作成するときに、プロビジョンドスループット要件に対応するために十分なパーティションをテーブルに割り当てます。テーブルのキャパシティーを基盤となるパーティション全体に均等に分散します。テーブルが作成された後で追加のパーティションをテーブルに割り当てることもあります。詳細については、「パーティションキーを効率的に設計し、使用するためのベストプラクティス」と「パーティションとデータ分散」を参照してください。項目を保存するパーティションは項目のパーティションキーによって決定されます。コレクションがパーティションのストレージ容量を超える場合を除き、同じパーティションにマップされます。単一のパーティションが複数のコレクションに関連付けられた項目を保持する場合があります。複数のコレクションに対する過剰な書き込みアクティビティは、ホットパーティションの原因になります。ホットパーティションとは、集中的な読み込みおよび書き込みアクティビティが、パーティションのプロビジョンドキャパシティー、またはパーティションの最大キャパシティーを超え、キャパシティーエラーを生じる場合のことです。同じコレクションの項目が同じ基盤となるパーティションにマップされるため、これらのキャパシティーエラーは大規模なコレクションで発生する可能性が高くなります。詳細については、「エラー処理」および「読み込み/書き込みキャパシティーモード」を参照してください。テーブルのパーティション全体に分散させるメカニズムです。これは、パーティションキーに対する書き込み操作を複数のパーティションに分散させることによって、パーティションキーあたりの書き込みスループットを向上させます。パーティションレベルでのキャパシティーエラーが最小限に抑えられます。パーティション全体に分散させることによって、パーティションのキャパシティーがより均等に使用されます。これはテーブルのキャパシティーのより効率的な使用につながり、コストが削減されます。書き込みシャーディングは、パーティションキーにシンプルな値のサフィックスを付加することによって、クライアント側から実装することができます。バイトの変更でさえも内部ハッシュ関数での異なる出力の生成につながり、項目を異なるパーティションに置くために効率的です。詳細については、「書き込みシャーディングを使用してワークロードを均等に分散させる」を参照してください。一時的な需要のバーストを緩和するバーストキャパシティー、および不均等なアクセスパターンに合わせてパーティション間のキャパシティーを再利用するアダプティブキャパシティーの機能をネイティブに提供します。パーティション全体にトラフィックを均等に分散させるための補完的なメカニズムです。事前に設定された数のシャードを使った書き込みシャーディングの例シャーディングすると良いテーブルの例は、ファイルシステムの監査ログです。ここでのパーティションキーはファイルパス、ソートキーはアクセスタイムスタンプになります。パーティションが過剰な数の書き込みリクエストを受けます。つの異なるシャーディングスキームに出現する同一の項目を示しています。つのシャード内に置かれています。ランダムな数値を選択し、項目を更新する前にそれをサフィックスとしてパーティションキーに付加します。個のシャードそれぞれに対して、パーティションキーの後続読み込みを行う必要があります。対してハッシュのモジュロを計算します。このメソッドは、ファイルパスとアクセス時間に基づいて監査項目を検索するためのクエリを最適化するときに便利です。個のシャードすべてをクエリするのではなく、ファイルパスとタイムスタンプャードのハッシュを計算することができます。前述の例は、パーティションキーに事前に設定された数のシャードを使用します。この戦略は、各パーティションキーの読み込みおよび書き込みキャパシティーのニーズと、将来的な増加がよく理解されている場合に効果的ですが、必ずしもそうとは限りません。ユースケースには、各パーティションキーに可変の非決定的な読み込みおよび書き込みパターンがあるものもあります。フィードバックに基づいてパーティションキーの新しいシャードを自動的に追加できる動的シャーディングのメカニズムでは、シャードのアンダーサイジングを防ぎ、実質的に制限なくスケールすることが可能になります。規模を問わないパフォーマンスとコストの最適化を参照してください。(作成後はパーティションキーメタデータテーブルと呼ばれます)。リーダーとライターが、メタデータテーブルをクエリすることによって、所定のパーティションキーの現在のシャード数を判断します。メタデータテーブルには、各項目に以下のスキーマがあります。テーブルは複合プライマリキーを使用しますが、パーティションキーメタデータテーブルはメインテーブルからのパーティションキーのみをプライマリキーとして使用します。これは、パーティションキーメタデータテーブルにある各項目がメインテーブルのコレクションを表すため、メインテーブルよりも小さいメタデータテーブルにもつながります。以下の表は、前のセクションの監査ログの例を使用した、パーティションキーメタデータテーブル内のサンプル項目を表しています。個のシャードがあります。パーティションキーのシャード数の更新にクールダウン期間を施行するために役立ちます。シャード数を増やす前に、ライターは最後にシャード数が更新された時間をチェックする必要があります。短い場合、シャードの数が最近更新されたことから、メタデータテーブルを更新する代わりに、メインテーブルで書き込み操作が再試行されます。属性は、合理的なシャード更新の回数のためにタイムスタンプとシャード数を保持します。似た値になり、セット内の各文字列はエポックタイムの値と、コロンで区切られたシャード数を表しています。シャードの最近の履歴をクエリしてシャード数の増加が速すぎるか遅すぎるかを見極めることによって、シャードを追加するロジックをより高度にすることができます。次に、パーティションキーに対するスループット需要が時間と共に減少し、読み込みのコストを最適化する必要がある場合は特に、将来のシャード数を削減するとよいかもしれません。し、他の属性は前の表で説明したスキームに従って、パーティションキーメタデータテーブルに新しい項目を挿入します。ランダムに選択して、書き込む前にシャード数をパーティションキーに付加します。更新することによってメタデータテーブルの項目を更新します。ライターはその後、パーティションキーに新しいシャード数を付加することによって、メインテーブルでの項目の書き込みを試行します。これに続いて、ライターによる新しい書き込みのすべてが、パーティションキーのより大きなシャードされたスペース全体に分散されます。テーブルキャパシティー制約の検知」セクションを参照してください。オペレーションを使用してテーブルのプロビジョンドキャパシティーを増加させることができます。開発者ガイドの「UpdateTable」を参照してください。設定されている場合は、これがテーブルの書き込みキャパシティーを自動的に更新します。よるスループットキャパシティーの自動管理」を参照してください。テーブルに対するクエリは、いずれも所定のパーティションキーのすべてのシャードをクエリする必要があります。取得し、クエリを各シャードのメインテーブルに対して行います。複数のキャパシティーエラーは、制約付きテーブルまたはパーティションの読み込みキャパシティーに関連している場合があります。オペレーションを使用してテーブルの読み込みキャパシティーユニットを更新できます。有効化されている場合は、これがテーブルの読み込みキャパシティーを自動的に更新します。複数のパーティションキャパシティーが制約されており、テーブルに十分な読み込みキャパシティーがある場合は、テーブルの読み込みキャパシティーの増加は、パーティションの最大読み込みキャパシティーまでしか有効になりません。テーブルの使用とキャッシングが、メインテーブルの読み込みをスケールするための効果的な戦略です。詳細については、「グローバルセカンダリインデックス」を参照してください。効果的に使用することができます。おける読み込み操作のバランスを取ることによって、利用可能な読み込みスループットを増やすことができます。階層のローカルキャッシュの使用を検討してください。テーブルキャパシティー制約の検知パーティションキャパシティーエラーは、パーティション上のキャパシティーリクエストがそのプロビジョンドキャパシティー、またはパーティションの最大キャパシティーを超える場合に発生します。クエリすることでこれらのメトリクスを比較できます。複数のパーティションキーに対するリクエストを増加させている可能性が高くなります。メトリクスとディメンション」を参照してください。パーティションキーメタデータテーブルの読み込みのスケーリングリクエストフローに個別のパーティションキーメタデータテーブルを導入すると、追加の依存性がアプリケーションに追加されるので、これを考慮する必要があります。メインテーブルに対するリーダーとライターの両方がパーティションキーメタデータテーブルをクエリして、パーティションキーのシャード数を判断する必要があります。このため、パーティションキーメタデータテーブルでの読み込みのスケーリングを検討することが重要になります。パーティションキーメタデータテーブルは、独自にキャパシティーを管理する必要をなくし、運用上の負担を減らすためにも、オンデマンドキャパシティーを使用することが理想的です。キャッシングメカニズムの使用といった、先ほど説明したメインテーブルの読み込みキャパシティーのスケーリングのためのテクニックも検討する必要があります。パーティションキーメタデータテーブルの更新パーティションキーメタデータテーブルの更新を試行する可能性がある複数のライターが存在する競合システムがある場合、クールダウンロジックの実装をさらに検討する必要があります。複数のライターがクールダウン期間の終了後すぐにメタデータテーブルの更新を試行するという状況を避けるために、ライターがメタデータテーブルの更新を試行する前のランダムバックオフを実装することができます。までカウントダウンします。これにより、シャード数の更新試行の頻度が低減されます。複数のライターが同じ項目を同時に更新することを防ぐための楽観的ロックの組み込みメカニズムを提供します。コールを使用する必要があります。開発者ガイドの「条件付き更新」を参照してください。属性をチェックします。これにより、複数のライターがメタデータテーブルの項目を無節操に更新しないことが確実になります。使用することができます。テーブルの書き込みキャパシティーを最適化するシャーディングソリューションと設計上の考慮事項について説明しました。パーティション全体に分散させることを確実にしながら、パーティションキーの書き込みスループットが経時的に増加し、実質的に制限なくスケールすることを可能にします。スケールのために設計された他の分散型システムと同様に、動的シャーディングの実装に選択するパラメータは、アプリケーションのアクセスパターンに応じて異なります。コミュニティの利益となるように、コメントセクションで実装から学んだ事柄を共有してください。サービスのシニアソリューションアーキテクトです。おいて分散型システムとアプリケーションをウェブスケールで設計、デプロイ、および運用する支援をしています。ソリューションズアーキテクトです。最適化、および概念実証において、知名度の高い戦略的なお客様を支援しています。機会均等法を順守しています。平等に採用しています。