mysql bdb_深入理解mysql之BDB系列(2)---数据元页结构(摘自老杨)

三:数据元页结构

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结构图

bdb2_1.bmp

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结构图

bdb2_2.bmp

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结构图

bdb2_3.bmp

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个字节

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-10-27 10:51

浏览 621

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值