メニュー
Amazon DynamoDB
開発者ガイド (API バージョン 2012-08-10)

インデックス管理

インデックスは代替のクエリパターンへのアクセスを付与し、クエリを高速化できます。 このセクションでは、SQL と DynamoDB におけるインデックスの作成と使用を比較します。

リレーショナルデータベースまたは DynamoDB のいずれを使用するにしても、インデックスの作成は慎重に判断する必要があります。 テーブルに書き込みが発生するたびに、テーブルのインデックスはすべて、更新する必要があります。 大きなテーブルでの書き込み量が多い環境では、大量のシステムリソースを消費する可能性があります。 読み取り専用または読み取りがほとんどの環境では、これは大きな問題にはなりません。ただし、インデックスがアプリケーションによって実際に使用されており、ただ容量を取っていることがないよう確認する必要があります。

インデックスの作成

SQL

リレーショナルデータベースのインデックスは、テーブルの異なる列に対して高速にクエリを実行できるデータ構造です。CREATE INDEXSQL ステートメントを使用して、既存のテーブルにインデックスが追加し、インデックスを作成する列を指定します。 インデックスの作成後は、通常どおりテーブルのデータにクエリを実行できますが、テーブル全体をスキャンする代わりに、テーブルの指定された行を迅速に検索するため、データベースがインデックスを使用することができます。

インデックスの作成後は、データベースが維持します。 テーブルのデータを変更した場合は、インデックスが自動的に変更され、テーブル内の変更を反映します。

MySQL では、このようなインデックスを作成できます。

CREATE INDEX GenreAndPriceIndex ON Music (genre, price);

DynamoDB

DynamoDB では、同様の目的のため、セカンダリインデックス を作成し、使用できます。

DynamoDB のインデックスはリレーショナルな対応物とは異なります。 セカンダリインデックス を作成すると、パーティションキーおよびソートキーのように、キー属性を指定する必要があります。 セカンダリインデックス を作成した後、テーブルを使ってするのと同じように、Query を実行または Scan できます。 DynamoDB に、クエリオプティマイザはありませんので、セカンダリインデックス は、Query を実行するか、Scan するときにのみ使用されます。

DynamoDB では、次の 2 種類のインデックスをサポートしています。

  • グローバルセカンダリインデックス - インデックスのプライマリキーは、テーブルからの任意の 2 つの属性になります。

  • ローカルセカンダリインデックス - インデックスのパーティション キーは、テーブルのパーティションキーと同じである必要があります。 ただし、ソートキーは、他の任意の属性にすることができます。

DynamoDB を使えば、セカンダリインデックス のデータは結果的にテーブルと整合性が取れます。 テーブルまたは local secondary index. での強い整合性を持つ Query または Scan アクションをリクエストできます。 ただし、グローバルセカンダリインデックスは結果整合性のみをサポートします。

UpdateTable アクションを使用し、GlobalSecondaryIndexUpdates: を指定して、既存のテーブルに グローバルセカンダリインデックス を追加できます。

{ TableName: "Music", AttributeDefinitions:[ {AttributeName: "Genre", AttributeType: "S"}, {AttributeName: "Price", AttributeType: "N"} ], GlobalSecondaryIndexUpdates: [ { Create: { IndexName: "GenreAndPriceIndex", KeySchema: [ {AttributeName: "Genre", KeyType: "HASH"}, //Partition key {AttributeName: "Price", KeyType: "RANGE"}, //Sort key ], Projection: { "ProjectionType": "ALL" }, ProvisionedThroughput: { "ReadCapacityUnits": 1,"WriteCapacityUnits": 1 } } } ] }

UpdateTable に以下のパラメーターを提供する必要があります。

  • TableName - インデックスが関連付けられるテーブル。

  • AttributeDefinitions - インデックスのキースキーマ属性用のデータ型。

  • GlobalSecondaryIndexUpdates - 作成するインデックスに関する詳細。

    • IndexName - インデックスの名前。

    • KeySchema - インデックスプライマリキーに使用する属性。

    • Projection - テーブルからインデックスにコピーされる属性。 この場合、ALL は、すべての属性がコピーされることを意味します。

    • ProvisionedThroughput - このインデックスに必要な 1 秒あたりの読み取り/書き込み数。 (これは、テーブルのプロビジョニングされたスループット設定とは異なります。)

このオペレーションの一部は、テーブルから新しいインデックスにデータをバックフィリングすることを含みます。 バックフィリング中、テーブルは使用可能なままになります。 ただし、インデックスは Backfilling 属性が true から false に変わるまで、準備ができていません。 DescribeTable アクションを使用して、この属性を表示できます。

注記

UpdateTable を使用するサンプルコード例については、「DynamoDB の使用開始」を参照してください。

このページの内容: