これは 自作DBMS Advent Calendar 2020 - Adventar 1日目の記事です。 初日からギリギリで大丈夫なんですかねぇ(主催者)。 先日こういう記事を書きました。 Rustで古典的なDisk-Oriented DBMSを実装した話 - Write and Run その中で、 このあたりで固定長のページをノードとした B+Tree に、可変長のデータを入れようとすると途端に実装が面倒になることに気が付きます。 と書いたのですが、具体的にどう面倒になるのかについてはなにも説明しませんでした。 今回は固定長のページに可変長のタプルを入れるとなにがどう面倒なのかという話を解説します。 テーブルヒープにおける可変長タプル まず、B+Tree ではなく単純なテーブルヒープを考えます。 PostgreSQL のテーブルデータなどがそういう実装ですね。 これは CMU の例の講義