Perst嵌入式数据库存储结构分析与研究
表2.3 数组root[1]结构
00 00 00 00 00 01 60 00 | 00 00 00 00 00 00 A0 00 | 00 00 00 00 00 00 00 10 00 |
8 bytes | 8 bytes | 8 bytes |
00 00 00 00 00 01 42 80 | 00 00 12 00 | 00 00 12 00 |
8 bytes | 4 bytes | 4 bytes |
00 00 10 08 | 00 00 00 00 | 00 00 00 02 |
4 bytes | 4 bytes | 4 bytes |
00 00 10 01 | 00 00 10 02 | 00 00 00 00 |
4 bytes | 4 bytes | 4 bytes |
表2.4 事务id
00 00 00 00 00 00 00 01 | 8 bytes | 事务id |
数据库文件的第一页(4K)存放了整个数据库文件的Header信息。程序从数据库文件的Header信息中分离出数据库文件的使用情况和索引结构的存储位置,这样可以很快的定位数据库中的记录数据。
3 Perst的Object Index存储结构
Perst专门开辟了一段空间,称Object Index区,存放持久化对象在文件中的实际存储位置。一般这个区在文件的第2-10页,第11-19页存放这个区的备份。第2-9页的数据被标识为空闲文件区,第10页存放实际Object Index。
在Object Index区中,每个元素称为Object Handle,每Object Handle用8个字节表示,存放对应对象在文件中的实际存储位置,即对象的OID。对于4K的页,可以存放512个Object Handles。Object Index区的结构如图3.1所示。
图3.1 Object Index结构图
在图3.1的0x00012000h位置以前都是空闲区,之后的才是真正存放Object Handle的Object Index区。如果Perst数据库文件中的持久化对象的OID个数超过512个,Perst会在数据库文件的另一个区开辟更大的存储空间充当 Object Index区,以存放更多的Object Handle。
4 Perst记录数据及类的存储结构
Perst中记录数据存放位置是根据当前数据库的使用情况来为记录数据分配存储空间。Perst中每个记录数据的存放格式都是统一的,每个记录数据的开头占用8个字节存放记录数据的基本信息。前4个字节存放这条记录占用的字节个数,后4个字节存放构建这个记录对象的类的 OID,通过这个OID就可以动态的加载该类的对象。以类Test.User的记录为例,该记录包含一个int类型的数据和一个变量名为“name”的 String类型,其存储结构如图4.1所示:
评论