DynamoDB におけるパーティションとデータ分散
Amazon DynamoDB は、データをパーティションに保存します。パーティションは、ソリッドステートドライブ (SSD) によってバックアップされ、AWS リージョン内の複数のアベイラビリティーゾーン間で自動的にレプリケートされる、テーブル用のストレージの割り当てです。パーティション管理は DynamoDB によって完全に処理されます。パーティションをご自身が管理する必要はありません。
テーブルを作成するときに、テーブルの最初のステータスは CREATING
になります。このフェーズの間に、DynamoDB はテーブルに十分なパーティションを割り当て、プロビジョンされたスループット要件に対応できるようにします。テーブルのステータスが ACTIVE
に変わったらテーブルデータの書き込みと読み取りを開始できます。
DynamoDB は次の状況でテーブルに追加のパーティションを割り当てます。
-
テーブルのプロビジョニングされたスループット設定を、既存のパーティションがサポートできる以上に増やした。
-
既存のパーティションが容量いっぱいになり、より多くのストレージ領域が必要になった。
パーティション管理は自動的にバックグラウンドで自動的に発生し、アプリケーションに対して透過的です。テーブルは利用可能な状態のままで、プロビジョニングされたスループット要件を完全にサポートします。
詳細については、パーティションキーの設計を参照してください。
DynamoDB のグローバルセカンダリインデックスもパーティションで構成されます。グローバルセカンダリインデックスのデータは、基本テーブルのデータとは別に保存されますが、インデックスパーティションはテーブルパーティションと同様に動作します。
データ分散: パーティションキー
テーブルにシンプルなプライマリキー (パーティションキーのみ) がある場合、DynamoDB はパーティションキーバリューに基づいて、各項目を保存および取得します。
DynamoDB は項目をテーブルに書き込むため、パーティションキーバリューを内部ハッシュ関数への入力として使用します。ハッシュ関数からの出力値によって、項目が保存されるパーティションが決まります。
テーブルから項目を読み込むには、項目のパーティションキーバリューを指定する必要があります。DynamoDB はこの値をハッシュ関数への入力として使用し、項目が見つかるパーティションを提供します。
次の図は、複数のパーティションにまたがる Pets という名前のテーブルを示しています。テーブルのプライマリキーは AnimalType (このキー属性のみが表示されます。) DynamoDB は、ハッシュ関数を使用して、新しい項目を保存する場所を決定します。この場合は、文字列 Dog のハッシュ値に基づいています。項目はソート順に保存されないことに注意してください。各アイテムの場所は、そのパーティションキーのハッシュ値によって決まります。
注記
DynamoDB は、パーティション数にかかわらず、項目がテーブルのパーティション全体に渡って均一にディストリビューションされている状態に対して最適化されています。テーブルの項目数に対して大きな個別の値を持つことができるパーティションキーを選択することをお勧めします。
データ分散: パーティションキーおよびソートキー
テーブルに複合プライマリキー (パーティションキーとソートキー) がある場合、DynamoDB は データ分散: パーティションキー で説明したのと同じ方法でパーティションキーのハッシュ値を計算します。ただし、パーティションキーの値が同じ項目は互いに近く、ソートキー属性の値によってソートされた順序になる傾向があります。パーティションキー属性の値が同じ項目のセットは、項目コレクションと呼ばれます。項目コレクションは、コレクション内の項目の範囲を効率的に取得できるように最適化されています。テーブルにローカルセカンダリインデックスがない場合、DynamoDB は、データを保存し、読み取りと書き込みのスループットを実現するために必要な数のパーティションに自動的に項目コレクションを分割します。
テーブルに項目を書き込むため、DynamoDB はパーティションキーのハッシュ値を計算し、項目を含めるパーティションを決定します。そのパーティションでは、いくつかの項目で同じパーティションキー値を持つことができます。そのため、DynamoDB には、同じパーティションキーを持つ他の項目とソートキーの昇順で項目が保存されます。
テーブルから項目を読み込むには、パーティションのキーバリューとソートキーのキーバリューを指定する必要があります。DynamoDB は、パーティションキーのハッシュ値を計算し、項目が見つかるパーティションを提供します。
目的の項目に同じパーティションキーバリューがある場合、単一のオペレーション (Query
) でテーブルから複数の項目を読み取ることができます。DynamoDB は、そのパーティションのキーバリューを持つすべての項目を返します。オプションでソートキーに条件を適用し、特定範囲内の値を持つ項目だけを返すことができます。
Pets テーブルに、AnimalType (パーティションキー) と Name (ソートキー) で構成される複合プライマリキーがあるとします。次の図表は、DynamoDB がパーティションのキーバリューが Dog でソートキー値が Fido の項目を書き込んでいるところを示しています。
Pets テーブルから同じ項目を読み込むために、DynamoDB は、ハッシュ値 Dog を計算し、これらの項目が保存されたパーティションを提供します。次に、DynamoDB は、Fido が見つかるまで、ソートキーの属性値をスキャンします。
AnimalType が Dog のすべての項目を読み込むには、ソートキーの条件を指定しないで Query
オペレーションを発行できます。デフォルトでは、項目は保存されている順序 (つまり、ソートキーによって昇順でソート) で返されます。オプションで、代わりに降順をリクエストできます。
一部の Dog 項目のみをクエリするには、ソートキーに条件を適用できます (たとえば、Name が A
から K
の範囲内の文字で始まる Dog 項目のみ)。
注記
DynamoDB テーブルには、パーティションキーバリューごとに個別のソートキーバリューの数に上限はありません。何十億もの Dog 項目を Pets テーブルに保存する必要がある場合、DynamoDB はこの要件を自動的に処理するのに十分なストレージを割り当てます。