- ハードウェアページは典型的には4kb
- この単位で書き込む場合、all or nothingで書ける
- DBのファイルはheap fileをよく使う
- ページ単位で読み書きできるAPI
- heap fileの実装はpage dictionaryをよく使う
- link listだと効率が悪い
- page layoutはslotted pageをよく使う
- ページヘッダのあとに格納されているtupleの場所を示す配列を置く
- tupleはpageの後方から配置していく
- arrayとtupleがぶつかるまでは詰めることができる
- page layoutとしてlog structureを使うてもある
- 再構築が必要なので遅いが、append onlyなのでHDFSとかでよく使う
- あとlog compactionが必要なのでwrite amplificationが起こる
- tuple layoutとして複数のテーブルを一つのtupleに突っ込むdenormalizeというものがある
- 例えばjoinするテーブルをまとめておくと1ページ読むだけでデータが手に入るので高速
- その昔はやっていることもあったがむずいので使われなくなった
- google spannerとかは使っている
- mongoとかのdocument dbもある意味ではこれ
- record id は page id + slot offsetを使うのが多い