DBMSとB-tree
以下の3つを一致させることが効率性を生む
B-treeにおけるnode
DBMSにおけるpage
Storage (記憶装置) におけるblock
コンピュータに接続される外部記憶装置には、バイトやビットごとにデータの読み書き(アクセス)を行うことができない、あるいはそのようなアクセスでは極端に性能が落ちるものがある。そこで、これらの外部記憶装置ではある程度まとまった固定長のデータ塊ごとにアクセスを行う。この固定長はディスクセクタ、あるいはブロックなどと呼ばれる。 9インチ磁気テープ、フロッピーディスク、ハードディスクドライブ、光ディスク、NAND型フラッシュメモリなどは固定長単位でデータを格納する。 これらの装置を抽象化し同じように扱うため、一部のオペレーティングシステムやデータベース管理システム (DBMS)では、ブロックと呼ぶ固定長のデータ構造体を用意し、ブロック単位で各記憶装置にアクセスを行う。ブロックサイズは一般的に、各記憶装置のアクセス単位よりは大きめに設定される。
データベースはファイルシステム上に構築することもできるが、DBMS が直接ブロック型記憶装置を操作する方が性能がよく、問題発生時のリカバリも容易になる。 DBMSが記憶装置とデータのやり取りを行う最小単位をまた、ブロックあるいはページと呼ぶ。
https://ja.wikipedia.org/wiki/ブロック_(データ)
Let's Build a Simple Database
C言語でB-tree (正確にはB+ tree) を実装することになって理解が捗る
1 blockを4096 bytesとしたときのメモリレイアウトが学べる
B-trees and database indexes
PlanetScaleによるB+TreeとRDBMSの解説
InnoDBをメインとしている
InnoDBでは1ブロック16k
参考
https://ja.wikipedia.org/wiki/B木
https://techlife.cookpad.com/entry/2017/04/18/092524
https://blog.jcole.us/2013/01/10/btree-index-structures-in-innodb/
https://weblog.riywo.com/post/41674496866
https://blog.jcole.us/2013/01/02/on-learning-innodb-a-journey-to-the-core/
https://blog.h13i32maru.jp/entry/2012/07/01/000000
https://cstack.github.io/db_tutorial
#database