メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

パーティションとデータ分散

DynamoDB はデータをパーティションに保存します。パーティションは、Solid State Drive (SSD) によってバックアップされ、AWS リージョン内の複数のアベイラビリティーゾーン間で自動的にレプリケートされる、テーブル用のストレージの割り当てです。パーティション管理は完全に DynamoDB によって処理され、お客様はパーティションを管理する必要はありません。

テーブルを作成するときに、テーブルの最初のステータスは CREATING になります。このフェーズの間に、DynamoDB はテーブルに十分なパーティションを割り当て、プロビジョニングされたスループット要件に対応できるようにします。テーブルのステータスが ACTIVE に変わったらテーブルデータの書き込みと読み取りを開始できます。

DynamoDB は次の状況でテーブルに追加のパーティションを割り当てます。

  • テーブルのプロビジョニングされたスループット設定を、既存のパーティションがサポートできる以上に増やした。

  • 既存のパーティションが容量いっぱいになり、より多くのストレージ領域が必要になった。

詳細については、「パーティションの動作について」を参照してください。

パーティション管理は自動的にバックグラウンドで自動的に発生し、アプリケーションに対して透過的です。テーブルは利用可能な状態のままで、プロビジョニングされたスループット要件を完全にサポートします。

DynamoDB のグローバルセカンダリインデックスもパーティションで構成されます。GSI のデータは、基本テーブルのデータとは別に保存されますが、インデックスパーティションはテーブルパーティションと同様に動作します。

データ分散: パーティションキー

テーブルにシンプルなプライマリキー (パーティションキーのみ) がある場合、DynamoDB はパーティションキーの値に基づいて、各項目を保存および取得します。

DynamoDB は項目をテーブルに書き込むため、パーティションキーの値を内部ハッシュ関数への入力として使用します。ハッシュ関数からの出力値によって、項目が保存されるパーティションが決まります。

テーブルから項目を読み取るには、項目に対するパーティションキーの値を指定する必要があります。DynamoDB はこの値をハッシュ関数への入力として使用して、項目が見つかるパーティションを提供します。

次の図は、複数のパーティションにまたがる Pets という名前のテーブルを示しています。テーブルのプライマリキーは AnimalType です (このキー属性のみが示されています)。DynamoDB はそのハッシュ関数を使用して、新しい項目を保存する場所を決定します (この場合は文字列 Dog のハッシュ値に基づく)。項目はソート順に保存されないことに注意してください。各項目の場所は、そのパーティションキーのハッシュ値によって決まります。

注記

DynamoDB は、パーティション数にかかわらず、テーブルのパーティションにまたがる項目の均一な分散に対して最適化されません。テーブルの項目数に対して大きな個別の値を持つことができるパーティションキーを選択することをお勧めします。詳細については、「テーブルのベストプラクティス」を参照してください。

データ分散: パーティションキーおよびソートキー

テーブルに複合プライマリキー (パーティションキーとソートキー) がある場合、DynamoDB は「データ分散: パーティションキー」に説明されているのと同じ方法でパーティションキーのハッシュ値を計算します。ただし、パーティションキーの値が同じすべての項目は、ソートキー値によって並べ替えられて物理的に近くに配置されます。

テーブルに項目を書き込むため、DynamoDB はパーティションキーのハッシュ値を計算し、項目を含めるパーティションを決定します。そのパーティションで、パーティションキーの値が同じ複数の項目がある可能性があるため、DynamoDB は同じパーティションキーを持つ項目をソートキーで昇順にソートして保存します。

テーブルから項目を読み込むには、パーティションキーの値とソートキーの値を指定する必要があります。DynamoDB は、パーティションキーのハッシュ値を計算し、項目が見つかるパーティションを提供します。

目的の項目に同じパーティションキー値がある場合、単一の操作 (Query) でテーブルから複数の項目を読み取ることができます。DynamoDB はそのパーティションキー値を持つすべての項目を返します。オプションでソートキーに条件を適用し、特定範囲内の値を持つ項目だけを返すことができます。

Pets テーブルに、AnimalType (パーティションキー) と Name (ソートキー) で構成される複合プライマリキーがあるとします。次の図は、パーティションキー値が Dog で、ソートキー値が Fido の項目を書き込む DynamoDB を示しています。

DynamoDB は、Pets テーブルから同じ項目を読み取るために、Dog のハッシュ値を計算して、これらの項目が保存されたパーティションを特定します。次に、DynamoDB は、Fido が見つかるまでソートキーの属性値をスキャンします。

AnimalTypeDog のすべての項目を読み込むには、ソートキーの条件を指定しないで Query オペレーションを発行できます。デフォルトでは、項目は保存されている順序 (つまり、ソートキーによって昇順でソート) で返されます。オプションで、代わりに降順をリクエストできます。

Dog 項目の一部のみにクエリを実行するには、ソートキーに条件を適用できます (たとえば、NameAK の範囲内である Dog 項目のみ)。

注記

DynamoDB テーブルには、パーティションキーの値ごとに個別のソートキー値の数に上限はありません。Pets テーブルに数十億の Dog 項目を保存する必要がある場合、DynamoDB は自動的に十分なストレージを割り当てて、この要件に対応します。