MySQL存储引擎的设计与实现-论文_第1页
MySQL存储引擎的设计与实现-论文_第2页
MySQL存储引擎的设计与实现-论文_第3页
MySQL存储引擎的设计与实现-论文_第4页
MySQL存储引擎的设计与实现-论文_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MySQLMySQL 存储引擎的设计与实现存储引擎的设计与实现摘 要Mysql 数据库是一种常见的数据管理系统,该数据库可以为很多应用软件提供后台的数据服务。Mysql 数据库是开源的免费数据库,为研究者提供了研究该数据库提供了可能。MySQL 的灵活性使之受到很大的欢迎,而作为 MySQL 数据库存储引擎,它的插件式的性能,可以根据需求而应对不同的存储引擎,也更加使 MySQL 方便、灵活。本毕业设计通过对 MySQL 数据库存储引擎的研究了解,从而去分析数据库存储引擎的设计与实现。本文首先介绍了 Mysql 存储引擎的基本概述,解析存储引擎的结构,介绍经典的两种存储引擎。最后通过自定义的数

2、据库引擎去实现数据库中的一些基本功能。关键词:关键词:MYSQL;MYSQL;数据库数据库; ;存储引擎存储引擎目 录1、背景介绍 .32、MYSQL 的存储引擎.42.1 存储引擎的概述.42.2 常用的两种存储引擎.42.2.1 MyISAM 存储引擎 .42.2.2 InnoDB 存储引擎 .42.2.3 MyISAM 存储引擎与 InnoDB 存储引擎的区别 .52.3 存储引擎的基本操作.63、存储引擎的设计 .74、总结 .9参考文献 .10致谢 .111、背景介绍MySQL 数据库是数据库系统中最受欢迎的系统。MySQL 是一种关系数据库管理系统,关系数据库将数据保存在不同的表中

3、,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性【1】。它是开放源代码的数据库系统,所以任何用户都可以根据自己的要求来修改,正因为这种开放性、灵活性和适用程度,使得 MySQL数据库备受关注。而作为插件式存储引擎的 MySQL 引擎之一,使数据库更加灵活。MySQL 可以根据不同的需求来利用不同的数据库存储引擎技术来存储数【8】。MySQL 有多种存储引擎,每种存储引擎都有着自己的特点与优势,其中包括:MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。正因为可以多层选择,其灵活

4、性用来存储和检索数据,受到了用户的欢迎。2、MySQL 的存储引擎2.1 存储引擎的概述 MySQL 在存储数据时是通过不同的要求而使用不同的存储方法存储在文件中。在众多的存储方法中,都有着各自的不同的功能。每一种存储方法都能行使自己的索引、锁定和存储功能。通过选择各种各样的方法,能够加强你系统的速度,从而改善系统的整体性能。这些不同的方法性能和它们自身的特色功能就称为 mysql 的存储引擎。MySQL 有许多不同的存储引擎,每种存储引擎都有自己各自的性能和优势。用户也可以通过在数据库中设置来选择自己要求下合适的存储引擎。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的

5、信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性【5】。其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。遗憾的是,其它类型的数据库解决方案采取的“一个尺码满足一切需求”的方式意味着你要么就牺牲一些性能,要么你就用几个小时甚至几天的时间详细调整你的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就可以了。【5】2.2 常用的两种存储引擎2.2.1 MyISAM 存储引擎MyISAM 存储引擎中物理文件构成:(1)任何存储引擎都不可或缺的存放表结构定义的.frm 文件(2)存放表数据的.MYD 文件(My Data):分为静态固定长度、动态

6、可变长度、压缩三种格式。表数据是默认不压缩的,在创建表时,可以通过 ROW_FORMAT 设置默认为压缩COMPRESSED|DEFAULT,也可以通过 MyISAMpack 工具进行压缩。(3)存放索引数据的.MYI 文件(My Index)MyISAM 存储引擎为了保证效率,不支持事务处理,所以对事务有要求的业务场景不能使用;支持的引索类型是:BTree 索引 R-Tree 索引 Full-Text(其中最常见的BTree 索引);索引为表级索引,这样能使锁定的实现成本降低;在增删改查的性能上,其中 SELECT 性能较高,所以适合执行查询的时候较多使用此引擎;关于 COUNT(*)问题:

7、MyISAM 存储引擎记录表行数,所以在使用 COUNT(*)时,只需取出存储的行数,而不用遍历表,效率较高。2.2.2 InnoDB 存储引擎InnoDB 存储引擎的物理文件构成:(1)同 MyISAM 一样的是,InnoDB 存储引擎也有.frm 文件存储表结构定义(2)与 MyISAM 的差别是,InnoDB 的表数据与索引数据是存储在一起的,但在这个文件中每张表是独自占有一块表空间还是共享所有表空间,是由用户决定的。(3)InnoDB 的日志文件,支持事务及安全。InnoDB 可以通过日志文件将数据库崩溃时已经完成但还没来得及将内存中已经修改但未完全写入磁盘的数据写入磁盘,也可以把已部

8、分完成并写入磁盘的未完成事务回滚,保证数据一致性。加入失误删除日志文件会导致数据库崩溃且无法启动。 InnoDB 存储引擎具有良好的事务支持;全表扫描仍然会是表锁,注意间隙锁的影响读写阻塞与事务隔离级别相关,具有非常高效的缓存特性,能缓存索引,也能缓存数据;在增删改查的性能上,InnoDB 主要推行增删改的性能,而且他在删除时,是对行删除,不会使表全部删除从而重建表;关于 COUNT(*)问题:InnoDB 存储引擎会遍历表以计算数量,效率较低。2.2.3 MyISAM 存储引擎与 InnoDB 存储引擎的区别 表 2.1 MyISAM 存储引擎与 InnoDB 存储引擎优缺点表 具体实现的差

9、别: InnoDB 不支持 FULLTEXT 类型的索引;InnoDB 中不保存表的具体行数,也就是说,执行 select count(*) from table 时,InnoDB 要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可,注意的是,当 count(*)语句包含 where条件时,两种表的操作是一样的;对于 AUTO_INCREMENT 类型的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中,可以和其他字段一起建立联合索引;DELETE FROM table 时,InnoDB 不会重新建立表,而是一行一行的删除;LOAD 功能

10、MYISAMINNODB事务处理不支持支持数据行锁定不支持支持外键约束不支持支持表空间占用较小较大全文索引支持不支持查询速度快较快TABLE FROM MASTER 操作对 InnoDB 是不起作用的,解决方法是首先把 InnoDB 表改成 MyISAM 表,导入数据后再改成 InnoDB 表,但是对于使用的额外的 InnoDB 特性(例如外键)的表不适用。2.3 存储引擎的基本操作 选择存储引擎的标准:(1) 能不能支持事务;(2) 需不需要使用热备;(3) 奔溃能不能修复;(4) 能不能支持外键;可以根据以上标准来选择自己需要的存储引擎。查看数据库服务器中能支持的存储引擎代码:show e

11、ngines;创建表示指定使用一个存储引擎的代码;create table if not exists tb_staff(d int(11) default null auto_increment,name varchar(100) default ,primary key(id)engine=myisam;查看表的存储类型代码:(1)show create table tablename (2)show table status from dbname where name=tablename (3)mysqlshow -u user -p password -status dbname t

12、ablename3、存储引擎的设计设计自定义的存储引擎,首先得创建源文件并添加到管理文件当中,编译之后实现存储引擎的初始化;然后并对其存储引擎能够实现数据的创建、删除、打开、关闭的数据文件的一些基本功能,修改其头文件于编译来实现;最后是添加引索功能。但由于本人的操作知识有限,不能实践其设计。本存储引擎只能实现其数据操作的一些基本功能,还有一些问题并不能解决,所以可以从以下的问题方面得以改进:对引擎代码进行更进一步的调试与改进;添加事务支持;添加自定义引擎需要编译,希望以后能够改进,从而使得自定义存储引擎能随意插件式地存储引擎。添加一个名为 ABC 的存储引擎(基于 mysql 的 exampl

13、e 存储引擎),能实现基本操作,其修改文件如下:flashdbcom src$ grep -i -s -n -r have_abc_db . ./client/mysql_priv.h:45:#ifndef HAVE_ABC_DB ./client/mysql_priv.h:46:#define HAVE_ABC_DB ./client/mysql_priv.h:1398:#ifdef HAVE_ABC_DB ./client/mysql_priv.h:1400:#define have_abc_db abc_hton.state ./client/mysql_priv.h:1402:exte

14、rn SHOW_COMP_OPTION have_abc_db; ./sql/handler.cc:33:#ifdef HAVE_ABC_DB ./sql/handler.cc:320:#ifdef HAVE_ABC_DB ./sql/handler.cc:322: if (have_abc_db = SHOW_OPTION_YES) ./sql/mysqld.cc:6677:#if defined(HAVE_ABC_DB) ./sql/mysqld.cc:6678: have_abc_db= SHOW_OPTION_YES; ./sql/mysqld.cc:6680: have_abc_db

15、= SHOW_OPTION_NO; ./sql/mysqld.cc:7789:#undef have_abc_db ./sql/mysqld.cc:7800:SHOW_COMP_OPTION have_abc_db= SHOW_OPTION_NO; ./sql/ha_abc.cc:71:#ifdef HAVE_ABC_DB ./sql/ha_abc.cc:706:#endif /* HAVE_ABC_DB */ ./sql/mysql_priv.h:45:#ifndef HAVE_ABC_DB ./sql/mysql_priv.h:46:#define HAVE_ABC_DB ./sql/my

16、sql_priv.h:1398:#ifdef HAVE_ABC_DB ./sql/mysql_priv.h:1400:#define have_abc_db abc_hton.state ./sql/mysql_priv.h:1402:extern SHOW_COMP_OPTION have_abc_db;4、总结本毕业设计通过介绍存储引擎的基本概述,使其更加了解存储引擎的作用与其存着的意义,并分析主要使用的存储引擎,了解其两种存储引擎:MyISAM 和 InnoDB,从其特点与它们之间的区别来了解各种不同存储引擎的优势,最后简单的描述了自定义存储引擎的设计。MySQL 作为主流的开源数据库产

17、品,在数据库中得以广泛的应用,而 MySQL 的存储引擎作为可选择的插件式的特点,可以通过不同的需求来采用不同的的数据库存储引擎技术【10】。真因为这个特点,MySQL 也得以越来越受欢迎,而本文通过对MySQL 数据库与其存储引擎的介绍,希望更多用户了解和针对其问题来改进存储引擎,使其更加强大。参考文献1李栋梁. 潍坊市防震减灾信息化管理系统的设计与实现D. 山东大学, 2013.2黄帅. 流媒体服务器在视频数据传输中的应用研究D. 青岛科技大学, 2015.3谢国印. 烟草行业客户关系管理系统的设计与实现D. 厦门大学, 2014.4欧阳林. 教学资源库系统的设计与开发J. 电子制作, 2

18、014(1):189-191.5肖宏. 基于海量数据的存储与实时事件发现系统的设计与实现D. 北京邮电大学, 2011.6王威. MySQL 数据库源代码分析及存储引擎的设计D. 南京邮电大学, 2012.7吴沧舟兰逸正张辉. 基于 MySQL 数据库的优化J. 电子科技, 2013(9):188-190.8胡雯李燕. MySQL 数据库存储引擎探析J. 软件导刊, 2012(12):131-133.9郑焕时. 基于 NetFlow 的互联网流量分析系统的设计与实现D. 哈尔滨工业大学, 2015.10翁捷. 曲库信息管理系统的设计与实现D. 北京交通大学, 2015. 致谢经过几个月的努力,我顺利的完成了我的毕业设计。通过这几个月的毕业设计编写,是对我几年所学知识的很好总结,是过去所学知识的综合运用,是对理论进行深化和重新认识的时间活动。本毕业设计结合自己所学的知识,完成了本毕业设计,虽然写这篇毕业毕业设计的过程中,遇到了许多的问题,不过在指导老师的精心指导下,一层一层的把问题解决。这得感谢指导老师给我耐心讲解,同时查看书籍,让我在短时间内能够把这些知识吃透。从中我们也可以知道,在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论