谷歌、脸书、魔兽世界都在用!InnoDB是什么?有哪些关键特性?

导读:InnoDB是事务安全的MySQL存储引擎,设计上采用了类似于Oracle数据库的架构 。通常来说,InnoDB存储引擎是OLTP应用中核心表的首选存储引擎 。同时,也正是因为InnoDB的存在,才使MySQL数据库变得更有魅力 。
本文将简要介绍InnoDB存储引擎的体系架构及其不同于其他存储引擎的特性 。
作者:姜承尧
来源:华章科技
谷歌、脸书、魔兽世界都在用!InnoDB是什么?有哪些关键特性?

文章插图
 
01 InnoDB存储引擎概述【谷歌、脸书、魔兽世界都在用!InnoDB是什么?有哪些关键特性?】InnoDB存储引擎最早由Innobase Oy公司开发,被包括在MySQL数据库所有的二进制发行版本中,从MySQL 5.5版本开始是默认的表存储引擎(之前的版本InnoDB存储引擎仅在windows下为默认的存储引擎) 。
该存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发),其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU 。
Heikki Tuuri是InnoDB存储引擎的创始人,和著名的linux创始人Linus是芬兰赫尔辛基大学校友 。在1990年获得赫尔辛基大学的数学逻辑博士学位后,他于1995年成立Innobase Oy公司并担任CEO 。
同时,在InnoDB存储引擎的开发团队中,有来自中国科技大学的Calvin Sun 。随后又有一个中国人Jimmy Yang也加入了InnoDB存储引擎的核心开发团队,负责全文索引的开发,其之前任职于Sybase数据库公司,负责数据库的相关开发工作 。
InnoDB存储引擎已经被许多大型网站使用,如用户熟知的google、Yahoo!、Facebook、YouTube、Flickr,在网络游戏领域有《魔兽世界》《Second Life》《神兵玄奇》等 。我不是MySQL数据库的布道者,也不是InnoDB的鼓吹者,但是我认为当前实施一个新的OLTP项目不使用MySQL InnoDB存储引擎将是多么的愚蠢 。
从MySQL数据库的官方手册可得知,著名的Internet新闻站点Slashdot.org运行在InnoDB上 。Mytrix、Inc.在InnoDB上存储超过1TB的数据,还有一些其他站点在InnoDB上处理插入/更新操作的速度平均为800次/秒 。这些都证明了InnoDB是一个高性能、高可用、高可扩展的存储引擎 。
InnoDB存储引擎同MySQL数据库一样,在GNU GPL 2下发行 。更多有关MySQL证书的信息,这里不再详细介绍,可参考:
http://www.mysql.com/about/legal/
谷歌、脸书、魔兽世界都在用!InnoDB是什么?有哪些关键特性?

文章插图
 
02 InnoDB存储引擎的版本InnoDB存储引擎被包含于所有MySQL数据库的二进制发行版本中 。早期其版本随着MySQL数据库的更新而更新 。从MySQL 5.1版本时,MySQL数据库允许存储引擎开发商以动态方式加载引擎,这样存储引擎的更新可以不受MySQL数据库版本的限制 。
所以在MySQL 5.1中,可以支持两个版本的InnoDB,一个是静态编译的InnoDB版本,可将其视为老版本的InnoDB;另一个是动态加载的InnoDB版本,官方称为InnoDB Plugin,可将其视为InnoDB 1.0.x版本 。
MySQL 5.5版本中又将InnoDB的版本升级到了1.1.x 。而在MySQL 5.6版本中InnoDB的版本也随着升级为1.2.x版本 。
以下是InnoDB各版本功能对比 。
  • 老版本InnoDB:支持ACID、行锁设计、MVCC
  • InnoDB 1.0.x:继承了上述版本所有功能,增加了compress和dynamic页格式
  • InnoDB 1.1.x:继承了上述版本所有功能,增加了Linux AIO、多回滚段
  • InnoDB 1.2.x:继承了上述版本所有功能,增加了全文索引支持、在线索引添加
在现实工作中我发现很多MySQL数据库还是停留在MySQL 5.1版本,并使用InnoDB Plugin 。很多DBA错误地认为InnoDB Plugin和InnoDB 1.1版本之间是没有区别的 。但从功能对比中还是可以发现,虽然都增加了对于compress和dynamic页的支持,但是InnoDB Plugin是不支持Linux Native AIO功能的 。
此外,由于不支持多回滚段,InnoDB Plugin支持的最大支持并发事务数量也被限制在1023 。而且随着MySQL 5.5版本的发布,InnoDB Plugin也变成了一个历史产品 。
03 InnoDB体系架构图2-1简单显示了InnoDB的存储引擎的体系架构,从图可见,InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作:
  • 维护所有进程/线程需要访问的多个内部数据结构 。
  • 缓存磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存 。
  • 重做日志(redo log)缓冲 。
……
谷歌、脸书、魔兽世界都在用!InnoDB是什么?有哪些关键特性?


推荐阅读