# LMDB
LMDB(Lightning Memory-Mapped Database)は、[[OpenLDAP]]プロジェクトで使用されるキーバリューストアであり、コピーオンライトBツリーの実装例である。単一レベルのデータストアとして実装され、読み取り操作と書き込み操作がメモリマップを介して直接行われるため、アプリケーションレベルの追加キャッシュを必要としない。ページは追加の実体化を行わず、データを中間バッファへコピーせずに直接メモリマップから読み込める。その設計とアーキテクチャのおかげで、ページキャッシュ・ログ先行書き込み・チェックポイント・圧縮を必要としない。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 6 Bツリーの亜種]] §6.1.1)
更新時には、ルートからターゲットとなるリーフまでの経路上のブランチノードがすべてコピーされ、変更される可能性がある。更新が伝播するノードは変更され、それ以外のノードはもとのままの状態に保たれる。LMDBはルートノードのバージョンを最新のバージョンとコミット中のバージョンの2つのみ保持し、これは全ての書き込みがルートノードを介して行われるために十分である。新しいルートが作成されると古いルートは新しい読み取り・書き込みに使用できなくなり、古いツリーセクションを参照する読み取りが完了すると即座にページが回収・再利用される。LMDBは追記型として設計されているため兄弟ノードへのポインタを使わず、シーケンシャルスキャンの際にはツリーを上方にたどって親ノードに戻る必要がある。データベース構造は本質的にマルチバージョン化されており、読み取りは書き込みに干渉されずロックなしで実行できる。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 6 Bツリーの亜種]] §6.1.1)
## 関連
- ソース: [[@2021__OReillyJapan__詳説 データベース - Chapter 6 Bツリーの亜種]]
- 概念: [[B-Tree]]
- エンティティ: [[OpenLDAP]]
## 出典
- [[@2021__OReillyJapan__詳説 データベース - Chapter 6 Bツリーの亜種]](§6.1.1 コピーオンライトの実装: LMDB)