深入理解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;                                    //页类型
#define     DBMETA_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_t uid[DB_FILE_ID_LEN];           //所属文件ID
} DBMETA33, DBMETA;     //该结构大小为72字节
 
 
3.2 BTREE的metapage
3.2.1结构图
3.2.2数据结构
 
typedef struct _btmeta33 {
#define     BTM_DUP            0x001     /*     Duplicates. */
#define     BTM_RECNO 0x002     /*     Recno tree. */
#define     BTM_RECNUM     0x004     /*     Btree: maintain record count. */
#define     BTM_FIXEDLEN 0x008     /*     Recno: fixed length records. */
#define     BTM_RENUMBER 0x010     /*     Recno: renumber on insert/delete. */
#define     BTM_SUBDB 0x020     /*     Subdatabases. */
#define     BTM_DUPSORT    0x040     /*     Duplicates are sorted. */
#define     BTM_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 {
#define     DB_HASH_DUP     0x01       /*     Duplicates. */
#define     DB_HASH_SUBDB 0x02       /*     Subdatabases. */
#define     DB_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)
#define     NCACHED     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个字节
 
 
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值