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

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

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

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

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

テーブル、項目、属性

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

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

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

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

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

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

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

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

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

  • 項目の一部には、入れ子の属性 (住所). DynamoDB では、最大 32 レベルの入れ子の属性をサポートしています。

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

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

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

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

  • アイテムの 1 つにネストされた属性 (PromotionInfo)、他のネストされた属性が含まれています。DynamoDB では、最大 32 レベルの入れ子の属性をサポートしています。

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

プライマリキー

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

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

  • パーティションキー— 1 つの属性で構成される、シンプルプライマリキー。パーティションキー

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

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

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

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

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

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

    -音楽テーブルで説明されているテーブル、項目、属性は、複合プライマリキー (芸術家およびSongTitle). 任意のアイテムにアクセスするには、音楽テーブルを直接指定する場合は、芸術家およびSongTitleの値を指定します。

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

注記

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

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

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

セカンダリインデックス

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

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

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

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

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

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

次の図は、例を示しています音楽という新しいインデックスでGenreAlbumTitle。このインデックスでは、Genre がパーティションキーで、AlbumTitle がソートキーです。

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

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

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

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

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

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

DynamoDB Streams

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

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

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

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

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

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

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

注記

この例では、最後の顧客 Craig Roe にはEmailAddress

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

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