Amazon MemoryDB for Redis で耐久性のあるインメモリデータベースを構築 - キャッシュとプライマリデータストアの統合
MemoryDB による Redis 互換インメモリデータベースの運用、耐久性の仕組み、ElastiCache との使い分けを解説します。
MemoryDB の概要
MemoryDB for Redis は Redis 7.x 互換の耐久性を備えたインメモリデータベースサービスで、最大 500 ノード、数百 TB のデータを格納できます。ElastiCache for Redis がキャッシュ (揮発性データ) に特化しているのに対し、MemoryDB は Multi-AZ トランザクションログで書き込みの耐久性を保証し、プライマリデータストアとして使用できます。
耐久性と ElastiCache との使い分け
MemoryDB は書き込みを Multi-AZ のトランザクションログに同期的に記録し、ノード障害時にもデータを失いません。ElastiCache は非同期レプリケーションのため、フェイルオーバー時に直近の書き込みが失われる可能性があります。MemoryDB はセッションストア、ユーザープロファイル、リーダーボードなど「インメモリの速度が必要かつデータを失いたくない」ユースケースに適しています。ElastiCache は RDS や DynamoDB の前段キャッシュとして、データ損失が許容されるユースケースに適しています。
耐久性の仕組みと活用
MemoryDB はトランザクションログをマルチ AZ で永続化し、ノード障害時にデータを完全に復元します。 ElastiCache がキャッシュ用途 (データ損失許容) であるのに対し、 MemoryDB はプライマリデータベースとして使用できる耐久性を提供します。マイクロ秒の読み取りレイテンシとミリ秒の書き込みレイテンシで、セッションストア、リーダーボード、リアルタイム分析のプライマリデータストアに適しています。 Redis のデータ構造 (Sorted Set 、 Hash 、 Stream) をフル活用し、 DynamoDB や RDS を補完するデータ層として配置します。 データベース設計の知見を広げたい場合はAmazon の専門書も活用できます。
MemoryDB の料金
MemoryDB のノード料金は db.r7g.large で 1 時間あたり約 0.463 ドル (月額約 333 ドル) です。ElastiCache の同等ノードより約 20% 高価ですが、耐久性のためのトランザクションログストレージが含まれます。データ転送料金はリージョン内は無料、リージョン間は標準のデータ転送料金が適用されます。スナップショットのストレージは無料枠 (ノードのメモリサイズ分) を超えると 1 GB あたり月額約 0.085 ドルです。キャッシュ用途のみであれば ElastiCache の方が安価です。
まとめ
MemoryDB は Redis 互換で耐久性を保証するインメモリデータベースです。Multi-AZ トランザクションログで書き込みの永続化を実現し、ElastiCache がキャッシュ用途であるのに対し、プライマリデータベースとして使用できます。マイクロ秒の読み取りレイテンシでセッションストア、リーダーボード、リアルタイム分析のデータ層に最適です。