如何达成MYSQL和INNODB分层
发布时间:2021-12-20 11:15:00 所属栏目:通讯 来源:互联网
导读:如何实现MYSQL和INNODB分层,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 open table 的时候 当初次open table的时候会生成一个table_shared结构体 这个结构体记录 很多
如何实现MYSQL和INNODB分层,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 open table 的时候 当初次open table的时候会生成一个table_shared结构体 这个结构体记录 很多来自frm 的信息,基本就是表的定义,我们叫他为静态缓存 换句话说这个东西整个mysql 一个 接口为get_table_share 然后会每个连接线程会打开这个表的时候会根据table_shared出来的信息建立一个table结构体 这个结构体是动态的,每个会话都会建立一个,他会将实际的信息传递到innodb 层次, 最后打开innodb 的表,当然这个动态的table结构体会在table shared中有链表用来连接。 接口为open_table_from_share 请自行参考运维内参第四章,这里简单提了一下 这里主要说多态是怎么发生的。 多态成立3个条件 1、虚函数重写 2、继承 3、父类指针指向之类对象 1、 MYSQL层次和INNODB交互多态核心对象: handler handler是基类,这个基类是在MYSQL层次的位于Handler.h中 ha_innobase: public handler 这个是继承类来自于MYSQL的handler基类,他位于innodb层,在Ha_innodb.h中 这里完成条件 2、继承这里以open为例 在handler类中有一个函数 handler::ha_open,他里面调用了方法open比如 if ((error=open(name,mode,test_if_locked))) 那么这里我们看看open在MYSQL层次中的定义为 virtual int open(const char *name, int mode, uint test_if_locked)=0; 可以看到他是纯虚函数 我们在看看Ha_innodb.cc中有这样的函数实现 int ha_innobase::open( /*==============*/ const char* name, /*!< in: table name */ int mode, /*!< in: not used */ uint test_if_locked) /*!< in: not used */ ) 这里完成了虚函数从写,也就完成了条件1 3、 在TABLE类中有这样一个句柄 handler *file; 在open_table_from_share会执行 outparam->file= get_new_handler(share, &outparam->mem_root,share->db_type()))) //db_type 引擎类型 db_plugin /* storage engine plugin */ ![]() 在open_table_from_share的最后会实际的打开表 if ((ha_err= (outparam->file-> ha_open(outparam, share->normalized_path.str, (db_stat & HA_READ_ONLY ? O_RDONLY : O_RDWR), (db_stat & HA_OPEN_TEMPORARY ? HA_OPEN_TMP_TABLE : (db_stat & HA_WAIT_IF_LOCKED) ? HA_OPEN_WAIT_IF_LOCKED : (db_stat & (HA_ABORT_IF_LOCKED | HA_GET_INFO)) ? HA_OPEN_ABORT_IF_LOCKED : HA_OPEN_IGNORE_IF_LOCKED) | ha_open_flags)))) 我们主要关注下这里的多态 我们知道ha_open实际会调用open,open在innodb层次已经重写,而outparam->file正是这样一个 指针,他指向了innodb层的具体实例,当ha_open中执行 if ((error=open(name,mode,test_if_locked))) 就已经调用了innodb层次的ha_innobase::open,完成了层次的划分,也是模块的划分。其实一切 都是以C/C++多态的基础实现的。 看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。 (编辑:均轻资讯网_我爱站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |