专业的信息化与通信融合产品选型平台及垂直门户
注册 登陆 设为首页 加入收藏
首页 企业新闻 招标信息 行业应用 厂商专区 活动 商城 中标信息

资讯
中心

新闻中心 人物观点
厂商专区 市场分析
行业
应用
政府机构 能源产业 金融机构
教育科研 医疗卫生 交通运输
应用
分类
统一协作 呼叫客服 IP语音 视频会议 智能管理 数据库
数字监控 信息安全 IP储存 移动应用 云计算 物联网

TOP

MySQL存储引擎及其面向的数据库应用
2012-07-12 13:27:05 来源:IT168 作者:【
关键词:MySQL 存储 数据库
 
由于工作的需要笔者有很长一段时间需要与开发人员进行沟通,并在必要时展开相关的培训工作。在这个过程中,笔者发现大多数开发人员不知道MySQL的存储引擎概念,这可能和他们以往开发的数据库应用如Microsoft SQL Server、Oracle、DB2等有关。

  由于工作的需要笔者有很长一段时间需要与开发人员进行沟通,并在必要时展开相关的培训工作。在这个过程中,笔者发现大多数开发人员不知道MySQL的存储引擎概念,这可能和他们以往开发的数据库应用如Microsoft SQL Server、Oracle、DB2等有关。而在MySQL数据库中,存储引擎的概念显得尤为重要,每个存储引擎可能面向一种特定或者最优的数据库应用环境。

  图1-1显示了MySQL数据库的体系结构,可见MySQL数据库由以下几部分组成:

  ·连接池组件(Connection Pool)。

  ·管理服务和工具组件(Management Services &Utilities)。

  ·SQL接口组件(SQL Interface)。

  ·查询分析器组件(Parser)。

  ·优化器组件(Optimizer)。

  ·缓冲组件(Caches & Buffers)。

  ·插件式存储引擎(Pluggable Storage Engines)。

  ·物理文件(File system)。

图 1-1MySQL数据库的体系结构

  SQL解析器、SQL优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每个数据库都有这么多存储引擎。MySQL的插件式存储引擎可以让存储引擎层的开发人员设计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这么强的要求;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据的查询。下面将介绍MySQL数据库中一些常用的存储引擎及它们面向的数据库应用。

  InnoDB存储引擎:

  支持事务,其设计目标主要面向联机事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似Oracle的非锁定读,即默认读取操作不会产生锁。从MySQL 5.5.8版本开始是默认的存储引擎。

  InnoDB存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由InnoDB存储引擎自身来管理。从MySQL 4.1(包括4.1)版本开始,可以将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。此外,InnoDB存储引擎支持将裸设备(row disk)用于建立其表空间。

  InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认为REPEATABLE级别,同时使用一种称为netx-key locking的策略来避免幻读(phantom)现象的产生。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。

  对于表中数据的存储,InnoDB存储引擎采用了聚集(clustered)的方式,每张表都是按主键的顺序进行存储的,如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。

  InnoDB存储引擎是MySQL数据库最为常用的一种引擎,Facebook、Google、Yahoo等公司的成功应用已经证明了InnoDB存储引擎具备高可用性、高性能以及高可扩展性。对其底层实现的掌握和理解也需要时间和技术的积累。如果想深入了解InnoDB存储引擎的工作原理、实现和应用,可以参考《MySQL技术内幕:InnoDB存储引擎》一书。

  MyISAM存储引擎:

  不支持事务、表锁设计、支持全文索引,主要面向一些OLAP数据库应用,在MySQL 5.5.8版本之前是默认的存储引擎(除Windows版本外)。数据库系统与文件系统一个很大的不同在于对事务的支持, MyISAM存储引擎是不支持事务的。究其根本,这也并不难理解。用户在所有的应用中是否都需要事务呢?在数据仓库中,如果没有ETL这些操作,只是简单地通过报表查询还需要事务的支持吗?此外,MyISAM存储引擎的另一个与众不同的地方是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,这与大多数的数据库都不相同。

  NDB存储引擎:

  2003年,MySQL AB公司从Sony Ericsson公司收购了NDB 存储引擎。NDB存储引擎是一个集群存储引擎,类似于Oracle的RAC集群,不过与Oracle RAC的 share everything结构不同的是,其结构是share nothing的集群架构,因此能提供更高级别的高可用性。NDB存储引擎的特点是数据全部放在内存中(从5.1版本开始,可以将非索引数据放在磁盘上),因此主键查找(primary key lookups)的速度极快,并且能够在线添加NDB数据存储节点(data node)以便线性地提高数据库性能。由此可见,NDB存储引擎是高可用、高性能、高可扩展性的数据库集群系统,其面向的也是OLTP的数据库应用类型。

  Memory存储引擎:

  正如其名,Memory存储引擎中的数据都存放在内存中,数据库重启或发生崩溃,表中的数据都将消失。它非常适合于存储OLTP数据库应用中临时数据的临时表,也可以作为OLAP数据库应用中数据仓库的维度表。Memory存储引擎默认使用哈希索引,而不是通常熟悉的B+树索引。

  Infobright存储引擎:

  第三方的存储引擎。其特点是存储是按照列而非行的,因此非常适合OLAP的数据库应用。其官方网站是http://www.infobright.org/,上面有不少成功的数据仓库案例可供分析。

  NTSE存储引擎:

  网易公司开发的面向其内部使用的存储引擎。目前的版本不支持事务,但提供压缩、行级缓存等特性,不久的将来会实现面向内存的事务支持。

  MySQL数据库还有很多其他存储引擎,上述只是列举了最为常用的一些引擎。如果你喜欢,完全可以编写专属于自己的引擎,这就是开源赋予我们的能力,也是开源的魅力所在。

      

责任编辑:admin
免责声明:以上内容转载互联网平台或企业单位自行提供,对内容的真实性、准确性和合法性不负责,Voipchina网对此不承担任何法律责任。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部

上一篇BYOD和云存储:Dropbox的成功
下一篇硬盘厂商寻出路:投资社交媒体云..

热门文章

图片主题

最新文章

相关文章

广告位

Copyright@2003-2009 网络通信中国(原VoIP中国) 版权所有
联系方式:503927495@qq.com
  京ICP备05067673号-1 京公网安1101111101259