设为首页 收藏本站
查看: 644|回复: 0

[经验分享] 深入理解mysql之BDB系列(2)---数据元页结构(摘自老杨)

[复制链接]

尚未签到

发表于 2016-10-24 09:03:00 | 显示全部楼层 |阅读模式
三:数据元页结构
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_tuid[DB_FILE_ID_LEN]; //所属文件ID
} DBMETA33, DBMETA; //该结构大小为72字节


3.2 BTREE的metapage
3.2.1结构图
http://p.blog.csdn.net/images/p_blog_csdn_net/whyangwanfu/bdb2_1.bmp





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_FIXEDLEN0x008 /* 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结构图
http://p.blog.csdn.net/images/p_blog_csdn_net/whyangwanfu/bdb2_2.bmp
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结构图
http://p.blog.csdn.net/images/p_blog_csdn_net/whyangwanfu/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个字节

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-290502-1-1.html 上篇帖子: 深入理解mysql之BDB系列(3)---数据页结构(摘自老杨) 下篇帖子: 深入理解mysql之BDB系列(1)---BDB相关基础知识(摘自老杨)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表