第1章 理解MySQL
本章将介绍MySQL的一些常识,以及目前MySQL的发展现状。然后简要说明MySQL的基础架构、存储引擎、运行机制,以及工作中应该如何使用MySQL,为后面章节的学习做个铺垫。
1.1 MySQL介绍
1.1.1 应用领域和适用场景
MySQL是目前世界上最流行的开源关系数据库。在国内,MySQL大量应用于互联网行业,比如,大家所熟知的百度、腾讯、阿里、京东、网易、新浪等都在使用MySQL。搜索、社交、电商、游戏后端的核心存储往往都是MySQL,有的具有上千台甚至几千台MySQL数据库主机。可以说,支撑互联网公司日常运转的主要数据库就是MySQL。近年来,随着业务的发展,互联网公司产生了许多成熟的架构和技术,这也促使MySQL不断变得更加成熟和稳健。但MySQL的应用并未局限于互联网应用,许多软件开发商也把MySQL集成到了自己的产品中,这样一来,传统行业的大公司也都可以在企业内部大量使用MySQL存储企业数据了,包括政府信息系统,同样也在大量使用MySQL数据库。
MySQL的定位是通用的数据库,各种类型的应用一般都能利用到MySQL存取数据的优势。业内生产实践也证明,MySQL更适合中小型数据库、OLTP业务,以目前的软硬件产品水平来看,如果单机数据超过几个TB将难以高效利用MySQL。
MySQL可以作为传统的关系型数据库产品使用,也可以当作一个key-value产品来使用,由于它具有优秀的灾难恢复功能,因此相对于目前市场上的一些key-value产品会更有优势。
我们所说的MySQL更适合OLTP业务、中小型数据库,并不是说MySQL仅限于此,数据的存储往往是一个架构问题,如果配合架构,MySQL也是可以存储海量数据的。海量数据没有一个明确的标准,对于MySQL来说,我们可以简单地认为海量数据是指单个实例难以处理的几十亿以上的数据。不过,MySQL对于海量数据的分析就不擅长了,你可能还需要其他产品来协助解决这方面的问题。一般而言,中小型公司最佳的选择仍然是MySQL,毕竟在这类公司里,海量数据并不常见。下面让我们来看看部分知名互联网公司的MySQL主机规模,一些公开资料显示如下。
Facebook 2008年有10 000台服务器,其中包括1800台MySQL服务器,到2013年已经突破了20万台服务器,按40?∶?1计算,MySQL服务器至少也有五千台了。
Twitter 早在2011年就有2000~4000台服务器,绝大部分数据后端的持久化存储都是MySQL服务器。
对于国内的几大互联网公司,如阿里、百度、腾讯,依据公开的信息,它们均有千台以上MySQL服务器的规模。
这些大型互联网公司都注重使用MySQL,而且往往也在内部维护了一个MySQL的分支,同时它们也积极参与到MySQL社区,促使MySQL不断改进。
1.1.2 为什么那么多公司和机构选择使用MySQL
它们选择使用MySQL的主要原因有以下两点。
低成本、高效能。
处于起步阶段的团队、小公司需要一个开放的系统来适应发展的需要。
互联网公司,特别是处于起步阶段的公司,需要一个低成本的系统来构建服务,从而可以把更多的资金用于业务的扩张。LAMP(其中的“M”指的就是MySQL)的组合已被广泛应用——目前世界上的大部分网站使用的都是LAMP(或者LNMP)组合。由于它是免费的,LAMP自然就成了第一选择,一般而言,选择成熟可靠、使用人数广泛的产品,公司的技术风险也会大大降低。同时MySQL是一个开放的系统,源代码开放,社区成熟活跃,在公司发展壮大的过程中,可以不断从外部获取成熟的思想和解决方案。可以说MySQL已经构建了成熟的生态圈,使用它的人往往能得到许多益处,而且相对于目前市场上的其他产品,MySQL也具备许多优势。
一些公司出于节省成本和扩展性的考虑,尝试把某些业务从商业数据库迁移到MySQL上,比如阿里,由于数据库集群的规模巨大,传统的基于小型机和高端的存储架构难以扩展,且支出成本庞大,所以把大部分业务逐步迁移到PC服务器的MySQL集群上,成功地降低了成本。
1.1.3 MySQL的优势是什么,它解决了什么问题
MySQL是一个轻量级的通用关系型数据库,具有稳定、易安装、易使用、高性能等特点,可配合架构进行扩展。它的安装包不大,百MB级别,安装简单方便,入门也很简单,而一些商业化的关系型数据库产品往往安装包庞大,且配置使用复杂,需要开发人员或DBA花费几倍的时间去掌握产品的使用。
MySQL起初也有很多Bug,而且不太稳定,但经过十多年的发展,目前的MySQL(5.0/5.1)已经很稳定了。新的5.5/5.6/5.7也发布了GA版本,正在持续完善中,截至2015年年底,我们可以看到MySQL 5.1/5.5已经大量应用于生产环境了。
此外,MySQL也是一个高性能的产品,它不仅适用于中小型公司,还能稳定高效地处理大数据。业内存在一种误解,认为MySQL的扩展性不好,若超过一定的数据量时,性能就会下降。其实这更多的是一个架构问题,配合成熟的架构,比如在应用层切分数据,MySQL的扩展性就不再是什么问题了,而且很多数据是能够分片到各个MySQL节点的。Facebook、Twitter、Google等都在大量使用MySQL存储海量数据。
一些人倾向于用NoSQL产品来存储数据,其实,NoSQL产品,特别是一些key-value单机产品,相对于MySQL来说并没有什么优势。MySQL同样可以把数据存储为key-value的形式,并且,NoSQL的产品还不是很稳定,一旦数据丢失就可能会导致很严重的损失,又往往因为数据模型简单,所以应用范围狭小。MySQL成熟稳定且拥有丰富的数据类型,它的关系模型可以满足项目不断增加的商业需求。