Amazon Web Services ブログ

NoSQL Workbench for Amazon DynamoDB – プレビューの使用が可能になりました

毎月数件のリクエストから毎秒何千万ものリクエストに簡単にスケールできる、完全マネージド型の key-value データベースとドキュメントデータベースを AWS のお客様に提供する Amazon DynamoDB には、いつも感銘を受けてきました。

DynamoDB チームは最近、オンデマンドキャパシティからネイティブな ACID トランザクションのサポートまで、数多くの素晴らしい機能をリリースしました。こちらは、グローバルテーブル、ポイントインタイムリカバリ、およびインスタントアダプティブキャパシティなど、最近の DynamoDB 発表の内容がよくわかる概要です。DynamoDB は、保管時のお客様データをすべてデフォルトで暗号化するようになりました。

しかし、リレーショナルデータベースから NoSQL への発想の切り替えはそれほど簡単なことではありません。昨年の re:Invent では、DynamoDB の仕組みと、それをどのように皆さんのユースケースに使用できるかに関する 2 つの素晴らしい講演が行われました。

DynamoDB をさらに役立てていただくため、AWS は本日、プレビュー版の NoSQL Workbench for Amazon DynamoDB を発表します。これは、データモデルの設計と視覚化、データでのクエリの実行、およびアプリケーションのためのコードの生成を支援するための、Windows および macOS で利用できる無料のクライアント側アプリケーションです。

NoSQL Workbench が提供する 3 つの主な機能は以下の通りです。

  • Data modeler – テーブルとインデックスを追加することによる新しいデータモデルの構築、または既存のデータモデルのインポート、変更、およびエクスポートを実行。
  • Visualizer – 手動で追加、または SQL クエリ経由でインポートできるサンプルデータを使用した、アプリケーションのアクセスパターンに基づくデータモデルの視覚化を実行。
  • Operation builder – データプレーンオペレーションの定義と実施、または設定なしですぐに使用できるオペレーション用のサンプルコードの生成を実行。

この新しいツールが DynamoDB での作業をどのようにシンプル化するのかを見るために、お客様とお客様の注文に関する情報を取得するためのアプリケーションを構築しましょう。

NoSQL Workbench の使用
Data modeler で CustomerOrders データモデルを作成することから始め、お客様データとお客様の注文に関する情報を保持するテーブル CustomerAndOrders を追加します。このツールは、お客様と注文が 2 つの個別のテーブルにあり、それぞれに独自のプライマリキーがあるシンプルなデータモデルを作成するために使用できます。これだけでもまったく問題ありませんが、ここでは、より高度な設計パターンを使用するためにこのツールがどのように役立つかをご紹介したいと思います。お客様と注文のデータを単一のテーブルに置くことによって、DynamoDB と一回やり取りするだけで必要なデータをすべて返し、アプリケーションのパフォーマンス速度を向上させるクエリを構築できます。

パーティションキーとして、customerId を使用します。この選択により、データが複数のパーティションにまたがって均等に分散されます。データモデル内のソートキーは、項目に応じて異なるデータを保持できるという意味から、多重定義された属性になります。

  • お客様データが含まれる項目のための固定文字列 (例えば customer)。
  • 注文が含まれる項目のための、20190823 などのISO 8601 文字列を使って記述された注文日付。

これら 2 つの可能な値でソートキーを多重定義することによって、お客様データと最近の注文を返す単一のクエリを実行できます。 このため、ソートキーには汎用名を使用します。今回は sk を使います。

DynamoDB には、パーティションキーとオプションのソートキー以外にも柔軟なスキーマがあり、他の属性はテーブル内の項目ごとに異なるものにすることができますが、このツールでは、テーブルのために使用する可能な属性のすべてをデータモデル内で記述するオプションがあります。そうすることによって、アプリケーションに必要なアクセスパターンのすべてがこのデータモデルとうまく機能することを後で確認できます。

このテーブルには、以下の属性を追加します。

  • お客様データが含まれるテーブル内の項目のための customerName および customerAddress
  • 注文データが含まれるテーブル内の項目のための orderId および deliveryAddress

orderDate 属性を追加しないのは、このデータモデルではその値が sk ソートキーに保存されるからです。 実際の本番ユースケースには、お客様と注文を説明する属性がはるかに多くあると思われますが、今回は、何ができるかを詳細にとらわれることなく紹介できるように物事をシンプルに保つように努めています。

私のアプリケーションのもうひとつのアクセスパターンは、ID を使って特定の注文を取得できるようにするものです。このため、パーティションキーとして orderId を使用し、かつソートキーは使用せずに、グローバルセカンダリインデックスをテーブルに追加します。

テーブル定義をデータモデルに追加し、Visualizer に移動します。ここでは、いくつかのサンプルデータを追加することによってテーブルを更新します。今回はデータを手動で追加しますが、リレーショナルデータベースからの NoSQL 移行をシンプル化するなどのために、MySQL データベースのテーブルから数行をインポートすることも可能です。

ここで、このテーブルから何を期待すべきかをより良く理解できるように、サンプルデータを使ってデータモデルを視覚化します。例えば、customerId を選択し、特定の日付より「大きい」注文のすべてをクエリした場合、最後にお客様データも取得されます。これは、sk ソートキーに保存された文字列 customer が、常に ISO 8601 構文で記述されたどの日付よりも「大きい」からです。

Visualizer では、orderId でグローバルセカンダリインデックスがどのように機能するかも確認できます。興味深いことに、orderId がない項目はこのインデックスの一部ではないため、サンプルデータの一部である 6 項目のうち 4 項目のみが取得されます。これは、DynamoDB が対応するインデックスエントリを書き込むのは、項目内にインデックスソートキーの値が存在する場合のみだからです。すべてのテーブル項目にソートキーが表示されない場合、そのインデックスはスパースであると言われます。 スパースなインデックスは、テーブルのサブセクションに対するクエリに便利です。

ここで、データモデルを DynamoDB にコミットします。このステップは、選択されたデータモデルのためにテーブルおよびグローバルセカンダリインデックスなどのサーバー側リソースを作成し、サンプルデータをロードします。これを行うには、AWS アカウントの AWS 認証情報が必要です。このツールを使用している環境には AWS コマンドラインインターフェイス (CLI) をインストールし、設定してあるので、単純に名前付きプロファイルのひとつを選択できます。

Operation builderder に移動します。ここには、選択された AWS リージョン内のすべてのテーブルが表示されます。新しく作成された CustomerAndOrders テーブルを選択して、データを参照し、アプリケーションで必要なオペレーションのコードを構築します。

今回の場合、特定のお客様について、入力する日付よりも新しいすべての注文を選択するクエリを実行したいと思っています。先ほど見たように、多重定義されたソートキーも、最後の項目としてお客様データを返します。Operation builder は、条件と子エクスプレッション追加するなど、DynamoDB オペレーションの完全な構文を使用するために役立ちます。今回は、deliveryAddressSeattle が含まれる注文のみを返す条件を追加します。

DynamoDB テーブルでオペレーションを実行するオプションもありますが、今回はアプリケーションでクエリを使用します。コードを生成するため、Python、JavaScript (Node.js)、または Java のいずれかを選択します。

Operation builder は、ACID トランザクションを含めた DynamoDB が提供するすべての高度な機能を使用して、アプリケーションで使用する予定のすべてのアクセスパターンのコードを生成するために使用できます。

今すぐご利用いただけます
Windows および macOS 向けの NoSQL Workbench for Amazon DynamoDB (プレビュー) をセットアップする方法はこちらでご覧いただけます。

DynamoDB ディスカッションフォーラムでは、皆さんのご意見をお待ちしています。この新しいツールで皆さんが何を構築するのか、そしてどうすれば私たちがより良いサービスを提供できるのかについて、ぜひご意見をお聞かせください。