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

インメモリアクセラレーションと DynamoDB Accelerator (DAX)

Amazon DynamoDB はスケールとパフォーマンスのために設計されています。ほとんどの場合、DynamoDB 応答時間は1桁台のミリ秒単位で測定できます。ただし、マイクロ秒の応答時間を必要とする、一部のユースケースがあります。これらのユースケースでは DynamoDB Accelerator (DAX) が整合性データへのアクセス時に素早い対応を実現しています。

DAX は、DynamoDB と互換性のあるキャッシュサービスで、条件の厳しいアプリケーションで高速なインメモリパフォーマンスを可能にします。DAX は主に 3 つの状況を取り上げています。

  1. インメモリキャッシュとして DAX は 1 桁台のミリ秒単位からマイクロ秒単位まで結果整合性のある読み込みワークロードの応答時間を短縮します。

  2. DAX は、DynamoDB と API と互換性のあるマネージドサービスを提供することにより、オペレーションとアプリケーションの複雑さを軽減します。したがって、既存のアプリケーションで使用するには、最小限の機能変更のみが必要です。

  3. 読み取りの多いワークロードや急激に増大するワークロードにおいて、DAX はスループットを強化したり、読み込みキャパシティーユニットを必要以上にプロビジョニングしないようにすることで運用コストの節約を可能にします。個々のキーで繰り返し読み取りが必要なアプリケーションにおいては特にメリットがあります。

DAX はサーバー側暗号化をサポートします。保管時の暗号化を使用して、DAX によってディスクに保持されるデータが暗号化されます。DAX は、プライマリノードからリードレプリカへの変更の伝播の一部として、データをディスクに書き込みます。詳細については、「保管時の DAX 暗号化」を参照してください。

DAX のユースケース

DAX は、マイクロ秒のレイテンシーで DynamoDB テーブルからの結果整合性データへのアクセスを提供します。マルチ AZ DAX クラスターは、1 秒間に数百万件のリクエストを処理できます。

DAX は、次のタイプのアプリケーションに最適です。

  • 可能な限り迅速な読み込み応答時間を必要とするアプリケーション。たとえば、リアルタイム入札、ソーシャルゲーム、トレーディングアプリケーションなどです。 DAX はこれらのユースケースに対して、高速なインメモリ読み込みパフォーマンスを提供します。

  • 少数の項目を他のものよりも頻繁に読み込むアプリケーション。たとえば、人気商品の 1 日限りのセールを行う e コマースシステムを考えてみます。セール中は、その商品 (および DynamoDB 内のそのデータ) に対する需要が他の商品全般に比べて急増します。「ホット」キーおよび不均一なトラフィックディストリビューションの影響を緩和するために、1 日限りのセールが終了するまで、読み込みアクティビティを DAX キャッシュにオフロードできます。

  • 読み込み負荷が高いが、コストも重要なアプリケーション。DynamoDB を使用する場合、アプリケーションが要求する読み込み数を 1 秒ごとにプロビジョニングします。読み込みアクティビティが上昇すれば、テーブルにプロビジョニングされた読み込みスループットも増加し (追加コストがかかり) ます。または、アプリケーションからのアクティビティを DAX クラスターにオフロードして、そうしない場合に購入する必要がある読み込みキャパシティーユニットの数を削減できます。

  • 大規模データセットに対して繰り返し読み込みが必要なアプリケーション。このようなアプリケーションは、データベースリソースを他のアプリケーションから引き離してしまう可能性があります。たとえば、リージョンの天気データの長期分析では、DynamoDB テーブルのすべての読み込みキャパシティーが一時的に消費される可能性があります。この状況は、同じデータにアクセスする必要がある他のアプリケーションに悪影響を及ぼします。DAX を使用することで、代わりにキャッシュデータに対して気象分析を実行できます。

DAX は、次のタイプのアプリケーションには最適ではありません

  • 結果的に整合性のある読み込みを必要とする (または結果的に整合性のある読み込みを許容できない) アプリケーション。

  • 読み込みでマイクロ秒の応答時間を要求しない、または基礎となるテーブルから繰り返される読み込みアクティビティをオフロードする必要がないアプリケーション。

  • 書き込み付加が高い、またはそれほど多くの読み込みアクティビティを実行しないアプリケーション。

  • DynamoDB ですでに別のキャッシングソリューションを使用しており、そのキャッシングソリューションと連携するために独自のクライアント側ロジックを使用しているアプリケーション。

DAX 使用に関する注意事項

  • DAX を使用できる AWS リージョンのリストについては、「Amazon DynamoDB 料金表」を参照してください。

  • DAX は、Go、Java、Node.js、Python、および .NET で記述されたアプリケーションをサポートします (これらのプログラミング言語用に AWS が提供するクライアントを使用します)。

  • DAX は Transport Layer Security (TLS) をサポートしていません。

  • DAX は EC2-VPC プラットフォームでのみ使用できます。(EC2-Classic プラットフォームのサポートはありません。)

  • DAX クラスターは、格納する項目の属性名に関するメタデータを保持します。そのメタデータは無期限に保持されます (項目の有効期限が切れた後、またはキャッシュから削除された後でも)。大量の属性名を使用するアプリケーションは、時間の経過につれて DAX クラスターのメモリ消耗を引き起こすことがあります。この制限は最上位の属性名のみに適用され、ネスト属性名には適用されません。問題が発生しやすい最上位の属性名の例としては、タイムスタンプ、UUID や ID があります。

    この制限は属性名のみに適用され、その値には適用されません。以下のような項目に問題はありません。

    { "Id": 123, "Title": "Bicycle 123", "CreationDate": "2017-10-24T01:02:03+00:00" }

    ただし、以下のような項目は、十分な数があり、それぞれ別のタイムスタンプがある場合は、問題になります。

    { "Id": 123, "Title": "Bicycle 123", "2017-10-24T01:02:03+00:00": "created" }