三:数据元页结构
3.1 metepage头结构
该结构是一个公共结构。用于B树matapage页、HASH的matepage页以及queue的metapage。
typedef struct _dbmeta33 {
DB_LSN lsn; //LSN
db_pgno_t pgno; //当前页号
u_int32_t magic; //调试用的魔数
u_int32_t version; //数据库的当前版本号
u_int32_t pagesize; //数据库页大小
u_int8_t encrypt_alg; //加密算法
u_int8_t type; //页类型
#defineDBMETA_CHKSUM 0x01
u_int8_t metaflags; //metepage的标志位
u_int8_t unused1; //保留
u_int32_t free; //空闲页页号
db_pgno_t last_pgno; //数据库最后一个页的页号
u_int32_t unused3; //保留
u_int32_t key_count; //缓存的key的数量
u_int32_t record_count; //缓存的记录的数量
u_int32_t flags; //对于每个存储方法而言,这是唯一的
u_int8_tuid[DB_FILE_ID_LEN]; //所属文件ID
} DBMETA33, DBMETA;//该结构大小为72字节
3.2 BTREE的metapage
3.2.1结构图
3.2.2数据结构
typedef struct _btmeta33 {
#defineBTM_DUP 0x001 /* Duplicates. */
#defineBTM_RECNO 0x002 /* Recno tree. */
#defineBTM_RECNUM 0x004 /* Btree: maintain record count. */
#defineBTM_FIXEDLEN0x008 /* Recno: fixed length records. */
#defineBTM_RENUMBER 0x010 /* Recno: renumber on insert/delete. */
#defineBTM_SUBDB 0x020 /* Subdatabases. */
#defineBTM_DUPSORT 0x040 /* Duplicates are sorted. */
#defineBTM_MASK 0x07f
DBMETA dbmeta; //metapage头结构
u_int32_t unused1; //保留
u_int32_t minkey; //B树:最小键
u_int32_t re_len; //Recno:固定的记录长度
u_int32_t re_pad; //Recno:固定长度时的填充符
u_int32_t root; //根页
u_int32_t unused2[92]; //保留
u_int32_t crypto_magic; //加密魔数
u_int32_t trash[3]; //无效,不使用
u_int8_t iv[DB_IV_BYTES]; //Crypto IV
u_int8_t chksum[DB_MAC_KEY]; //页chksum
} BTMETA33, BTMETA;//该结构成员大小为512个字节
3.3 HASH的metapage
3.3.1结构图
3.3.2数据结构
typedef struct _hashmeta33 {
#defineDB_HASH_DUP 0x01 /* Duplicates. */
#defineDB_HASH_SUBDB 0x02 /* Subdatabases. */
#defineDB_HASH_DUPSORT 0x04 /* Duplicates are sorted. */
DBMETA dbmeta; //metapage头结构
u_int32_t max_bucket; //正在使用的最大桶ID
u_int32_t high_mask; //HASH表的模
u_int32_t low_mask; //HASH表的低模
u_int32_t ffactor; //填充百分比
u_int32_t nelem; //HASH表中的key的数量
u_int32_t h_charkey; // HASH值(CHARKEY)
#defineNCACHED 32 //备用指针的数量
u_int32_t spares[NCACHED]; //为overflow准备的备用页
u_int32_t unused[59]; //保留
u_int32_t crypto_magic; //加密魔数
u_int32_t trash[3]; //无效,不使用。
u_int8_t iv[DB_IV_BYTES]; //Crypto IV
u_int8_t chksum[DB_MAC_KEY]; //页的chksum
} HMETA33, HMETA;//结构成员大小为512个字节
3.4 QUEUE的metapage
3.4.1结构图
3.4.2数据结构
typedef struct _qmeta33 {
DBMETA dbmeta; //metapage头结构
u_int32_t first_recno; //第一个未删除的记录
u_int32_t cur_recno; //下一个分配的记录号
u_int32_t re_len; //固定记录长度
u_int32_t re_pad; //填充符
u_int32_t rec_page; //每一页的记录数
u_int32_t page_ext; //每一簇的页数
u_int32_t unused[91]; //保留
u_int32_t crypto_magic; //加密魔数
u_int32_t trash[3]; //无效,不使用。
u_int8_t iv[DB_IV_BYTES]; //Crypto IV
u_int8_t chksum[DB_MAC_KEY]; //页的chksum
} QMETA33, QMETA;//数据结构成员大小为512个字节
分享到:
2010-10-27 10:51
浏览 621
评论