最近,Oracle与亚马逊AWS风波不断。AWS要弃用Oracle,MySQL要挺大梁。而Oracle 首席技术官兼董事长 Larry Ellison 则公开表达了对自家 MySQL 的嫌弃,他告诉分析师:“要使用 MySQL,就必须放弃 Oracle 的大部分可靠性、安全性和性能,因为我们拥有巨大的技术优势”。 Ellison同时拥有全球第一大主流数据库Oracle和第二大主流数据库MySQL,可谓风光无限,可为了抨击AWS,不惜贬低自家MySQL,只能说MySQL实在是太成功了。我们不妨一同回顾一下大名鼎鼎的MySQL的传奇吧。
1. MySQL简史
2. MySQL的主要特点
MySQL采用C和C++编写,开源多线程,是完整的关系数据库管理系统(RDBMS),主要特点如下。
3. MySQL系统架构
Mysql由SQL接口,解析器,优化器,缓存,存储引擎组成,系统架构图如下。
4. 主流的数据库存储引擎简介
MyISAM是MySQL 5.5版之前的默认数据库引擎,虽然性能极佳,但却有一个缺点:不支持事务处理。随着另一种数据库引擎InnoDB的导入,MyISAM被逐渐取代。
InnoDB是MySQL目前最流行的数据库引擎,与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务功能。
TokuDB是一种采用压缩算法的存储引擎,大量测试表明,数据表从 InnoDB 存储引擎转到 TokuDB 存储引擎后,数据量可以减少 80% 到 90%,即 1T 的数据量能压缩到 200G以下。除了数据压缩外,TokuDB 存储引擎还支持事务和在线 DDL 操作,可以很好兼容 MyISAM 或 InnoDB 存储引擎上的应用。缺点是无法支持外键 Foreign Key,不适用于频繁大量读取的场景。
5. Mysql存储极限
最大文件:参考MyISAM存储引擎的技术文档,该引擎可以支持最大256TB的文件(63位文件长度)。
最大行数:虽然理论上单表中可支持 (2^32)^2,约1.844E+19行记录,但实际行数上限还受myisam_data_pointer_size参数限制,64位的mysql通常是6,即48位,行数是2^48 - 1。
极限测试:有用户用mysql存储了 20万张表,50亿行记录,但不知道执行效率咋样。
《高可用架构》一书中提到了“单表60亿记录”的极端case,使用TokuDB替换InnoDB引擎后,单表容量从1.2TB压缩到了80GB,值得参考。
6. 结束语
MySQL转入Oracle后,Oracle投入大量人力物力对代码进行了重构和优化,实质提高了MySQL的性能和稳定性,而且功能越来越丰富,前景并不像某些媒体担忧的那样悲观。后续文章,笔者将聚焦MySQL在云计算中的青春活力,敬请关注。