MySQL存储引擎的设计与实现_第1页
MySQL存储引擎的设计与实现_第2页
MySQL存储引擎的设计与实现_第3页
免费预览已结束,剩余7页可下载查看

下载本文档

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

文档简介

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

2、存储引擎1、背景介绍32、MYSQ的存储引擎42.1存储引擎的概述42.2常用的两种存储引擎4MylSAM存储引擎4InnoDB存储引擎4MylSAM存储引擎与InnoDB存储引擎的区别52.3存储引擎的基本操作63、存储引擎的设计74、总结8参考文献9致谢101、背景介绍MySQL数据库是数据库系统中最受欢迎的系统。MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。它是开放源代码的数据库系统,所以任何用户都可以根据自己的要求来修改,正因为这种开放性、灵活性和适用程度,使得MySQL数据库备受关注。而作为插件

3、式存储引擎的MySQL引擎之一,使数据库更加灵活。MySQL可以根据不同的需求来利用不同的数据库存储引擎技术来存储数181°MySQL有多种存储引擎,每种存储引擎都有着自己的特点与优势,其中包括:MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。正因为可以多层选择,其灵活性用来存储和检索数据,受到了用户的欢迎。2、MySQLB存储引擎2.1存储引擎的概述MySQL在存储数据时是通过不同的要求而使用不同的存储方法存储在文件中。在众多的存储方法中,都有着各自的不同的功能。每一种存储方法都能

4、行使自己的索引、锁定和存储功能。通过选择各种各样的方法,能够加强你系统的速度,从而改善系统的整体性能。这些不同的方法性能和它们自身的特色功能就称为mysql的存储引擎。MySQL有许多不同的存储引擎,每种存储引擎都有自己各自的性能和优势。用户也可以通过在数据库中设置来选择自己要求下合适的存储引擎。你可以选择适用丁服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。2.2.1 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。遗憾的是,其它类型的数据库解决方案采取的“一个尺码满足一切需求”的方式意

5、味着你要么就牺牲一些性能,要么你就用几个小时甚至几天的时间详细调整你的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就可以了。2.2常用的两种存储引擎MylSAM存储引擎MylSAM存储引擎中物理文件构成:(1) 任何存储引擎都不可或缺的存放表结构定义的.frm文件存放表数据的.MYD文件(MyData):分为静态固定长度、动态可变长度、压缩三种格式。表数据是默认不压缩的,在创建表时,可以通过ROW_FORMAT设置默认为压缩COMPRESSED|DEFAULT,也可以通过MyISAMpack工具进行压缩。(2) 存放索引数据的.MYI文件(MyIndex)MyISAM存储引擎为了保

6、证效率,不支持事务处理,所以对事务有要求的业务场景不能使用;支持的引索类型是:BTree索引R-Tree索引Full-Text(其中最常见的BTree索弓I);索引为表级索引,这样能使锁定的实现成本降低;在增删改查的性能上,其中SELECT性能较高,所以适合执行查询的时候较多使用此引擎;关丁COUNT(*)问题:MyISAM存储引擎记录表行数,所以在使用COUNT(*)时,只需取出存储的行数,而不用遍历表,效率较高。2.2.2 InnoDB存储引擎InnoDB存储引擎的物理文件构成:(1) 同MyISAM一样的是,InnoDB存储引擎也有.frm文件存储表结构定义(2) 与MyISAM的差别是

7、,InnoDB的表数据与索引数据是存储在一起的,但在这个文件中每张表是独自占有一块表空间还是共享所有表空间,是由用户决定的。InnoDB的日志文件,支持事务及安全。InnoDB可以通过日志文件将数据库崩溃时已经完成但还没来得及将内存中已经修改但未完全写入磁盘的数据写入磁盘,也可以把已部分完成并写入磁盘的未完成事务回滚,保证数据一致性。加入失误删除日志文件会导致数据库崩溃且无法启动。InnoDB存储引擎具有良好的事务支持;全表扫描仍然会是表锁,注意间隙锁的影响读写阻塞与事务隔离级别相关,具有非常高效的缓存特性,能缓存索引,也能缓存数据;在增删改查的性能上,InnoDB主要推行增删改的性能,而且他

8、在删除时,是对行删除,不会使表全部删除从而重建表;关丁COUNT(*)问题:InnoDB存储引擎会遍历表以计算数量,效率较低。2.2.3 MylSAM存储引擎与InnoDB存储引擎的区别表2.1MyISAM存储引擎与InnoDB存储引擎优缺点表功能MYISAMINNODB事务处理不支持支持数据行锁定不支持支持外键约束不支持支持表空间占用较小较大全文索引支持不支持查询速度快较快具体实现的差别:InnoDB不支持FULLTEXT类型的索引;InnoDB中不保存表的具体行数,也就是说,执行selectcount(*)fromtable时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只

9、要简单的读出保存好的行数即可,注意的是,当count(*)语句包含where条件时,两种表的操作是一样的;对丁AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引;DELETEFROMtable时,InnoDB不会重新建立表,而是一行一行的删除;LOADTABLEFROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MylSAM表,导入数据后再改成InnoDB表,但是对丁使用的额外的InnoDB特性(例如外键)的表不适用。2.3存储引擎的基本操作选择存储引擎的标准:(1) 能不能支

10、持事务;(2) 需不需要使用热备;(3) 奔波能不能修复;能不能支持外键;可以根据以上标准来选择自己需要的存储引擎。查看数据库服务器中能支持的存储引擎代码:showengines;创建表示指定使用一个存储引擎的代码;createtableifnotexiststb_staff(dint(11)defaultnullauto_increment,namevarchar(100)default",primarykey(id)engine=myisam;查看表的存储类型代码:(1) showcreatetabletablename(2) showtablestatusfromdbnamew

11、herename=tablename(3) mysqlshow-uuser-ppassword-statusdbnametablename3、存储引擎的设计设计自定义的存储引擎,首先得创建源文件并添加到管理文件当中,编译之后实现存储引擎的初始化;然后并对其存储引擎能够实现数据的创建、删除、打开、关闭的数据文件的一些基本功能,修改其头文件丁编译来实现;最后是添加引索功能。但由丁本人的操作知识有限,不能实践其设计。本存储引擎只能实现其数据操作的一些基本功能,还有一些问题并不能解决,所以可以从以下的问题方面得以改进:对引擎代码进行更进一步的调试与改进;添加事务支持;添加自定义引擎需要编译,希望以后能

12、够改进,从而使得自定义存储引擎能随意插件式地存储引擎。添加一个名为ABC的存储引擎(基丁mysql的example存储引擎),能实现基本操作,其修改文件如下:flashdbcomsrc$grep-i-s-n-rhave_abc_db./client/mysql_priv.h:45:#ifndefHAVE_ABC_DB./client/mysql_priv.h:46:#defineHAVE_ABC_DB./client/mysql_priv.h:1398:#ifdefHAVE_ABC_DB./client/mysql_priv.h:1400:#definehave_abc_dbabc_hton.

13、state./client/mysql_priv.h:1402:externSHOW_COMP_OPTIONhave_abc_db;./sql/handler.cc:33:#ifdefHAVE_ABC_DB./sql/handler.cc:320:#ifdefHAVE_ABC_DB./sql/handler.cc:322:if(have_abc_db=SHOW_OPTION_YES)./sql/mysqld.cc:6677:#ifdefined(HAVE_ABC_DB)./sql/mysqld.cc:6678:have_abc_db=SHOW_OPTION_YES;./sql/mysqld.c

14、c:6680:have_abc_db=SHOW_OPTION_NO;./sql/mysqld.cc:7789:#undefhave_abc_db./sql/mysqld.cc:7800:SHOW_COMP_OPTIONhave_abc_db=SHOW_OPTION_NO;./sql/ha_abc.cc:71:#ifdefHAVE_ABC_DB./sql/ha_abc.cc:706:#endif/*HAVE_ABC_DB*/./sql/mysql_priv.h:45:#ifndefHAVE_ABC_DB./sql/mysql_priv.h:46:#defineHAVE_ABC_DB./sql/m

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

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

17、.基于海量数据的存储与实时事件发现系统的设计与实现D.北京邮电大学,2011.6 王威.MySQL数据库源代码分析及存储引擎的设计D.南京邮电大学,2012.7 吴沧舟兰逸正张辉.基于MySQ微据库的优化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

提交评论