このレッスンでは、DynamoDB を使用したデータの挿入と取り出しの簡単な例を見ていきます。CreateTable API を使用して DynamoDB テーブルを作成し、次に BatchWriteItem API 呼び出しを使用していくつかの項目を挿入します。それから、GetItem API 呼び出しを使用して各項目を取り出します。これらの例を見ていく前に、サンプルのオンラインブックストアアプリケーションで使用するデータモデルを説明します。
この後のモジュールで、Query API 呼び出しを使用して複数の項目を一度に取り出す方法と、セカンダリインデックスを使用して別のクエリパターンを有効にする方法を説明します。テーブルの既存の項目を更新する方法もご紹介します。
モジュールの所要時間: 15 分
次に示す DynamoDB の概念はこのモジュールで重要な役割を果たします。
- テーブル: DynamoDB データレコードの集合。
- 項目: DynamoDB テーブル内の 1 つのデータレコード。リレーショナルデータベースの行に相当します。
- 属性: 項目についての 1 つのデータ要素。リレーショナルデータベースの列に相当します。ただし、リレーショナルデータベースの列と違って、属性にはこのモジュールの後半に説明するプライマリキー以外、テーブル作成時に指定する必要はありません。属性は文字列、整数、ブール値などの簡単なタイプの場合も、リストやマップなどの複雑なタイプの場合もあります。
- プライマリキー: プライマリキーは DynamoDB テーブル内の 1 つの項目を示す、一意の識別子です。プライマリキーの名前とタイプはテーブル作成時に指定する必要があり、また特定のタイプのプライマリキーは、テーブルに書き込まれる各項目に含まれる必要があります。単一のプライマリキーは単一の属性で構成され、複合プライマリキーはパーティションキーおよびソートキーという 2 つの属性で構成されます。例えば、「UserID」を識別子として単一のプライマリキーを作成することができ、「UserID」と「Creation_Date」を項目の識別子として複合プライマリキーを作成することができます。
アプリケーションを構築するとき、アプリケーションロジックに必要なデータモデルのデザインには常に時間をかけるべきです。このデータモデルデザインでは、アプリケーションでデータの読み込みと書き込みのどちらにも必要なデータアクセスのニーズを考慮する必要があります。
DynamoDB は非リレーショナルデータベースです。非リレーショナルデータベースでは、テーブル作成時に完全なスキーマを事前に定義する必要がありません。必要なのは、テーブルのプライマリキーを指定することだけです。プライマリキーによって、テーブルの各レコードは一意に識別されます。これによりデータモデルのデザインに必要な先行投資の費用を削減できます。アプリケーションのニーズが変わったときに簡単にスキーマを修正できるからです。
このチュートリアルの「アプリケーションバックグラウンド」セクションでご説明した通り、今回のアプリケーションのニーズは、個々の本をタイトルと著者で取り出すことです。タイトルと著者の組み合わせは本の一意の識別子であるため、この属性をテーブルのプライマリキーとして使用できます。アプリケーションではさらに、歴史や伝記といった本のカテゴリーに関する情報だけでなく、在庫システムで項目番号にマッピングされた販売している本のフォーマット (ハードカバー、ペーパーバック、オーディオブックなど) も保存する必要があります。
これらのニーズを念頭に置きながら、テーブルに次のスキーマを使用できます。
- タイトル (文字列): 本のタイトル
- 著者 (文字列): 本の著者
- カテゴリ (文字列): 歴史、伝記、SFなどの本のカテゴリー
- フォーマット (マップ): 販売中のさまざまなフォーマット (ハードカバー、ペーパーバック、オーディオブックなど) と在庫システムでの項目番号
次のステップでは、テーブルの複合プライマリキー (著者とタイトル) を指定してテーブルを作成します。次に、いくつかの項目をテーブルにロードして、テーブルの各項目を読み込みます。