BerkeleyDBの続き
Berkeley DB Mpoolサブシステムについて
ファイルページを扱うインメモリのバッファプール
- ソフトウェアを実行する際、使用するプログラムやデータのすべてをメモリ上に読み込み、ハードディスクなどの外部記憶装置を使わない
- 高速に実行できる反面大容量のDBの場合は大量のメモリが必要となる
インメモリとは 〔 オンメモリ 〕 【 in-memory 】 - 意味/解説/説明/定義 : IT用語辞典
バッファプール
バッファープールとは,表や索引のデータ・ページをディスクから読み取る際や変更する際に,そのデータをキャッシュに入れておくためのメモリー
バッファー・プールの目的は、データベース・システムのパフォーマンスを改善すること
ページ
特集:基礎から理解するデータベースのしくみ - 基礎から理解するデータベースのしくみ(6):ITpro
ページには,テーブルを構成するレコードや,インデックスのエントリを複数格納する
動き
- 実際はディスク上の永続データのキャッシュであるという前提
- メモリ内のページを固定し、他のプロセス、スレッドがそのページをバッファプールから削除できないようにする
Mpoolのファイル抽象化
ファイルシステム上で動かすことを前提としているため、ファイルを抽象化したAPIを公開
ダーティ
DBの書き込みはディスクからデータを取り出してメモリの中で計算して修正したデータをディスクに戻す。メモリにデータを書き込まれた状態をダーティと呼ぶ。
読み込み用として固定したページはダーティになったとしてもディスクに書き込める
データの読み込みでダーティ状態が発生するのか?
固定している最中に読み込みとか書き込みとかしてもいいのか?っていう話 書き込み中に書き戻しは当然だめだけど、読み込み中に書き込みはいいんじゃないのか
ログ先行書き込み(WAL)
処理に失敗した場合の復旧 データを更新する前に変更内容のログをディスクに書き込む すべてのデータページにログシーケンス番号(LSN)を書き込み、特定のページへの直近の変更に対応するログレコードを記録する
本体とは別のところにLSNを書き込むスペースがある。DBが壊れたときはそのスペースのLSNから該当するSQLを見つけ出して復旧する
LSNからSQLを呼び出す専用のメソッドが存在し、それを呼び出さないとLSNは使われない
設計
- ログ先行書き込みはカプセル化とレイヤー化の一例でもある
- こうした指針は有用で、ソフトウェアの保守やテスト、デバッグ、拡張をしやすくしてくれる