如何写MySQL存储引擎

4248296

4248296

2016-02-19 18:04

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

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

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

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

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

struct st_mysql_storage_engine foo_storage_engine=
{ MYSQL_HANDLERTON_INTERFACE_VERSION };


  然后需要用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的代码来改。

展开更多 50%)
分享

猜你喜欢

如何写MySQL存储引擎

编程语言 网络编程
如何写MySQL存储引擎

如何选择合适的MySQL存储引擎

编程语言 网络编程
如何选择合适的MySQL存储引擎

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何写注释

编程语言 网络编程
如何写注释

MySQL 6和新存储引擎

编程语言 网络编程
MySQL 6和新存储引擎

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL数据库存储引擎详解

编程语言 网络编程
MySQL数据库存储引擎详解

MySQL InnoDB存储引擎的事务隔离级别

编程语言 网络编程
MySQL InnoDB存储引擎的事务隔离级别

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

XHTML教程,简单认识XHTML基础知识

XHTML教程,简单认识XHTML基础知识

实际应用:MySQL5存储过程编写

实际应用:MySQL5存储过程编写
下拉加载更多内容 ↓