Home > Database > Mysql Tutorial > body text

如何写MySQL存储引擎_MySQL

WBOY
Release: 2016-06-01 14:01:07
Original
964 people have browsed it

在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。如下所示:

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的代码来改

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template