Amazon DynamoDB
開発者ガイド (API バージョン 2012-08-10)

概念

DAX は、Amazon Virtual Private Cloud 環境 (Amazon VPC) 内で実行するように設計されています。Amazon VPC サービスは、従来のデータセンターに非常によく似た仮想ネットワークを定義します。Amazon VPC を使用すると、IP アドレス範囲、サブネット、ルーティングテーブル、ネットワークゲートウェイ、セキュリティ設定を適切に制御できます。仮想ネットワーク内で DAX クラスターを起動し、Amazon VPC のセキュリティグループを使用して、クラスターへのアクセスを制御できます。

注記

2013 年 12 月 4 日以降に AWS アカウントを作成した場合は、各 AWS リージョンにデフォルトで VPC が用意されています。デフォルト VPC は今すぐ使用できます。ほかの設定手順は必要なく、すぐにデフォルト VPC の使用を開始できます。

詳細については、Amazon VPC ユーザーガイドの「デフォルトの VPC とサブネット」を参照してください。

次の図は、DAX の高レベルの概要を示しています。

DAX クラスターを作成するには、AWS マネジメントコンソール を使用します。他を指定しない限り、DAX クラスターはデフォルト VPC 内で実行されます。

アプリケーションを実行するには、Amazon EC2 インスタンスを Amazon VPC 内に起動し、その後 EC2 インスタンスでアプリケーションを (DAX クライアントとともに) デプロイします。実行時に、DAX クライアントはアプリケーションのすべての DynamoDB API リクエストを DAX クラスターに送信します。DAX がこれらの API リクエストの 1 つを直接処理できる場合は処理し、そうでない場合はリクエストを DynamoDB に渡します。最終的に、DAX クラスターはアプリケーションに結果を返します。

DAX でのリクエスト処理方法

DAX クラスターは 1 つ以上のノードで構成されています。各ノードはそれぞれ、自身の DAX キャッシングソフトウェアのインスタンスを実行します。ノードのうち 1 つがクラスターのプライマリノードとして機能します。他のノード (存在する場合) はリードレプリカとして動作します。詳細については、「ノード」を参照してください。

アプリケーションは、DAX クラスターのエンドポイントを指定することで DAX にアクセスできます。DAX クライアントのソフトウェアはクラスターのエンドポイントと連携して機能し、インテリジェント負荷分散やルーティングを実行します。こうすることで、受信リクエストがクラスター内のすべてのノードに均等に分散されます。

読み取り操作

DAX は次の API コールに対応できます。

  • GetItem

  • BatchGetItem

  • Query

  • Scan

リクエストが結果的に整合性のある読み込み (デフォルトの動作) を指定する場合は、その項目を DAX から読み込もうとします。

  • DAX に項目がある場合 (キャッシュヒット)、DAX は DynamoDB にアクセスせずにアプリケーションに項目を返します。

  • DAX に項目がない場合 (キャッシュミス)、DAX はリクエストを DynamoDB に渡します。DynamoDB から返答を受信すると、DAX はアプリケーションに結果を返します。また、プライマリノードのキャッシュに結果を書き込みます。

注記

クラスターにリードレプリカがある場合、DAX は自動的にレプリカをプライマリノードと同期した状態に保ちます。詳細については、「クラスター」を参照してください。

リクエストが強い整合性のある読み込みを指定する場合、DAX はリクエストを DynamoDB に渡します。DynamoDB からの結果は DAX にキャッシュされず、単純にアプリケーションに返されます。

書き込み操作

次の DAX API オペレーションは「書き込みスルー」と見なされます。

  • BatchWriteItem

  • UpdateItem

  • DeleteItem

  • PutItem

これらのオペレーションでは、データはまず DynamoDB テーブルに書き込まれ、その後 DAX クラスターに書き込まれます。オペレーションは、データがテーブルと DAX の両方に正常に書き込まれたときのみ成功します。

その他のオペレーション

DAX では、テーブルを管理する DynamoDB のオペレーション (CreateTableUpdateTable など) を認識しません。アプリケーションがこのようなオペレーションを行う必要がある場合は、DAX を使用するのではなく、直接 DynamoDB にアクセスする必要があります。

項目キャッシュ

DAX は、GetItem および BatchGetItem オペレーションの結果を保存する項目キャッシュを保持します。キャッシュ内の項目は DynamoDB からの結果整合性データを表し、プライマリキー値別に保存されています。

アプリケーションが GetItem または BatchGetItem リクエストを送信すると、DAX は指定されたキー値を使用して項目キャッシュから直接項目の読み込みを試みます。項目が見つかった場合 (キャッシュヒット)、DAX はすぐにアプリケーションに項目を返します。項目が見つからなかった場合 (キャッシュミス)、DAX はリクエストを DynamoDB に送信します。DynamoDB は結果的に整合性のある読み込みを使用してリクエストを処理し、項目を DAX に返します。DAX はその項目を項目キャッシュに保存してから、アプリケーションに返します。

項目キャッシュには有効期限設定 (TTL) があります。デフォルトでは 5 分です。DAX は項目キャッシュに書き込むすべての項目にタイムスタンプを割り当てます。TTL 設定より長期間キャッシュに残り続けている項目は、期限切れになります。期限切れの項目について GetItem リクエストを発行すると、キャッシュミスとみなされ、DAX は GetItem リクエストを DynamoDB に送信します。

注記

項目キャッシュの TTL 設定は、新しい DAX クラスターを作成する際に指定できます。詳細については、「DAX クラスターの管理」を参照してください。

DAX は項目キャッシュの least recently used list (LRU) も保持します。LRU リストは、項目が最初にキャッシュに書き込まれた時とその項目が最後にキャッシュから読み込まれた時を記録して保存します。項目キャッシュがいっぱいになると、DAX は古い項目を(期限切れでない場合であっても)削除し、新しい項目のためのスペースを空けます。LRU アルゴリズムは項目キャッシュでは常に有効であり、ユーザーが設定することはできません。

クエリキャッシュ

DAX はまた、Query および Scan オペレーションの結果を保存するクエリキャッシュを保持します。このキャッシュの項目は、DynamoDB テーブルに対するクエリおよびスキャンの結果セットを表します。これらの結果セットはパラメータ値別に保存されています。

アプリケーションが Query または Scan リクエストを送信すると、DAX は指定されたパラメータ値を使用してクエリキャッシュから一致する結果セットの読み込みを試みます。結果セットが見つかった場合 (キャッシュヒット)、DAX はすぐにアプリケーションに結果セットを返します。結果セットが見つからなかった場合 (キャッシュミス)、DAX はリクエストを DynamoDB に送信します。DynamoDB は結果的に整合性のある読み込みを使用してリクエストを処理し、結果セットを DAX に返します。 DAX はそれを項目キャッシュに保存してから、アプリケーションに返します。

注記

クエリキャッシュの TTL 設定は、新しい DAX クラスターを作成する際に指定できます。詳細については、「DAX クラスターの管理」を参照してください。

DAX はクエリキャッシュの least recently used list (LRU) も保持します。LRU リストは、結果セットが最初にキャッシュに書き込まれた時とその結果が最後にキャッシュから読み込まれた時を記録して保存します。クエリキャッシュがいっぱいになると、DAX は古い結果セットを(期限切れでなくても)削除して新しい結果セットのためのスペースを空けます。LRU アルゴリズムはクエリキャッシュでは常に有効であり、ユーザーが設定することはできません。