Amazon DynamoDB のコアコンポーネント - Amazon DynamoDB

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Amazon DynamoDB のコアコンポーネント

DynamoDB では、テーブル、項目、および属性が、操作するコアコンポーネントです。テーブル項目のコレクションであり、各項目は 属性のコレクションです。DynamoDB はプライマリキーを使用してテーブルの各項目を一意に識別し、セカンダリインデックスを使用してクエリの柔軟性を高めます。DynamoDB ストリーム を使用して、DynamoDB テーブルのデータ変更イベントをキャプチャできます。

DynamoDB には制限があります。詳細については、「Amazon DynamoDB のサービス、アカウント、およびテーブルのクォータ」を参照してください。

テーブル、項目、属性

基本的な DynamoDB コンポーネントは以下のとおりです。

  • テーブル – 他のデータベースシステムと同様、DynamoDB はデータをテーブルに保存します。テーブルは、データのコレクションです。たとえば、テーブルの例 (People) を参照してください。このテーブルは、友人、家族、関心のある人に関する個人の連絡先情報を保存するのに使用できます。また、その人たちが運転する車に関する情報を保存する Cars テーブルを作成することもできます。

  • 項目 – 各テーブルにはゼロ以上の項目が含まれています。項目は、他のすべての項目間で一意に識別可能な属性のグループです。People テーブルの各項目は、人を表します。Cars テーブルの各項目は 1 台の車を表します。DynamoDB の項目は、多くの点で他のリレーショナルデータベースシステムの行、レコード、またはタプルに似ています。DynamoDB では、テーブルに保存できる項目数に制限はありません。

  • 属性 – 各項目は 1 つ以上の属性で構成されます。属性は、基盤となるデータ要素であり、それ以上分割する必要がないものです。たとえば、People テーブルの項目には、PersonID、、LastNameなどと呼ばれる属性が含まれています。FirstNameDepartment テーブルには、DepartmentID、NameManager などの属性を設定することができます。DynamoDB 内の属性は、多くの点で他のデータベースシステムのフィールドや列に似ています。

次の図は、いくつかの項目と属性の例を含む、People という名前のテーブルを示しています。

People テーブルについて、以下の点に注意してください。

  • テーブルの各項目には一意の識別子があります。これは、テーブルの他のすべての項目からその項目を区別するプライマリキーです。People テーブルでは、プライマリキーは 1 つの属性 (PersonID) で構成されます。

  • プライマリキー以外、People テーブルはスキーマレスです。つまり、属性またはデータ型を事前に定義する必要はありません。各項目は、独自の固有の属性を持つことができます。

  • 属性のほとんどはスカラーです。つまり、1 つの値のみを持つことができます。文字列と数値はスカラーの一般的な例です。

  • 項目の一部には、入れ子の属性 (Address) があります。DynamoDB は、深さが最大 32 レベルの入れ子の属性をサポートしています。

以下は、音楽コレクションを追跡するために使用できる、Music という名前の別のサンプルテーブルです。

Music テーブルについて、以下の点に注意してください。

  • Music のプライマリキーは 2 つの属性 (Artist および SongTitle) で構成されます。テーブルの各項目にはこれら 2 つの属性が必要です。ArtistSongTitle の組み合わせにより、テーブルの各項目が他のすべての項目から区別されます。

  • プライマリキー以外、Music テーブルはスキーマレスです。つまり、属性またはデータ型を事前に定義する必要はありません。各項目は、独自の固有の属性を持つことができます。

  • 項目の 1 つに、入れ子の属性 (PromotionInfo) があります。入れ子の他の属性が含まれています。 は、深さが最大 DynamoDB レベルの入れ子の属性をサポートしています。32

詳細については、「DynamoDB でのテーブルとデータの操作」を参照してください。

プライマリキー

テーブルを作成する場合には、テーブル名に加えて、テーブルのプライマリキーを指定する必要があります。プライマリキーはテーブルの各項目を一意に識別するため、テーブル内の 2 つの項目が同じキーを持つことはありません。

DynamoDB は 2 種類の異なるプライマリキーをサポートします。

  • パーティションキーパーティションキーという 1 つの属性で構成されたシンプルなプライマリキー。

    DynamoDB は、パーティションキーの値を内部ハッシュ関数への入力として使用します。ハッシュ関数からの出力により、項目が保存されるパーティション (DynamoDB 内部の物理ストレージ) が決まります。

    パーティションキーのみを含むテーブルでは、2 つの項目が同じパーティションキー値を持つことはできません。

    」で説明されている Peopleテーブル、項目、属性 テーブルは、シンプルなプライマリキー (PersonID) があるテーブルの例です。People テーブルの任意の項目に直接アクセスするには、その項目の PersonId 値を指定します。

  • パーティションとソートキー複合プライマリキーと呼ばれるこのキーのタイプは、2 つの属性で構成されます。最初の属性はパーティションキーであり、2 番目の属性はソートキーです。

    DynamoDB は、パーティションキーの値を内部ハッシュ関数への入力として使用します。ハッシュ関数からの出力により、項目が保存されるパーティション (DynamoDB 内部の物理ストレージ) が決まります。同じパーティションキー値を持つすべての項目は、ソートキー値でソートされてまとめて保存されます。

    パーティションキーとソートキーが存在するテーブルでは、同じパーティションキー値が 2 つの項目に割り当てられることがあります。ただし、ソートキー値は 2 つの項目で異なる必要があります。

    」で説明されている Musicテーブル、項目、属性 テーブルは、複合プライマリキー (Artist および SongTitle) があるテーブルの例です。その項目に Artist および の値を指定すると、SongTitleMusic テーブルの任意の項目に直接アクセスできます。

    複合プライマリキーは、データのクエリを実行するときに柔軟性を高めます。たとえば、Artist の値のみを指定した場合、DynamoDB はそのアーティストのすべての曲を取得します。特定のアーティストの曲のサブセットのみを取得するには、Artist の値と SongTitle の値範囲を指定します。

注記

項目のパーティションキーは、そのハッシュ属性とも呼ばれます。ハッシュ属性という用語は、DynamoDB が内部のハッシュ関数を使用し、パーティションキーの値に基づいてパーティション間でデータ項目を均等に分散することに由来しています。

項目のソートキーは、範囲属性とも呼ばれます。範囲属性という用語は、ソートキー値で並べ替えられた順に、DynamoDB が同じパーティションキーを持つ項目どうしを物理的に近くに保存する方法に由来しています。

各プライマリキー属性はスカラー値 (単一値のみを保持できる) である必要があります。プライマリキー属性に許可される唯一のデータ型は、文字列、数値、またはバイナリです。他のキー以外の属性では、このような制限はありません。

セカンダリインデックス

テーブルで 1 つ以上のセカンダリインデックスを作成できます。セカンダリインデックス では、プライマリキーに対するクエリに加えて、代替キーを使用して、テーブル内のデータのクエリを実行します。DynamoDB ではインデックスを使用する必要はありませんが、インデックスを使用すると、データのクエリを実行するときにアプリケーションの柔軟性が高まります。テーブルにグローバルセカンダリインデックスを作成すると、テーブルから行う場合とほぼ同じ方法でインデックスからデータを読み取ることができます。

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

  • Global secondary index – テーブルと異なるパーティションキーとソートキーを持つインデックス。

  • ローカルセカンダリインデックス – テーブルと同じパーティションキーと、異なるソートキーを持つインデックス。

DynamoDB の各テーブルは、20 グローバルセカンダリーインデックス (デフォルトのクォータ) と、テーブルあたり 5 ローカルセカンダリーインデックスのクォータがあります。

前に示した Music サンプルテーブルでは、Artist (パーティションキー) または Artist および SongTitle (パーティションキーとソートキー) によってデータ項目をクエリできます。Genre および AlbumTitle によってデータにクエリを実行する場合はどうなりますか? これを行うには、Genre および AlbumTitle でインデックスを作成し、Music テーブルに対してクエリを実行するのとほぼ同じ方法でインデックスをクエリできます。

次の図は、 という名前の新しいインデックスがある GenreAlbumTitleMusic サンプルテーブルを示しています。 このインデックスでは、Genre がパーティションキーで、AlbumTitle がソートキーです。

GenreAlbumTitle インデックスについて、以下の点に注意してください。

  • 各インデックスはテーブルに属します。これをインデックスの基本テーブルと呼びます。前述の例では、MusicGenreAlbumTitle インデックスの基本テーブルです。

  • DynamoDB はインデックスを自動的に維持します。基本テーブルの項目を追加、更新、または削除すると、DynamoDB はそのテーブルに属するすべてのインデックスの対応する項目を追加、更新、または削除します。

  • インデックスを作成するときは、基本テーブルからインデックスにコピーまたは射影される属性を指定します。少なくとも、DynamoDB は基本テーブルからインデックスにキー属性を射影します。これは GenreAlbumTitle のケースで、Music テーブルのキー属性のみがインデックスに射影されます。

GenreAlbumTitle インデックスをクエリして、特定のジャンルのすべてのアルバム (たとえば、すべての Rock アルバム) を検索できます。また、インデックスにクエリを実行して、特定のジャンル内のすべてのアルバムのうち、特定のアルバムタイトル (たとえば、タイトルが文字 H で始まるすべての Country アルバム) のみを検索することもできます。

詳細については、「セカンダリインデックスを使用したデータアクセス性の向上」を参照してください。

DynamoDB ストリーム

DynamoDB ストリーム は、DynamoDB テーブルのデータ変更イベントをキャプチャするオプションの機能です。これらのイベントに関するデータは、ほとんどリアルタイムに、イベントの発生順にストリームに表示されます。

各イベントはストリームレコードによって表されます。テーブルでストリームを有効にすると、DynamoDB ストリーム は次のいずれかのイベントが発生するたびに、ストリームレコードを書き込みます。

  • テーブルに新しい項目が追加されます。ストリームは、すべての属性を含む項目全体のイメージをキャプチャします。

  • 項目が更新されます。ストリームは、項目で変更された属性の「前」と「後」のイメージをキャプチャします。

  • テーブルから項目が削除されます。ストリームは、削除される前の項目全体のイメージをキャプチャします。

各ストリームレコードには、テーブルの名前、イベントのタイムスタンプ、およびその他のメタデータも含まれます。ストリームレコードには 24 時間の有効期間があり、その後はストリームから自動的に削除されます。

を DynamoDB ストリーム とともに使用して、ストリームに関心のあるイベントが発生するたびに自動的に実行されるAWS Lambdaトリガーコードを作成できます。—たとえば、会社の顧客情報を含む Customers テーブルがあるとします。新規の各顧客に、「ようこそ」 E メールを送信するとします。そのテーブルでストリームを有効にし、そのストリームを Lambda 関数に関連付けます。関数は、新しいストリームレコードが表示されるたびに実行されますが、LambdaCustomers テーブルに追加された新しい項目のみを処理します。EmailAddress 属性を持つ項目について、Lambda 関数は Amazon Simple Email Service (Amazon SES) を呼び出してそのアドレスに E メールを送信します。

注記

この例で、最後の顧客 Craig Roe には EmailAddress がないため E メールを受信することはありません。

トリガーに加えて、DynamoDB ストリーム は AWS リージョン内および AWS リージョン間のデータレプリケーション、DynamoDB テーブル内のデータのマテリアライズドビュー、Kinesis のマテリアライズドビューを使用したデータ分析など、数多くの強力なソリューションを可能にします。

詳細については、「ストリームの変更データキャプチャDynamoDB」を参照してください。