🙄

In-memory DB vs キャッシュの容量が大きい On-disk DB

2022/04/10に公開

本記事について

近年データベースはプロダクト開発において欠かせないものである.また様々なプロダクトにおいて自動化が進んでいるため,今後エンジニアは低レイヤの知識をもとにアーキテクチャを考えることが求められるだろう.そのためデータベースの構造を知っておくことは有用である.
本記事ではデータベースの種類の 1 つである,In-memory DB と On-disk DB に焦点を当てる.これらの主な違いはデータを保存する場所である.どちらがデータ取得に効率が良いかは議論があるが,本記事ではデータ保存のためのデータ構造の観点で議論を行う.
本記事の対象読者はデータベースを開発で使ったことがある人である.使ったことがあればどのようにデータベースが使われるかやファイルにデータを保存するといったイメージが湧きやすいからである.本記事ではまず議論のために必要な単語を説明するのでそれらの知識を有している必要はない.

In-memory DB, On-disk DB

In-memory DB とはデータを主にメモリに保存しておくデータベースである.メモリはディスクに比べて読み取りが高速になるため,データベース内のデータ取得も高速となる.しかしディスクよりも容量は少ないというデメリットがある.また In-memory DB のディスクはバックアップやログ管理のために使われる.
On-disk DB とはデータをディスクに保存しておくデータベースである.前者の逆で読み取りは遅いが容量は大きいという特徴がある.On-disk DB にもメモリが存在していて,キャッシュのために使われる.よってキャッシュの容量が大きければ On-disk DB も In-memory DB と同等のパフォーマンスになるのではないかという議論が本記事における要旨である.

データ構造の観点での議論

データを保存する構造としてよく取り上げられるのが B-tree である.詳しくは以下の記事を参照.
https://zenn.dev/tkkawa/articles/7e7939cbae7eea

この記事にもあるようにB-tree はディスクアクセス回数を減らすことができる.
また T-tree という構造もある.T-tree はディスクアクセス回数は気にせず比較回数を減らす構造である.(詳しくは別途記事で説明予定)
勘の良い読者ならもう気づいているだろうが,In-memory DB はデータをメモリに保持しているため,ディスクにアクセスする必要がない.つまり In-memory DB で T-tree を用いれば単純に比較回数を減らすことができるが,On-disk DB で T-tree を用いると B-tree に比べてディスクアクセス回数が増えてしまうので全体の計算量が減るとは限らないのである.

最後に

本記事ではデータ構造の観点で効率を議論したが,シリアライゼーションのフォーマットなどでも違いがあるので気になった読者は調べてみるといいだろう.

追記 4/22

以下の記事でキャッシュとインメモリの違いや使い分けがまとめられているので参考にすると良いだろう.
https://codezine.jp/article/detail/15804

参考文献

[1] Alex Petrov 著,小林 隆浩 監訳,成田 昇司 訳,詳説 データベース
[2] Bayer, R., and E. M. McCreight. 1972. “Organization and maintenance of
large ordered indices.” Acta Informatica 1, no. 3 (September): 173 - 189. https://doi.org/10.1007/BF00288683.
[3] T. J. Lehman, M. J. Carey, “A Study of Index Structures for Main Memory Database Management Systems”, in Proceedings 12th Int. Conf. On Very Large Database, Kyoto, August 1986, pp. 294-303.

Discussion