如何写MySQL存储引擎

2016-02-19 18:04 7 1 收藏

今天图老师小编要跟大家分享如何写MySQL存储引擎,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

  在MySQL 5.1中开发一个存储引擎已经是比较方便了。所谓存储引擎实际上是按照MySQL的约定,提供某些接口的实现而已,如MySQL插入一条记录时将调用write_row方法,通过索引检索时将调用index_read和index_next方法等。MySQL与存储引擎之间的接口主要由两个类/结构约定,分别是在sql/handler.h中定义的handlerton结构和handler类。handlerton结构主要是约定事务操作接口,handler类主要约定表、索引及记录操作接口。对不支持事务的存储引擎只需要创建一个handler的派生类,并重载该引擎需要支持的方法。对于需要支持事务的存储引擎,还需要实现handlerton结构中指定的接口。

  实现了存储引擎本身功能后,还需要按一定格式“声明”一下存储引擎的存在。首先需要定义一个类型为st_mysql_storage_engine的变量,其值为MYSQL_HANDLERTON_INTERFACE_VERSION。如下所示:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

struct st_mysql_storage_engine foo_storage_engine=
{ MYSQL_HANDLERTON_INTERFACE_VERSION };

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)


  然后需要用mysql_declare_plugin宏来给出存储引擎的声明,如下所示:

mysql_declare_plugin(foo)          /* foo为存储引擎名称 */
{
 MYSQL_STORAGE_ENGINE_PLUGIN,
 &foo_storage_engine,            /* 这里即为上面定义的st_mysql_storage_engine变量 */
 "FOO",                        /* SHOW ENGINES中显示的存储引擎名称 */
 "Author Here",                  /* 作者名 */
 "Foo storage engine",            /* SHOW ENGINES中显示的存储引擎说明 */
 PLUGIN_LICENSE_GPL,
 init_func,              /* 某函数,将在加载存储引擎时调用 */
 done_func,              /* 某函数,将在卸载存储引擎时调用 */
 0x0001 /* 版本号0.1 */,
 NULL,                     /* status variables */
 NULL,                     /* system variables */
 NULL                     /* config options */
}
mysql_declare_plugin_end;

  照此声明后,在加载存储引擎时MySQL将调用init_func函数,此时会传入一个handlerton变量,存储引擎至少需要设置其中的 state、db_type、create、flags等属性,其中create为一函数指针,将随后被调用。若存储引擎支持事务,则还需要设置 handlerton中事务接口函数指针指向相应的实现函数。

  然后MySQL调用上面设置的create函数,该函数中,存储引擎实现者构建一个该引擎对应的handler派生类实例并返回给 MySQL。至此存储引擎初始化过程完成,存储引擎与MySQL之间的接口也已经确定,此后MySQL即会在相应的时刻调用handlerton结构或 handler类约定的方法。

  MySQL源代码中的storage/example目录给出了很好的示例,该目录实现了一个“最小”的存储引擎EXAMPLE,只是能加载进来玩玩,不能用来存储记录。开发新的存储引擎时,最方便的方法也是拷贝一份example的代码来改。

来源:http://www.tulaoshi.com/n/20160219/1616727.html

延伸阅读
女生蜜蜜如何写心事?   女生蜜蜜是女生们的天地,在女生蜜蜜女生可以随时写下日记,说给蜜蜜们听听,都会有人给你温暖,那么怎么写心事呢?现在小编就教大家女生蜜蜜如何写心事。 1)点击打开点击下方中间的; 2)点击然后点击下方的编辑框输入标题跟内容,最后点击右上角的即可。
在路上如何写旅行贴士   1)打开在路上,点击右下角   2)点击,然后写下你的心得,点击右上角即可           注 :更多精彩教程请关注图老师手机教程栏目,图老师手机数码群:296605639欢迎你的加入
疯点如何写情书给对方?   喜欢TA就跟TA表白,勇敢表达自己的爱,不要说什么配不上什么的,此时此刻幸福就好,也不要怕被拒绝,拒绝是为了让你遇到更好的那个TA。一起来看看疯点如何写情书给对方的吧。 1)打开,进入首页后点击一位,进入到TA的个人主页。 2)用手指往上划,下拉一点,点击的按钮。 3)接着...
InnoDB做为MySQL目前最广泛的事务存储引擎,很多地方的设计和Oracle都是共通的。对于Oracle DBA来说,学习的时候可以多和Oracle的一些特性进行类比,当然也要明白二者之间的区别。 innodb_additional_mem_pool_size 用于缓存InnoDB数据字典及其他内部结构的内存池大小,类似于Oracle的library cache。这不是一个强制参数,可以被...
女生蜜蜜如何写私密日记?   很多小伙伴都知道女生蜜蜜可以写心事,但是知道可以写私密日记即时不公开的日记的不多吧,那么今天小编就教大家女生蜜蜜如何写私密日记。 1)打开女生蜜蜜,点击下方中间的然后点击; 2)点击下方的然后点击即可。

经验教程

313

收藏

78
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部