CMU 15-445 Database Storage Iのメモ

  • ハードウェアページは典型的には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を使うのが多い