Amazon MemoryDB のよくある質問

全般

Amazon MemoryDB は、Valkey OSS および Redis OSS と互換性があり、耐久性のあるインメモリデータベースサービスで、超高速なパフォーマンスを実現します。MemoryDB を使用すると、マイクロ秒単位の読み込みレイテンシー、1 桁ミリ秒の書き込みレイテンシー、高スループット、マルチ AZ の耐久性を実現でき、マイクロサービスアーキテクチャで構築されたモダンアプリケーションに最適です。これらのアプリケーションには低レイテンシーと高いスケーラビリティが必須であり、Valkey と Redis OSS の柔軟なデータ構造と API を使えばアジャイルで簡単な開発が可能になります。MemoryDB は、データセット全体をメモリに保存するだけでなく、分散トランザクションログを活用して、インメモリの速度とデータの耐久性、整合性、回復性をどちらも実現します。MemoryDB はフルマネージドのプライマリデータベースとして使用できるため、キャッシュ、耐久性のあるデータベース、または必要な基盤インフラストラクチャを個別に管理しなくても、パフォーマンスの高いアプリケーションを構築できます。 MemoryDB マルチリージョンを使用すると、最大 99.999% の可用性とマイクロ秒の読み取りおよび 1 桁ミリ秒の書き込みレイテンシーで、複数のリージョンでアプリケーションを簡単かつ迅速に構築できます。

使用を開始するには、AWS マネジメントコンソール、コマンドラインインターフェイス (CLI)、または Software Development Kit (SDK) を使って新しい MemoryDB クラスターを作成します。コンソールで MemoryDB クラスターを作成するには、サインインして Amazon MemoryDB に移動します。そこから、[使用を開始する] を選択し、次に [新しいクラスターを作成する] を選択します。 詳細な手順と CLI の使用を開始する方法については、MemoryDB のドキュメントを参照してください。

はい、MemoryDB は Valkey と Redis OSS との互換性を維持し、馴染みのある同じデータ型、パラメータ、コマンドのセットをサポートしています。つまり、現在 Valkey と Redis OSS で既に使用しているアプリケーションコード、クライアント、ツールを MemoryDB で使用できるということです。MemoryDB は、String、List、Set、Hash、Sorted Set、HyperLogLog、Bitmap、Stream など、Valkey と Redis OSS のデータ型をすべてサポートします。それだけでなく、MemoryDB は 200 以上の Valkey と Redis OSS コマンドもサポートしています。ただし、MemoryDB がクラスターをユーザーに代わって管理するため、Valkey と Redis OSS 管理コマンドはサポートされていません。

MemoryDB でサポートされている Redis OSS のバージョンについては、MemoryDB のドキュメントを参照してください。

MemoryDB クラスターは、1 つのデータセットを処理するノードを 1 つ以上集めたものです。MemoryDB データセットはシャードに分割され、各シャードにはプライマリノードと最大 5 つのオプションのレプリカノードがあります。プライマリノードは読み込みリクエストと書き込みリクエストを処理し、レプリカは読み込みリクエストのみを処理します。プライマリノードはレプリカノードにフェイルオーバーして、レプリカをそのシャードの新しいプライマリノードに昇格させることができます。詳細については、MemoryDB のドキュメントをご覧ください。

MemoryDB は耐久性に優れたインメモリデータベースで、Valkey または Redis OSS と互換性のある超高速プライマリデータベースを必要とするワークロード向けです。超高速パフォーマンス (マイクロ秒の読み込みレイテンシーと 1 桁ミリ秒の書き込みレイテンシー) を提供する耐久性の高いデータベースが必要なワークロードには、MemoryDB の使用を検討することをお勧めします。また、Valkey または Redis OSS データ構造と API を使用して、耐久性の高いプライマリデータベースを持つアプリケーションを構築するユースケースにも、MemoryDB が適している場合があります。最後に、耐久性とパフォーマンスのためにデータベースの使用をキャッシュに置き換えることで、アプリケーションアーキテクチャを簡素化し、コストを削減したい場合にも MemoryDB の使用を検討することをお勧めします。

ElastiCache は、Valkey、Memcached、または Redis OSS を使用して他のデータベースやデータストアからデータをキャッシュするためによく使用されるサービスです。既存のプライマリデータベースまたはデータストアを使ってデータアクセスを高速化したい (マイクロ秒単位の読み込み/書き込みパフォーマンス) 場合のワークロードのキャッシュには、ElastiCache の検討をお勧めします。また、Valkey または Redis OSS のデータ構造と API を使用してプライマリデータベースまたはデータストアに保存されているデータにアクセスしたい場合も、ElastiCache を検討することをお勧めします。

サービスレベル契約 (SLA) を参照してください。

現在の制限とクォータについては、MemoryDB のドキュメントを参照してください。

MemoryDB マルチリージョン

Amazon MemoryDB マルチリージョンは、最大99.999% の可用性とマイクロ秒の読み取りおよび 1 桁ミリ秒の書き込みレイテンシーを備えたアプリケーションを構築できる、フルマネージド型のアクティブ-アクティブマルチリージョンデータベースです。複数の AWS リージョンにわたるデータの冗長性を提供するため、アプリケーションの処理が 1 つのリージョンで中断され、その MemoryDB エンドポイントに接続できない場合でも、マルチリージョンアプリケーションの可用性と耐障害性を向上させることができます。MemoryDB マルチリージョンは、アクティブ-アクティブレプリケーションを提供するため、マイクロ秒の読み取りレイテンシーと 1 桁ミリ秒の書き込みレイテンシーで、顧客に最も近いリージョンからの読み取りと書き込みをローカルで処理できます。リージョン間でデータを非同期で複製し、通常 1 秒以内にデータを伝播します。MemoryDB マルチリージョンが更新の競合を自動的に解決し、データの相違の問題を修正するため、ユーザーはアプリケーションに集中できます。

最高レベルの可用性、耐障害性の向上、および事業継続性の向上を必要とするアプリケーションの構築を検討している場合は、MemoryDB マルチリージョンを使用すべきです。MemoryDB マルチリージョンは、世界中のどこでも速い応答時間を必要とするマルチリージョンアプリケーションを構築して実行する場合にも使用できます。

MemoryDB マルチリージョンを使用する場合、MemoryDB はマルチリージョンクラスターと呼ばれる構成のリージョンクラスター間でデータをレプリケートします。マルチリージョンクラスター内の任意のリージョンクラスターにデータが書き込まれると、MemoryDB はアプリケーションのパフォーマンスに影響を与えずに、通常は 1 秒以内にそのデータを他のすべてのリージョンクラスターに自動的かつ非同期的にレプリケートします。MemoryDB マルチリージョンは、更新の競合を自動的に解決し、データの相違の問題を修正します。競合の解決はフルマネージドで、アプリケーションの可用性に影響を及ぼすことなくバックグラウンドで行われます。

MemoryDB Multi-Regionを使い始めるには、AWS コンソール、AWS SDK、または CLI を使用して、目的の AWS リージョンのいずれかに新しいマルチリージョンクラスターとリージョンクラスターを作成します。最初のリージョンクラスターを作成すると、マルチリージョンクラスターに最大 4 つのリージョンを追加できます。データが任意のリージョンクラスターに書き込まれると、MemoryDB Multi-Region は、通常 1 秒以内に、そのデータをマルチリージョンクラスター内の他のすべてのリージョナルクラスターに自動的に複製します。現在 MemoryDB を使用している場合は、クラスターのスナップショットを取り、それを使用して新しいマルチリージョンクラスターとリージョンクラスターをシードできます。  

それぞれの AWS リージョンにリージョンクラスターを作成することで、新しいリージョンクラスターを MemoryDB マルチリージョンクラスターに追加できます。ただし、既存の MemoryDB クラスターを既存の MemoryDB マルチリージョンクラスターに追加することはできません。新しいリージョンクラスターを作成するか、MemoryDB Multi-Region クラスターから既存のリージョンクラスターを削除することしかできません。リージョンクラスターを削除すると、MemoryDB Multi-Region は、MemoryDB Multi-Region クラスターを維持しながら、その特定のリージョンのクラスターを削除します。お客様は、後で同じ MemoryDB Multi-Region クラスター内にさらにリージョンクラスターを追加することを選択できます。

MemoryDB マルチリージョンは、非同期レプリケーションを実行してメモリ内の速度を維持するため、最終的な整合性が保たれます。MemoryDB マルチリージョンクラスターの 1 つのキーに対する更新は、MemoryDB マルチリージョンクラスター内の他のリージョナルクラスターに非同期で (通常は 1 秒以内) 伝播されます。

MemoryDB マルチリージョンは、競合のない複製データ型 (CRDT) を使用して、競合する同時書き込みを調整します。CRDT は、調整なしで独立して同時に更新できるデータ構造です。書き込みと書き込み側の競合は各レプリカで個別にマージされ、最終的には整合性が保たれます。

あるリージョンが孤立したり機能が低下したりした場合、MemoryDB マルチリージョンは、実行されたがすべてのリージョンクラスターにまだ伝播されていない書き込みをすべて記録します。リージョンがオンラインに戻ると、MemoryDB マルチリージョンは、保留中の書き込みをそのリージョンから他のリージョンのリージョンクラスターに伝播し直します。また、他のリージョンクラスターからオンラインに戻ったリージョンへの書き込みの伝播も再開されます。MemoryDB マルチリージョンは、リージョンがどれだけ長距離に分離されていても、以前に成功したすべての書き込みを最終的に伝播します。異なるリージョンの同じキーをアプリケーションがほぼ同時に更新すると、競合が発生する可能性があります。MemoryDB マルチリージョンは、同時更新間の競合のない複製データ型 (CRDT) 調整を使用します。競合の解決はフルマネージドで、アプリケーションの可用性に影響を及ぼすことなくバックグラウンドで行われます。

パフォーマンスと耐久性

MemoryDB のスループットとレイテンシーは、ノードタイプ、ペイロードのサイズ、クライアント接続の数によって異なります。MemoryDB は、クラスターシャードのプライマリノード上でマイクロ秒の読み込みレイテンシー、1 桁ミリ秒の書き込みレイテンシーと書き込み後の読み込みレイテンシーを実現します。MemoryDB は、1 秒あたり最大 39 万回の読み込みリクエストと 10 万回の書き込みリクエスト、ノードあたり最大 1.3 GB/秒の読み込みスループットと 100 MB/秒の書き込みスループットをサポートします (読み込み専用ワークロードと書き込み専用ワークロードの内部テストに基づく)。MemoryDB クラスターは 1 つ以上のノード間でデータをシャードするため、クラスターにシャードやレプリカを追加して総スループットを向上させることができます。

MemoryDB は、データセット全体をメモリに保存し、分散マルチ AZ トランザクションログを使用してデータの耐久性、整合性、回復性を提供します。複数のアベイラビリティーゾーンにまたがってデータを保存するため、MemoryDB ならデータベースのリカバリと再起動が高速化されます。また、データをメモリに保存することで、MemoryDB は超高速のパフォーマンスと高いスループットを実現します。

MemoryDB は、分散されたトランザクションログを利用してデータ保存の耐久性を高めます。複数のアベイラビリティーゾーンにまたがってデータを保存するため、MemoryDB ならデータベースのリカバリと再起動が高速化されます。また、MemoryDB は、レプリカノードの結果整合性に加え、プライマリノードの整合性のある読み込みも提供します。

Valkey と Redis OSS にはオプションの追加専用ファイル (AOF) 機能が備わっています。この機能は、データをプライマリノードのディスク上のファイルに保持して耐久性を高めます。ただし、AOF は 1 つのアベイラビリティーゾーンのプライマリノード上にデータをローカル保存するため、データが失われるリスクがあります。また、ノードに障害が発生した場合、レプリカとの整合性の問題が発生するリスクもあります。

はい、MemoryDB は高可用性をサポートしています。マルチ AZ 可用性の MemoryDB クラスターを作成し、異なる AZ に最大 5 つのレプリカを作ることができます。プライマリノードで障害が発生すると、MemoryDB は自動的にフェイルオーバーしてレプリカの 1 つを新しいプライマリとして昇格させ、書き込みトラフィックをそのレプリカに転送します。さらに、プライマリノードに障害が発生した場合でも、MemoryDB は分散トランザクションログを利用して、レプリカ上のデータを最新の状態に保ちます。フェイルオーバーは通常、計画外の停止では 20 秒未満、計画的な停止では 200 ミリ秒未満です。

MemoryDB は、分散型トランザクションログを使用して、データベースのリカバリ、再起動、フェイルオーバー、プライマリとレプリカ間の最終結果整合中にデータベースに書き込まれたデータを永続的に保存します。

Valkey と Redis OSS は、各シャードのプライマリノードでの書き込みと強力な整合性のある読み込みに加え、リードレプリカからの結果整合性のある読み込みを提供します。プライマリノードに障害が発生した場合、フェイルオーバー中に書き込みが失われ、整合性モデルに違反する可能性があるため、これらの整合性プロパティは保証されません。

MemoryDB の整合性モデルは Valkey と Redis OSS に似ています。ただし、MemoryDB では、フェイルオーバーしてもデータが失われることはないため、クライアントはノードの障害に関係なくプライマリからの書き込みを読み込むことができます。マルチ AZ トランザクションログに正常に保存されたデータのみが表示されます。レプリカノードは結果整合性が保たれ、Amazon CloudWatch にラグメトリクスが公開されます。

Redis OSS 用 MemoryDB バージョン 7.0 では、拡張 I/O 多重化機能が導入され、スループットとレイテンシーが著しく向上しました。Valkey 用 MemoryDB バージョン 7.2 は、拡張 IO 多重化機能もサポートしています。拡張 IO 多重化機能は、複数のクライアント接続を持つスループット制限のあるワークロードに最適で、そのメリットはワークロードの同時実行レベルに応じてスケールします。例えば、r6g.4xlarge ノードを使用して 5200 のクライアントを同時に実行した場合、Redis OSS 用 MemoryDB バージョン 6 と比較して、スループット (1 秒あたりの読み取りおよび書き込みオペレーション) が最大 46% 向上し、P99 レイテンシーが最大 21% 減少します。これらのタイプのワークロードでは、ノードのネットワーク I/O 処理がスケール能力の制限要因になることがあります。拡張 I/O 多重化機能では、各ネットワーク I/O の専用スレッドで複数のクライアントからのコマンドを MemoryDB エンジンにパイプライン処理し、コマンドを効率的にバッチ処理するエンジンの機能を活用します。

詳細については、ドキュメントを参照してください。

データインジェストとクエリ

MemoryDB クラスターにデータを書き込んだり読み込んだりするには、サポートされている Valkey または Redis OSS クライアントのいずれかを使用してクラスターに接続します。サポートされている Valkey または Redis OSS クライアントのリストについては、Valkey または Redis OSS のドキュメントを参照してください。Valkey または Redis OSS クライアントを使用して MemoryDB クラスターに接続する方法については、MemoryDB のドキュメントを参照してください。 Valkey は既存の Redis OSS クライアントと連携します。そのため、Redis OSS から Valkey に移行する際に、クライアントを変更する必要はありません。

ハードウェア、スケーリング、メンテナンス

最大 500 個のノードを含む MemoryDB クラスターを作成できます。250 個のプライマリノードそれぞれに高可用性のためのレプリカが 1 つずつある (計 500 個) と仮定すると、最大メモリストレージ容量は 100 TB になります。

はい、MemoryDB クラスターのサイズは水平方向と垂直方向に変更することが可能です。ノードを追加または削除することで、クラスターを水平方向にスケールすることができます。シャードを追加してデータセットをより多くのシャードに分散させたり、各シャードにレプリカノードを追加して、可用性と読み込みスループットを向上させたりすることができます。シャードとレプリカを削除して、クラスターをスケールインすることもできます。さらに、ノードタイプを変更すればクラスターを垂直にスケールすることができ、これによってノードあたりのメモリと CPU リソースが変わります。水平および垂直のサイズ変更操作中であっても、クラスターはオンライン状態を維持し、読み込みおよび書き込みリクエストを処理します。

MemoryDB ならクラスターのメンテナンスと更新が容易で、クラスターのメンテナンスには 2 つの異なるプロセスがあります。まず、更新が必須の場合、指定したメンテナンス期間中に MemoryDB がクラスターに自動でパッチを適用します。次に、一部の更新の場合、MemoryDB はサービス更新を利用します。この更新は、いつでも適用でき、後日のメンテナンス期間にスケジュール設定することもできます。一部のサービス更新は、特定の日付が過ぎるとメンテナンス期間に自動でスケジュール設定されます。クラスターの更新は、クラスターのセキュリティ、信頼性、運用パフォーマンスを強化するのに役立ちます。また、更新中のクラスターはオンライン状態を維持し、読み込みと書き込みリクエストを処理します。クラスターのメンテナンスの詳細については、MemoryDB のドキュメントを参照してください。

バックアップと復元

はい。MemoryDB クラスターのデータとメタデータをバックアップするには、スナップショットを作成します。スナップショットは手動で作成することも、MemoryDB の自動スナップショットスケジューラを使って毎日指定時刻に新しいスナップショットを撮ることもできます。スナップショットと MemoryDB を保持する期間は、スナップショットを作成してから最大 35 日間まで選択できます。スナップショットは 99.999999999% (9 x 11) の耐久性を持つよう設計された Amazon S3 に保存されます。また、クラスターを削除するときに、クラスターの最終スナップショットを作成することも選択できます。さらに、MemoryDB スナップショットをサービスから Amazon S3 バケットにエクスポートできます。スナップショットの詳細については、MemoryDB のドキュメントをご覧ください。

はい、新しい MemoryDB クラスターを作成するときに、スナップショットから MemoryDB クラスターを復元できます。

はい、Valkey または Redis OSS RDB ファイルから MemoryDB クラスターを復元することは可能です。新しい MemoryDB クラスターを作成するときに、復元する RDB ファイルを指定できます。

はい、ElastiCache から MemoryDB にデータを移行することは可能です。まず、ElastiCache クラスターのスナップショットを作成し、S3 バケットにエクスポートします。次に、新しい MemoryDB クラスターを作成し、復元するバックアップを指定します。MemoryDB が、スナップショットからのデータと Valkey または Redis OSS メタデータを使用して新しいクラスターを作成します。ElastiCache から MemoryDB へのデータ移行の詳細については、MemoryDB のドキュメントを参照してください。

メトリクス

はい、MemoryDB はクラスターの運用およびパフォーマンスに関するメトリクスを提供します。MemoryDB には 30 を超える CloudWatch メトリクスがあり、これらのメトリクスは MemoryDB コンソールで表示できます。CloudWatch メトリクスと MemoryDB の詳細については、MemoryDB のドキュメントを参照してください。

セキュリティとコンプライアンス

はい、MemoryDB は保管中と転送中の両方のデータ暗号化をサポートしています。保管中の暗号化には、AWS Key Management Service のカスタマーマネージドキー (CMK) あるいは MemoryDB 提供のキーを使用できます。MemoryDB クラスター向けの Graviton2 インスタンスでは、常時オンの 256 ビット DRAM 暗号化を使用してデータがメモリ内で暗号化されます。

MemoryDB は、アクセスコントロールリスト (ACL) を使用して、クラスターの認証と認可の両方を制御します。ACL によって、同じクラスター内の異なるユーザーのためにさまざまな許可を定義できます。ACL は 1 人以上のユーザーの集まりです。それぞれのユーザーが、コマンドとデータへのアクセスを許可するために使われるパスワードとアクセス文字列を持っています。MemoryDB の ACL の詳細については、MemoryDB のドキュメントを参照してください。

はい、すべての MemoryDB クラスターは VPC で起動する必要があります。

今後も引き続き、より多くのコンプライアンス認証のサポートを続けていきます。最新のコンプライアンス認証の準備態勢については、こちらをご覧ください。

はい。自分のアカウントで実行された Amazon MemoryDB API コールの履歴をすべて受信するには、AWS マネジメントコンソールで CloudTrail を有効にします。詳細については、CloudTrail のホームページを参照してください。

コストの最適化

Amazon MemoryDB のデータ階層化は MemoryDB のコストパフォーマンスを最適化する新しいオプションで、アクセス頻度の低いデータをメモリからローカル接続された高性能ソリッドステートドライブ (SSD) に自動的に移動する機能です。データ階層化を使えば容量が増加し、クラスター管理が簡素化され、MemoryDB の総保有コスト (TCO) を削減できます。

アプリケーションの可用性を犠牲にすることなく MemoryDB クラスターのデータ容量をスケールする、より簡単で費用対効果の高い方法が必要な場合は、データ階層化を使用することをお勧めします。データ階層は、データの 20% までしか定期的にアクセスしないワークロードや、アクセス頻度の低いアイテムが初めて必要になったときにレイテンシーを追加で許容できるアプリケーションに最適です。R6g ノード (メモリのみ) と比較すると約 5 倍の総容量 (メモリ + SSD) を持つ R6gd ノードでデータ階層化を使うことで、最大使用率で稼働させた場合に 60% 以上のストレージコストを節約できます。500 バイトの文字列値を想定した場合、SSD に保存されたデータへの読み取りリクエストには、メモリ内のデータへの読み取りリクエストと比較して、通常 450 μs の追加レイテンシーが生じると考えられます。

データ階層化は、使用可能なメモリ容量が使い果たされたときにクラスターノードの SSD ストレージを利用することで機能します。SSD ストレージを備えたクラスターノードを使用すると、データ階層化が自動的に有効になります。MemoryDB はデータ配置を管理し、Least Recently Used (LRU) ポリシーを使ってメモリとディスク間でアイテムを透過的に移動します。メモリが完全に消費されると、MemoryDB は最近の使用頻度が最も低いアイテムを自動的に検出し、その値をディスクに移動してコストを最適化します。アプリケーションがディスクからアイテムを取得する必要がある場合、MemoryDB はリクエストを処理する前にその値をメモリに透過的に移動し、パフォーマンスへの影響を最小限に抑えます。

開始するには、ARM ベースの AWS Graviton2 プロセッサと NVMe SSD (R6gd) を搭載したメモリ最適化インスタンスを使用して新しい MemoryDB クラスターを作成します。そうすると、スナップショットをインポートすることで、既存のクラスターからデータを移行できるようになります。

データ階層化機能を備えた R6gd ノードの料金は、消費されるインスタンス時間に応じて計算されます。また、他の MemoryDB ノードタイプと同様に、R6gd を使用するときのデータ書き込みにも料金が発生します。詳細については、MemoryDB 料金表ページをご覧ください。

開始するには、ARM ベースの AWS Graviton2 プロセッサと NVMe SSD (R6gd) を搭載したメモリ最適化インスタンスを使用して新しい MemoryDB クラスターを作成します。そうすると、スナップショットをインポートすることで、既存のクラスターからデータを移行できるようになります。

MemoryDB リザーブドノードは、ノードファミリーおよび AWS リージョン内で柔軟にサイズを選べます。同じノードファミリーのすべてのサイズの使用には、割引されたリザーブドノード料金が自動的に適用されます。例えば、r6g.xlarge のリザーブドノードを購入し、より大きなノードである r6g.2xlarge にスケールする必要がある場合、リザーブドノードの割引料金が同じ AWS リージョンの r6g.2xlarge ノードの 50% の使用に自動的に適用されます。サイズが柔軟であるためリザーブドノードの管理に時間を減らすことができ、特定のデータベースノードサイズに縛られることもないため、キャパシティの変更が必要な場合も割引を最大限に活用できます。

MemoryDB リザーブドノードの料金は、ノードタイプ、期間 (1 年または 3 年)、支払いオプション (前払いなし、一部前払い、全額前払い)、AWS リージョンを基に決まります。リザーブドノードの料金には、データ書き込みやスナップショットストレージの費用は含まれませんのでご注意ください。詳細については、MemoryDB 料金表ページをご覧ください。

MemoryDB には、メモリ最適化の R6g、R7g、R6gd (データ階層化あり) ノード用のリザーブドノードがあります。