随着IT技术的迅猛发展,云计算、大数据、人工智能、无人驾驶这些新生事物不断涌现。它们并不是概念上的存在,相反,它们实实在在地强有力地改变着人们的生活方式。

在这些光鲜亮丽的新技术背后,总有大量的数据在提供支持。有数据就需要数据库,就需要选择数据库软件。目前市场上最引人关注的两个数据库产品是Oracle和MySQL。虽然它们目前都属于Oracle公司,但是最终用户在进行产品选型时,需要对它们进行各种比较,从而选择最合适的产品。同样,从业者在学习数据库技术时,也需要决定学习哪种产品。

下表从不同角度对这两种数据库产品进行比较。

通过对比,我们不难得出这样一个结论:如果把Oracle比作数据库产品中的贵族,那么MySQL就是一个彻底的草根。然而令人奇怪的是,MySQL在数据库领域的市场占有率越来越高,相关从业人员的工资也逐年见涨,甚至超过了Oracle从业者。这些现象无疑对新用户以及即将踏入这个领域的从业者造成很大的困惑。接下来,我就从几个关键的角度分析这些现象产生的原因,供大家参考。

Oracle产品是以用户数或者CPU数来收费的,购买一套软件的费用是相当高的。另外,Oracle数据库一般运行在小型机上,首选的小型机是IBM的POWER系统,而数据一般需要存储在盘阵这种存储设备上。粗略算下来,仅这样一套软件、硬件的投资就可达100万元人民币左右。在国内,似乎只有大中型企事业单位才负担得起这样的投资。

MySQL更像是植物界的仙人掌,在任何地方都能存活,它对运行环境没有苛求。MySQL数据库一般运行在Linux操作系统中,硬件平台选择普通的PC Server即可,而数据则存储在PC Server的本地硬盘上。假设一台PC Server的售价为3万元人民币,那么100万元足以建成一个豪华阵容的数据库。

如果把Oracle数据库的战斗力比作一只老虎,那么MySQL只能算一头狼,甚至连狼也算不上,充其量是一只胡狼。当MySQL数据库的数据量达到百万行时,数据的访问速度将明显变慢,而Oracle数据库可以不动声色地处理同等数量的访问。

在很多情况下,性能问题是产品选型时需要考虑的首要因素。比如,如果在网上下订单所需要的时候过长,那么电商就会失去大批的粉丝。

为了保证数据库的高可用行、可扩展性,以及用户访问的分开,数据库的结构应该是分布式的。至此,MySQL赢来了彻底翻盘的机会。分布式环境首先意味着更多的硬件投资,单机环境的硬件设备需要克隆多次。小型机的单价远远高于PC Server,所以在投资成本方面,PC Server占尽了优势。试想一下,用户有多少人民币可用来购买一台又一台的小型机和盘阵?相比之下,购买PC Server则容易很多。

另外,Oracle的分布式环境配置很麻烦,而MySQL的分布式环境却很容易配置。现在,MySQL亮出了自己的底牌:利用廉价的硬件设备和免费的软件,很容易地部署分布式环境,通过狼群战术战胜Oracle这只大老虎!

数据库的分布式环境包括集群和数据同步两种。两种数据库产品都有自己的解决方案。

Oracle的集群产品叫做RAC(Real ApplicationCluster),需要单独购买。这是一个非常优秀的集群产品,在一般的数据库应用环境中无人可比。在每个服务器(下图中的Node)中运行一个数据库实例,而数据则位于共享的盘阵上。盘阵采用RAID技术,可有效防止硬盘损坏,从而保证数据的安全。前台应用程序,如Application Server中的JAVA程序,Web Server中的PHP程序等,可连接任何一个实例,对数据进行访问。这里所说的Node,指的是物理服务器,即小型机。由于数据的存储和处理都是集中式的,所以这种结构不适合用在对批量数据进行处理的环境中。

Oracle的数据库同步有两种解决方案:GoldenGate和DataGuard,其中GoldenGate软件需要单独购买,而DataGuard是Oracle自带的功能。

下图反映了GoldenGate的工作原理。左边是源数据库(Source),右边是目标数据库(Target)。用户的访问一般针对源数据库,当前台应用程序执行事务时,数据库针对事务产生重做日志。GoldenGate的Extract进程从源数据库中提取这样的日志,交给DataPump进程,把日志通过网络传输到目标系统中。在目标端,GoldenGate的Replicat进程把重做日志翻译成数据,写入目标数据库。通过这样的方式,GoldenGate使两个数据库的数据达到同步状态。一般来说,前台应用程序的访问由源数据库进行处理,而目标数据库主要处理数据的分析、统计、报表产生等任务。

MySQL的集群是由若干个Node组成的,它们运行在同一个或多个同类操作系统中,出于性能考虑,它们应该运行在多个不同的同类操作系统中。这里所说的Node,指的是操作系统中的进程。

DataNode的功能是存储数据,并对数据进行读写操作。任何数据都有一个或多个拷贝,存储在DataNode的本地硬盘上。通过这种高冗余的方式,MySQL可以有效防止硬盘损坏,从而保证数据的安全。表中的数据被水平分割,分布在不同的DataNode中。SQLNode的功能是接收并处理前台应用程序发送的SQL请求,并返回处理结果。Management Server的用途是管理整个集群,保存各个Node的配置情况,以及数据的分布情况。前台应用程序可以连接任何一个SQLNode,对数据进行访问。SQLNode需要连接Management Server,确定数据的分布情况,然后连接合适的DataNode,找到相应的数据。

由此可见,MySQL集群的数据存储和数据访问都是分布式的,这样就能够以并行方式处理用户端的访问。

MySQL的数据同步解决方案叫做Replication,由一个Master数据库和多个Slave数据库组成。用户端的访问一般针对Master数据库,只要用户执行事务,数据库便产生二进制日志,而Slave数据库主动地从Master数据库下载二进制日志,然后翻译成数据,写入数据库。一般来说,Slave数据库负责处理只读请求,如数据的分析、统计、报表产生等。以电商为例,消费者买东西下订单的数据被写入Master数据库,而电商对订单信息的统计、分析等处理则在Slave数据库中进行。

Oracle数据库的体系结构是非常复杂的,这就导致Oracle的学习之路必然是一个漫长而艰辛的过程。MySQL的结构非常简单,非常容易掌握。然而,当你真正掌握这两种产品的管理方法之后,你会惊讶地发现:Oracle的管理非常容易,而MySQL的管理则非常繁琐。这是因为,Oracle公司非常了解用户的心理,对Oracle产品进行了很多优化,加入了很多默认的配置,数据库按照默认的方式即可高效运行。另外,在数据库实例中运行很多自动化的任务,实现数据库的自动管理。而MySQL是由很多爱好者开发的,它充分体现了开发者的个性,用户需要迎合开发者的心理。

综上所述,Oracle数据库主要应用于传统的大型行业,如银行、通信、证券等,这些行业对国家经济有重大影响,数据的安全是必须考虑的因素。另外,因为资金雄厚,这些行业有能力购买高档设备和软件,通过更多的投资来保证数据库的安全和性能。MySQL主要应用于互联网行业,通过使用大量的廉价设备,构建大规模的分布式应用环境,从而提高数据库的性能,保证数据的安全。互联网行业主要强调对批量数据的并行处理,与大数据进行衔接,为大数据提供源数据。在目前IT界去IOE(IBM、Oracle及EMC)的大趋势下,MySQL确实获得了越来越多的市场份额,但不可否认的是,在很多重要行业中,Oracle的霸主地位还是无法撼动的。

作者简介

刘宪军,男,1997年毕业于西北大学计算机科学系,获工学硕士学位。目前主要从事小型机、中间件、数据库、大数据的技术支持和培训工作。

历年出版的专著有:

《Oracle数据库备份、恢复与迁移》 机械工业出版社  2017年1月

《Oracle RAC 11g实战指南》 机械工业出版社  2011年1月

《Oracle 11g 数据库管理员指南》 机械工业出版社  2010年8月

《软件过程管理》 水利水电出版社  2004年

《UNIX系统管理教程》清华大学出版社  2002年

《Windows/Linux/UNIX综合组网技术》清华大学出版社  2002年