Open3
昔挫折したDatabase Design and ImplementationとPostgreSQLのコードリーディングをまとめてやるぞ
はじめに
最近自社でDatabase Design and Implementationの輪読会をしています。
昔Zigで実装しようとして挫折しました。昔PostgreSQLのコードリーディングをしていましたが、深すぎてなげました。
今回はDatabase Design and ImplementationをCでやっているのでリファレンス実装としてPostgreSQLを参考にしつつ、ミニマルなデータベース実装に必要なコンポーネントがPostgreSQLではどうなっているのかを見ます。
Chapter 3
ストレージをDB上でどう扱っているか解説している章
BlockID
- SimpleDBとの違い
- SimpleDBではBlockIDをfilename + blocknumberで表現している
- PostgreSQLではBlockIDは確保したブロックのposition(high, low)で判別している。
static inline void BlockIdSet(BlockIdData *blockId, BlockNumber blockNumber) { blockId->bi_hi = blockNumber >> 16; blockId->bi_lo = blockNumber & 0xffff; }
- この実装によりBlockNumberをBlockIdから生成できる
static inline BlockNumber BlockIdGetBlockNumber(const BlockIdData *blockId) { return (((BlockNumber) blockId->bi_hi) << 16) | ((BlockNumber) blockId->bi_lo); }
- この実装によりBlockNumberをBlockIdから生成できる