# インメモリデータベース
## 定義
インメモリデータベース(In-Memory Database)とは、主記憶装置(DRAM)をプライマリストレージとして使用し、ディスク I/O のオーバーヘッドなしに数百万 Op/s・マイクロ秒台のレイテンシを提供するデータベースシステムである。代表的な実装には OSS Redis・Memcached・H-Store・VoltDB・Hazelcast などがある。
Redis は 200 以上のコマンドと 10 種のデータ構造(ハッシュテーブル・ソート済みセット・ストリーム・HyperLogLog 等)をサポートし、db-engines.com のランキングで最も人気のあるインメモリ KV ストアとなった(P99 レイテンシ 400 µs 未満)。(Source: [[@2024__SIGMOD__Amazon MemoryDB - A Fast and Durable Memory-First Cloud Database]])
**耐久性のトレードオフ**: インメモリエンジンは単体では障害時のデータ損失リスクを内包する。このトレードオフを解決するアプローチは主に 3 種類:
1. **ローカルログ/スナップショット**: AOF・BGSave(Redis)。ローカルディスクへの書き込みで耐久性を確保するが、マルチノード構成では依然としてフェイルオーバー時のデータ損失リスクが残る
2. **分散ログへの分離**: トランザクションログを外部サービスに分離する([[Amazon MemoryDB]]、[[Amazon Aurora (Database)]])。計算と耐久性を独立スケーリング可能にする
3. **アンチキャッシング**: 「ホット」データをメモリに、「コールド」データをディスクに自動移動する H-Store のアプローチ
## 横断的知見
- **「キャッシュ」として始まり「一次ストア」へ移行したユーザーが多い**: Amazon MemoryDB の開発動機([[@2024__SIGMOD__Amazon MemoryDB - A Fast and Durable Memory-First Cloud Database]])として、ElastiCache for Redis 顧客の多くが Redis を一次データストアとして使い始め、DynamoDB + DynamoDB Streams + Redis 手動再同期という複雑なパイプラインを自前構築していた事実が報告されている。インメモリエンジンが高パフォーマンスゆえにキャッシュの役割を超えて使われていくパターンが確認できる
- **耐久性をエンジン外部に分離することで Redis API 互換性とエンタープライズ品質の耐久性が同時に達成できる**: MemoryDB は Redis 複製ストリームをインターセプトしてマルチ AZ トランザクションログへ転送するという侵襲度の低い実装を選択し、OSS Redis の Redo 処理ロジックを変更せずに 11 9s 耐久性を達成した。(Source: [[@2024__SIGMOD__Amazon MemoryDB - A Fast and Durable Memory-First Cloud Database]])
- **インメモリデータベースの性能優位性は「ディスクを読まないこと」ではなく「ディスク永続化用のエンコーディングを回避すること」に由来するという説明は、MemoryDBがディスクI/Oを完全に排除できない理由と整合する**: DDIA第4章は、十分なメモリがあればディスクベースのストレージエンジンもOSのファイルシステムキャッシュにより実質ディスクを読まずに済むため、インメモリDBの優位性の本質はディスクI/O回避ではなく、ディスクに書ける形式へインメモリデータ構造をエンコードするオーバーヘッドの回避にあると説明する。これは、MemoryDBがRedisの複製ストリームをマルチAZトランザクションログへ書き続ける(=耐久性のための書き込みI/Oは残す)にもかかわらず、Redisコアのメモリ内処理ロジックには一切手を加えず高速性を保てている理由を裏づける——耐久性のための「外部への書き込み」と、性能を決める「内部データ構造のエンコーディングコスト」は独立した軸であり、MemoryDBは後者を変更せず前者だけを外部化することで両立させている。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 4 Storage and Retrieval]] "Keeping Everything in Memory", [[@2024__SIGMOD__Amazon MemoryDB - A Fast and Durable Memory-First Cloud Database]])
- **DDIAが列挙する主要インメモリDB群(VoltDB・SingleStore・TimesTen・RAMCloud・Redis・Couchbase)は、耐久性の実現手段によって3系統に分岐し、MemoryDBはこのうち「分散ログへの分離」系統の後発具体例として位置づけられる**: DDIA第4章は耐久性確保の手段を「特殊ハードウェア(バッテリー駆動RAM)」「ディスクへの変更ログ・スナップショット書き込み」「他マシンへのレプリケーション」の3種に整理し、RAMCloudをログ構造化アプローチで耐久性を持つOSSインメモリKVSの例として、Redis/Couchbaseを非同期ディスク書き込みによる弱い耐久性の例として挙げる。既存知見が示すMemoryDBの「耐久性を分散トランザクションログへ分離する」アプローチは、DDIAの分類でいえば「ディスクへのログ書き込み」を単一ノードではなくマルチAZの外部サービスへ発展させた形態であり、RAMCloudの「ログ構造化アプローチをメモリ上のデータにもディスク上のデータにも使う」という設計とは異なる系統(ログの置き場所を分散サービス化)に属する。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 4 Storage and Retrieval]] "Keeping Everything in Memory", [[@2024__SIGMOD__Amazon MemoryDB - A Fast and Durable Memory-First Cloud Database]])
- **『メモリにキャッシュされたディスクベース DB』と『真のインメモリ DB』の等価性を否定する主張が、教科書(Database Internals)と DDIA という独立した2冊で一致する**: [[@2021__OReillyJapan__詳説 データベース - Chapter 1 基本事項の紹介と概要]] は「インメモリデータベースは、大容量のページキャッシュを持つディスクベースのデータベースと同等であるというのは、公平な見方ではない」と明言し、その理由をシリアライズフォーマットとデータレイアウトの追加オーバーヘッドに求める。これは DDIA 第4章が示す「インメモリ DB の優位性の本質はディスク I/O 回避ではなく、ディスクに書ける形式へのエンコーディングオーバーヘッドの回避にある」という既存知見と、著者・出版時期の異なる2つの教科書的ソースが独立に同じ結論へ到達したことを示す。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 1 基本事項の紹介と概要]], [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 4 Storage and Retrieval]])
## 未解決の問い
- Redis の水平スケーリング(クラスタモード)はシャード単位でスロットを分割するが、マルチキートランザクションは同一スロット内に限定される。この制約をトランザクションログとどう統合するか?
- DRAM コスト vs ディスク性能のトレードオフは NVRAM(不揮発性メモリ)普及でどう変化するか?インメモリエンジンの「耐久性分離」アーキテクチャは NVRAM 環境でも優位か?
- オフボックススナップショット方式は顧客クラスタへの影響を排除するが、S3 への書き込みコストと鮮度(freshness)のバランスをどのように最適化するか?
## 関連
- [[ストレージ計算分離]] — 耐久性レイヤーをエンジンから分離するアーキテクチャパターン
- [[Write-Ahead Logging (WAL)]] — インメモリエンジンとの統合における書き込み前 vs 書き込み後ろロギングの違い
- [[メインメモリデータベース]] — OLTP 向けインメモリエンジンの設計
- [[結果整合性]] — インメモリレプリカ間の整合性モデル
- [[Amazon MemoryDB]] — Redis 互換インメモリ DB に耐久性を付与したクラウドサービス
- [[@2021__OReillyJapan__詳説 データベース - Chapter 1 基本事項の紹介と概要]] — メモリベース DBMS とディスクベース DBMS の教科書的な区別・永続性確保の一般パターン
## 出典
- [[@2024__SIGMOD__Amazon MemoryDB - A Fast and Durable Memory-First Cloud Database]](MemoryDB の設計・評価)
- [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 4 Storage and Retrieval]](§Keeping Everything in Memory — 性能優位性の本質、耐久性確保の3手段の分類、VoltDB・SingleStore・TimesTen・RAMCloud・Redis・Couchbaseの整理)
- [[@2021__OReillyJapan__詳説 データベース - Chapter 1 基本事項の紹介と概要]](§1.2, §1.2.1 — メモリベース/ディスクベース DBMS の区別、バックアップ+WAL+チェックポイントによる永続性確保)