« 【AWS発表】 AWS Elastic BeanstalkがIAMロールをサポート | メイン | 【AWS発表】 Amazon RDS for Oracle Databaseがデータとネットワークの暗号化をサポート »

【AWS発表】 Amazon DynamoDB でローカルセカンダリインデックスを作成可能に

Amazon DynamoDBのテーブル毎にローカルセカンダリインデックスを作成することができるようになりました。ローカルセカンダリインデックスを使えば新しい方法でテーブルを照会することができ、検索効率を向上させることができます。

ローカルセカンダリインデックスとは?
ローカルセカンダリインデックスモデルはDynamoDBの既存のキーモデルの上に構築します。

本日までは、テーブルを作成する際、次の2つの主キーオプションのいずれかを選択する必要がありました。

  • ハッシュ - 特定のテーブル内の各アイテムを一意に識別する、厳密に型指定(文字列、数字、バイナリのいずれか)された値
  • ハッシュ + レンジ - 2つの組み合わせて、特定のテーブル内の各アイテムを一意に特定する値を形成する、厳密に型指定された項目のペア。DynamoDBは主キーのハッシュ部分に一致するアイテムの一部もしくは全てを取得できる、レンジクエリーをサポートする。

本日のリリースで、ハッシュ + レンジオプションを、テーブル毎に最大5つのローカルセカンダリインデックスをサポートするよう、拡張しています。主キーのように、ローカルセカンダリインデックスもテーブル作成時に定義する必要があります。各インデックスは主でない属性を参照し、ハッシュキーと特定の2つ目のキーを組みあわせた検索を効率的にしてくれます。

また、セカンダリインデックスにテーブルの他の属性の一部もしくは全てを投影するかどうかを選択できます。DynamoDBは必要に応じて、テーブルもしくはインデックスから属性の値を自動的に取得します。特定の属性を投影することで、取得スピードを改善したり、消費されるプロビジョンドスループットの量を減らすことが期待できますが、追加のストレージスペースが必要になります。セカンダリインデックス内の項目は、お互い物理的に近い場所に、クエリの性能を高めるためにソートされ、格納されています。

どのように使うのか?
米国の社長についての情報(非常に大きなデータセットだと考えてください。)を格納したテーブルアクセスする必要があるとします。 そして、 Find the Dataのデータを使って、ハッシュキーとしてNumber、レンジキーとしてDateTookOfficeを持つテーブルを作成します。

Number DateTookOffice Name VP Party Age YearsInOffice
 1 1789-04-30
George Washington
John Adams
None
57 6.34
 2 1797-03-04 John Adams
Thomas Jefferson
Federalist
61 4
 3 1801-03-04
Thomas Jefferson
Aaron Burr
Democratic- Republican
57 8
 4 1809-03-04 James Madison
George Clinton
Democratic- Republican 57 8
 5 1817-03-04
James Monroe
Daniel Tompkins
Democratic- Republican 58 8

このスキーマでは、Number(番号)とDateTookOffice(日付)の範囲を使って、社長を検索することができます。ここで、さらにAge (就任時)によって照会したいとしましょう。この場合、次のようなローカルセカンダリインデックス(Age)を持ったテーブルを作成します。

Number DateTookOffice Age
 1 1789-04-30 57
 2 1797-03-04 61
 3 1801-03-04 57
 4 1809-03-04 57
 5 1817-03-04 58

さらに、クエリの一部としてNameフィールドを取得することが多いと仮定します。この場合、より効率的にするために、Age属性をAgeNameインデックスに投影することができます。

Number DateTookOffice Name Age
 1 1789-04-30 George Washington 57
 2 1797-03-04 John Adams 61
 3 1801-03-04 Thomas Jefferson 57
 4 1809-03-04 James Madison 57
 5 1817-03-04 James Monroe 58

ローカルセカンダリインデックスはどのように作成・使用したらよいですか?
先ほど述べたように、DynamoDBのテーブル作成時にローカルセカンダリインデックスを作成しなければなりません。AWS Management Consoleから作成する手順は次のとおりです。

DynamoDBの既存のQuery APIはローカルセカンダリインデックスをサポートしています。APIコールはテーブル、インデックス名、返して欲しい属性、適用したい任意のクエリ条件を指定する必要があります。 Java, PHP, .NET / C# のサンプルも用意しております。

コストとプロビジョンドスループット
DynamoDBのコスト構造におけるローカルセカンダリインデックスの意味についてお話しましょう。

セカンダリインデックスを作成することで、DynamoDBの処理量が多くなります。ローカルセカンダリインデックスを持つテーブル内の項目を追加、削除、置換する場合、関連するインデックスを更新するために、余計に書き込み容量ユニットを使います。

1つ以上のローカルセカンダリインデックスを持つテーブルを照会する場合、次の2つの異なるケースを考慮する必要があります。

インデックスキーと投影された属性を使うクエリの場合、DynamoDBはテーブルからではなく、インデックスから読み取られ、それに応じた読み取り容量ユニットの数が計算されます。これにより、テーブルよりインデックス内の属性の方が少ない場合、コストの削減につながります。

投影されていない属性を読み取るインデックスクエリの場合、DynamoDBはテーブルとインデックスを読み取る必要があります。これにより追加の容量ユニットを消費することになります。

今すぐはじめましょう!
ローカルセカンダリインデックスは本日より、米国東部(北バージニア)、米国西部(オレゴンおよび北カリフォルニア)、南米(サンパウロ)、ヨーロッパ(アイルランド)、アジアパシフィック(東京、シンガポール、シドニー)リージョンでご利用いただけます。今すぐお試しください!

堀内康弘 (Facebook, Twitter)

 

コメント

トラックバック

この記事のトラックバックURL:
http://www.typepad.com/services/trackback/6a00d8341c534853ef017eea59b929970d

【AWS発表】 Amazon DynamoDB でローカルセカンダリインデックスを作成可能にを参照しているブログ:

Featured Event

2016年3 月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31