mysql教程:如何写MySQL存储引擎
来源:互联网 发布:淘宝有版权被投诉 编辑:程序博客网 时间:2024/05/30 05:28
在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的代码来改
- mysql教程:如何写MySQL存储引擎
- 如何写MySQL存储引擎
- 如何写mysql存储引擎
- 如何选择MySQL存储引擎
- 教程精选:MySQL数据库存储引擎详解
- mysql 如何写存储过程
- 【MySQL】MySQL存储引擎
- 【MySQL】MySQL存储引擎
- 如何选择合适的mysql存储引擎
- 如何查看MySQL的当前存储引擎?
- 如何选择合适的MySQL存储引擎
- 如何选择合适的MySQL存储引擎
- 如何选择合适的MySQL存储引擎
- 如何选择合适的MySQL存储引擎
- 如何选择合适的MySQL存储引擎
- 如何查看mysql支持的存储引擎
- 如何选择合适的MySQL存储引擎
- 如何选择合适的MySQL存储引擎
- 不舍红尘,只因恋上你
- 论文的阅读
- ibatis配置详解
- JAVA整型数组排序算法以及改进算法
- C#线程系列讲座(3):线程池和文件下载服务器
- mysql教程:如何写MySQL存储引擎
- “技术”活儿
- 监控 SQL Server 的运行状况
- 制作带文本的按钮
- C++ new 的理解
- 如何使用flex皮肤
- 如何给别人介绍一个你做过的项目
- csdn的程序人生正式开始!
- UrlRewriter技术简单运用