# メインメモリデータベース ## 定義 メインメモリデータベース(Main Memory Database、MMDB)は、データベース全体を主記憶(RAM)上に常駐させることを前提として設計されたデータベースシステムである。ディスク指向の伝統的 RDBMS が前提とするページバッファプール管理・ディスク I/O を介した書き戻しを排除し、メモリへの直接アクセスで全データを操作する。OLTP ワークロードの大部分はトランザクションサイズが小さく、数千ドルのサーバの RAM に収まるデータ量であることが 2000 年代前半から観察されており、これがメインメモリデータベース設計の経済的根拠となっている。(Source: [[@2008__SIGMOD__OLTP through the looking glass, and what we found there]]) ### 設計上の帰結 メモリ常駐を前提とすると、以下の従来機能が不要または再設計対象になる: - **バッファプール管理**: ディスク上のページをキャッシュする層が丸ごと不要。レコードを malloc で直接確保すれば良い - **ページ指向のデータレイアウト**: ディスクブロックサイズに合わせたスロット付きページ構造が不要になり、キャッシュライン最適化されたレイアウトに変更できる - **WAL のコスト**: バッファプールへのページ書き戻し前にログをフラッシュする「ページベース WAL」から、トランザクション呼び出しのみを記録する「コマンドロギング」に軽量化できる - **B-tree の深さ**: ページサイズをディスク制約から解放し、キャッシュラインサイズに最適化した構造(cache-conscious B-tree)を採用できる ## 横断的知見 - **メモリ常駐だけでは 20 倍の高速化は得られない**: Shore での実測(TPC-C)によると、DB を主記憶にプリロードした段階では 640 TPS → 1,700 TPS(約 2.7 倍)にとどまる。20 倍には 4 コンポーネント全除去が必要。メモリ常駐はそれ自体ではなく、他コンポーネント除去の前提条件として機能する。(Source: [[@2008__SIGMOD__OLTP through the looking glass, and what we found there]]) - **2007 年の H-Store と 2008 年の測定の関係**: H-Store([[@2007__VLDB__The End of an Architectural Era (It's Time for a Complete Rewrite)]])はメモリ常駐・単一スレッド・シェアードナッシングを組み合わせて商用 RDBMS の 82 倍のスループットを達成。[[@2008__SIGMOD__OLTP through the looking glass, and what we found there]] は Shore への段階的除去で「なぜ速くなるか」を命令数レベルで解明した。前者が実証、後者が機構分析である。(Source: 両論文) - **バッファマネージャ除去の波及効果が最大**: バッファマネージャを除去すると、新規レコード生成を malloc で直接行えるようになりレコード生成コストが事実上ゼロになる。さらに B-tree ルックアップ・更新も間接参照なしに高速化する。New Order では命令数の 34.6% 削減と最大の寄与。(Source: [[@2008__SIGMOD__OLTP through the looking glass, and what we found there]]) - **ページサイズ拡大だけで 14% の改善**: Shore のページサイズを 8KB から 32KB に変更するだけで New Order の命令数が約 14% 削減された。B-tree の深さ削減とページ確保頻度低下が原因。ディスク I/O を考慮しないメモリ常駐環境ではページサイズ増大が効果的。(Source: [[@2008__SIGMOD__OLTP through the looking glass, and what we found there]]) ## 未解決の問い - 主記憶に収まらない規模の OLTP ワークロードが将来も残る場合、メモリ常駐と部分ディスク利用をどう組み合わせるべきか? - メモリ常駐環境で B-tree を廃止してハッシュテーブルに移行すると、範囲クエリ・ソートを含む TPC-C 相当のワークロードでどれだけの性能差が生じるか? - NVM(不揮発性メモリ、Intel Optane 等)の登場により、「メモリ常駐」と「永続化」のトレードオフはどう変化するか? ## 関連 - 姉妹 concept: [[OLTPシステムアーキテクチャ]](OLTP コンポーネントの分解)、[[専用データベースシステム]](特化型 DBMS の大分類) - 一次ソース: [[@2008__SIGMOD__OLTP through the looking glass, and what we found there]](Shore の主記憶常駐前提での段階的改変) - アーキテクチャ提案: [[@2007__VLDB__The End of an Architectural Era (It's Time for a Complete Rewrite)]](H-Store のメモリ常駐・シェアードナッシング設計) ## 出典 - [[@2008__SIGMOD__OLTP through the looking glass, and what we found there]](メモリ常駐 OLTP の性能上限を段階的に測定した一次論文) - [[@2007__VLDB__The End of an Architectural Era (It's Time for a Complete Rewrite)]](メモリ常駐 OLTP の完全特化設計として H-Store を提案)