一直以来都对数据库充满了好奇,想知道数据库底层的运作模式,为什么它可以做到高效存储,为什么可以做到ACID,锁机制如何实现。。。等等一系列的问题。
后来找到了Apache的顶级开源项目Derby数据库,该数据库可以支持目前主流的关系型数据库功能,并且代码量不大(20几M)。通过对数据库源代码的研究能够了解更多数据库底层的秘密。
首先先以Derby数据库的底层页面的格式说起。这个页面指的是存储数据库记录的一般页面。Derby数据库的页面默认大小为4096字节。
Format id(2)
页面头部(60)
数据库记录
Slot
校验和(8)
上述表格括号里面的数字表示其占页面的大小,单位是字节。
上述表格中的第一个部分是format id,在derby数据库中对每一个需要存储到磁盘的类分配了一个format id。比如页面对应的类为StoredPage,如果将StoredPage对应的对象写入磁盘时,首先需要将该类对应的format id写入磁盘。这样,当从磁盘读取数据时,可以通过format id找到对应的类,进而在内存中还原该对象。StorePage的format id是117。
每一个页面都有一个页面头部(header),页面头部大小固定,占60个字节。里面包括的内容有:
名字
长度(单位byte)
类型