【AWS発表】DynamoDB のクエリをセカンダリインデックスのスキャンを使ってシンプルにする
例えばデータを集約するようなアプリケーションを構築しているとしましょう。それはゲーム、モバイル、IoT あるいはシンプルに今どきのWebアプリケーションのためかもしれません。ユーザ指向でニーズに迅速に応えて行くことが満足度につながります。そのためには出来る限り早くアプリケーションの開発をしていく必要があります。ある日ユーザは追加情報の保管を始めることを求めてきて、次にはその情報を受け取るより良い方法を求めてくるでしょう。
Amazon DynamoDB はこのような環境においてアプリケーションを開発するのにとても適しています。従来のリレーショナルデータベースと異なり、DynamoDB はスキーマが無くJSON オブジェクトをサポートしており、素早さと柔軟さを提供しています。追加情報(新しい属性や値)のデータが利用可能になった時にテーブル定義や既存のアイテムを変更せずに、保存を開始できる事を意味しています。追加した情報を新しい方法で取り出したいというリクエストには、柔軟で効率的なグローバルセカンダリインデックスを使用することができます(ダウンタイム無しでオンラインでインデックスを作成することもできます)。
ご存知のように、DynamoDB のテーブルにクエリを行う3つの方法があります。:
- 特定の1個のアイテムを取得するのに
GetItem操作を行えます。 - 条件に一致する複数のアイテムを取得するのに
Query操作を行えます。 - 全てのアイテムを取得するのに
Scan操作を行えます。
セカンダリインデックスのScan
“セカンダリインデックスのScanにより、本番環境のアプリケーションに影響を与えずに DynamoDB メッセージテーブルを完全や増分でバックアップできるようになりました。”
Roi Ginat
Vice President, R&D
Glide Talk
今回、テーブルのローカルやグローバルのセカンダリインデックスに Scan 操作を行えるようにしました。インデックスに投影(プロジェクション)された属性のセットを受け取ることが効率的にできるようになります。1つ以上の条件にあったアイテムのみ受け取ることが出来るよう結果にフィルタを適用もできるようにもなりました。インデックスに投影するテーブル属性を希望するサブセットで指定できるため、プロビジョニングした読み込みスループットの消費が効率よいスリムなインデックスを作成できます。この機能により、テーブル内のアイテムに属性を追加する事が多くなると思います。
この新しい機能は Scan 命令の呼び出しに利用したいインデックスの名前を含める事で利用できます。ローカルあるいはグローバル のセカンダリインデックスをスキャンできます。ローカルセカンダリインデックスのスキャンでは投影されていない属性を求めることができますが、グローバルセカンダリインデックスのスキャンでは行えません。インデックスの属性はスキャン操作で返される結果の順番を決定します。
Console-Based Scanning
AWS Management Console は既にセカンダリインデックスを使ったスキャンをサポートしています。例えば、テーブルに以下のようにアイテムが含まれているとします。:
グローバルセカンダリインデックスは以下のようになっています。:
Explore Table をクリックしてインデックスをスキャンします。ドロップダウンのメニューから利用したいインデックスを選択し、Start New Scan をクリックします。:
見ての通り、インデックスに投影されている属性のみ結果に含まれています。フィルタを追加することでスキャン結果を限定する事ができます。:
いますぐ利用できます
この機能は既に利用可能になっており、今日から使いはじめる事が出来ます。セカンダリインデックスのスキャンのコスト(読み込みキャパシティのユニットで計測)はインデックスのクエリを行うのと同じです。 フィルタをしなかったり、投影されていない属性をリクエストするローカルセカンダリインデックスのスキャンのコストは同じテーブルを通常通りスキャンするのと同じです。
— Jeff (翻訳は辻が担当しました)
コメント