B+-Tree in Practice - Database Management Systems
Database Management Systemsの10章。
マインドマップから再構成したまとめ
Bulk loading
複数のデータから B+-Tree を 1 から構築するとき。
- 通常の insert アルゴリズムだと root から 1 データずつ insert。効率悪い
- ある程度まとめてデータを insert する方法が Bulk loading
- データを key でソートしてからまとめて insert していく
B+-Tree の prefix key compression が面白かった。商用のDBではほぼ実装されているらしい。
Prefix key compression
- B+-Tree は木の高さが低い方が良い
- I/Oが少なくなるから。
- 木の高さはデータ数と、1ページあたりのindex entry 数に比例
- つまり1ページに index entry をたくさん詰め込めば fanout が大きくなり高さが低くなる
- key が短ければたくさん詰め込める
- となり合う、key は search key との大小比較で使われるだけ。
- "David-san" と "Daniel-kun" の大小比較では "Dav" と "Dan" として格納しておいても OK。(おおまかに)
B+-Tree
Duplicate Handling
key に対して複数 record 存在する場合はどのように格納するのか?
方法1: ISAM のように overflow pages に格納
方法2: leaf page に他のデータと同じようにおく。
key->(data, rid) のような構造でデータを保持したい場合は key に rid も含めた形で unique index を保つ。(自信なし)
そうすれば delete 時に同じ key に対する (data, rid) の組の走査のコストがかからない。
所感
- B+-Tree に何故か興奮する