【いんめもりでーたべーす】

インメモリデータベース とは?

最終更新:
💡 データをメモリで扱い、永続化は別に設計するDB

データを主にメインメモリ(RAM)に置き、そこで読み書きや検索を行うデータベース。データアクセスのディスク待ちを減らす設計だが、永続化にディスクを使う製品もあり、速度や障害時の復旧は構成による。

📌 このページのポイント
データを扱う場所と、保存先を分けて考える ディスク中心 アプリ RAM インメモリ アプリ RAM バッファ・キャッシュ 主なデータを扱う ディスクにデータ 永続化の保存先 右の点線:永続化を使う構成の例 速さ・容量・障害時の復旧は構成による
どちらもRAMを使う。左は必要なデータの読み出し・保存、右の点線は永続化を使う構成を簡略化したもので、毎回ディスクを読む順序やすべての製品の内部構成を示すものではない。速度の倍率や無損失を保証しない。
ひよこ ひよこ
インメモリデータベースって、普通のデータベースと何が違うの?
ペンギン先生 ペンギン先生
主なデータをRAMに置いて扱う設計だよ。ただし、ディスク中心のDBもメモリのバッファやキャッシュを使う。毎回必ずディスクを読むDBとの単純な比較ではないし、インメモリなら何百倍・何マイクロ秒と一律に決まるわけでもないんだ。
ひよこ ひよこ
でもメモリって、電源が切れたら消えちゃうのでは?
ペンギン先生 ペンギン先生
RAMだけのデータは失われるよ。RedisにはRDBという時点のスナップショットやAOFという更新ログをディスクへ保存する方法がある。ただし、最後の保存からの更新が失われる場合があり、AOFでも同期の方針などを確認する。ディスクへの保存を設定すれば全障害で安全、という保証ではないんだ。
ひよこ ひよこ
どんな製品や用途があるの?
ペンギン先生 ペンギン先生
Redisはデータベースやキャッシュなどに使える。SQLiteにも、接続を閉じると消える :memory: のDBがあり、一時的な処理やテストの例に使えるよ。Memcachedもメモリを使うけれど、主に一時的なキャッシュ。失いたくない元データのDBと同じ役割にはしないんだ。
ひよこ ひよこ
じゃあ全部インメモリにしてもいい?
ペンギン先生 ペンギン先生
必要なデータと管理用のメモリが容量に収まるか、ディスクへの保存や復旧にどんな負荷・時間がかかるかを確かめるよ。ネットワークや処理自体が遅ければ、RAMへ置くだけでは解決しない。元のDBとキャッシュを組み合わせる方法もあるんだ。
ひよこ ひよこ
Redisなら、グラフ検索なども何でも使えるの?
ペンギン先生 ペンギン先生
機能は製品・版・構成ごとに確認するよ。Redisには検索などの機能もあるけれど、RedisGraphは終了が告知され、Redis Stackの7.2以降には含まれない。昔の機能一覧をそのまま使えると思わず、必要なデータ型やディスクへの保存の条件を調べるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「インメモリデータベース」って出てきたら「主にRAMでデータを扱うデータベース」と思えばだいたいOK!
📖 おまけ:英語の意味
「In-Memory Database」 = メモリ内データベース
💬 In-Memoryはメモリ内、Databaseはデータベース。主なデータアクセスの場所を示す名前で、ディスクを一切使わないという意味に限らないよ。

参考資料

← 用語集にもどる