MySQL如此万能,为啥还需要商业数据库或PG?

知乎 2024-01-02 10:47:05

最近,小编在知乎上看到这样一个问题:

 

 
 

MySQL已经可以干大部分事情了,还有必要使用商业数据库或者PostgreSQL吗?

 
 

 

这个问题涉及到很多方面。MySQL的innodb引擎有事务了,而且也能进行很多比较复杂的查询,包括嵌套查询等。如果数据量比较大,参考大厂,也能做到很大的集群,把Oracle去掉。而且现在流行的hadoop很多时候都是和MySQL配合的。

 

这样看起来的话,其它数据库好像都能用MySQL来代替,并且MySQL是开源免费的。如果担心Oracle操控MySQL,还可以选择MariaDB。为何还有那么多企业买商业数据库?一般的商业数据库价格也不低。

 

还有就是有一种据说比MySQL更开放的PostgreSQL数据库,感觉它的用户没有MySQL的那么多。而且它能做的MySQL都能做,例如查询优化、子查询、索引、分区等等。

 

为什么不能在所有场景下都使用MySQL呢?

 

秉持着文明和平的学习态度,以及促进国产数据库生态繁荣发展的初衷(感受到小编满满的求生欲了吗),小编精选了几位知乎网友的精彩回答,分享给大家学习交流(勿上升、勿引战)

 

 
 
 
1号知乎网友:诗与星空
 
 
 
 

因为需要背锅侠。

 

对于商业软件来说,稳定远远比便宜更重要。

 

真实案例:某年某央企千万级用户百亿金额的上古系统,用的Sybase数据库,在一次常规归档的时候,意外遇到一块硬盘损坏,负责硬件的小哥没有和正在进行归档的团队充分交流,顺手联系厂家换了新硬盘。

 

做了Raid的磁盘,更换后,会有一段同步数据的时间,恰好这个时候数据库归档进入最为关键的时点。

 

于是,数据库挂了。

 

回退也是个问题,因为恢复时间过长,可能会引起社会影响……

 

之前已经向社会发布公告,原定24小时对外公布48的停机时间,一下子超时了。IT经理通宵加班的时候,顺便准备好了辞呈。

 

千钧一发的时刻,SAP公司(Sybase被SAP收购)来人了,安排了号称Sybase四大天王的三位,最强的支持团队,又连续奋战了1个通宵,终于在凌晨6点前强行修复成功。

 

 
 
2号知乎网友:温酒
 
 

至少有一个场景MySQL是无论如何不能做的,就是想办法把钱花出去。

 

成年人的世界里有一条准则:你体现的价值基本取决于你付出什么。

 

做业务的时候,如果你pay nothing,那么你一定get nothing,哪怕是在技术端,也是一样的。

 

付钱,在能力允许的前提下,让最多的人赚最多的钱。

 

那么当你面对危机的时候,就会有无数的人想尽办法来救他们的财神爷了,MySQL这方面的能力几乎是零。

 

我随便举个例子,银行数据库,要是用MySQL,一旦出了问题,谁来背这个锅?

 

技术部门?码农最懂码农了,你觉得你背得起吗?背不起?那就老老实实用Oracle或者SQLServer啊,它们有办法背。反正锅甩出去了,不在技术部门员工身上。

 

其实,选什么数据库,这个问题跟技术一毛钱关系都没有。跟技术有关系的,往往是选完了数据库以后的事情。

 

 
 
3号知乎网友:木风
 
 

前某厂员工可以很负责的说一句,去IOE的事迹内部宣传很多次了,就是为了省钱,仅此而已。如果Oracle免费,你看互联网大厂会用MySQL还是Oracle?

 

不管是性能、架构、对SQL标准的支持度,还是代码质量,Oracle、PG都是甩MySQL好几条街的。

 

互联网的特点是业务逻辑简单,但是并发量大,那么养一个厉害的中间件团队做好横向扩容就行了,同时尽量不使用复杂和嵌套的sql。某种程度上讲,已经在NoSQL化了,比如为了提高读性能进行的各种denormalization。

 

至于PG能做而MySQL不能做的,有很多,随便说一个:条件索引。

 

再说一个,一条插入语句插入n行数据,并返回所有插入行的主键,用mysql自增主键生成器,怎么做?做不到的。

 

再加一条,将非主键索引建为 clustered index,MySQL压根都不支持。

 

我差不多在10几秒内就能想到这么多MySQL没法做的事情,么会叫MySQL都能支持呢?

 

 
 
4号知乎网友:dbalex
 
 

首先,反驳一下题主的问题。

 

关于你说的“Oracle很差不能满足需要”,这完全是无稽之谈。很多大厂最初就是用的MySQL,后来性能上不去,于是引入了当时互联网行业第一台AIX小型机,跑Oracle,哎哟喂!那个爽啊!可劲用啊!性能完全不是问题啊,DBA生活也很安逸。这种架构在现在被称为“传统架构”,支撑了无数企业各种规模的信息系统。

 

既然如此,为啥还要去IBM、Oracle、EMC(去IOE),说白了,就是要从钱窟窿里跳出来,随着数据的不断增长,那将是个天文数字啊!

 

我们来看一下这个架构是怎么烧钱的。要承受不断增长的业务压力,一般来说,无非两种手段,一种是提高主机性能,加CPU加内存;一种是加机器。要知道Oracle license是怎么算的呀,那可是按照CPU个数算的呀!你加多少CPU加多少机器最终都是要加钱的呀!

 

好,现在来比较一下MySQL跟商业数据库的区别。先来打个比方:如果Oracle比作全聚德,那MySQL就是咸鸭蛋了。都挺好吃的对吧,但你不觉得区别还是挺大的么。那么,比起MySQL,Oracle牛在哪里呢?

 

1、数据库的心脏在于优化器,Oracle基于成本的优化器跟MySQL的优化器水平可不是差了一点点。

 

2、Oracle是多进程体系,MySQL是单进程多线程体系。说白了,Oracle可以充分的利用主机的CPU进行并行处理,MySQL则不能充分利用多核CPU。

 

3、数据安全性,商业数据库对数据提供完善的保护机制,保证关系数据库四原则ACID中D(Durability),并提供完善的售后技术支持服务,而开源的MySQL数据库没有人能给出以上承诺。

 

这三条是最关键的区别,还有几十条就不在此赘述了。1和2决定了MySQL的性能被Oracle甩出N条街,特别是在OLAP领域,偷偷告诉你,官方版MySQL现在还不支持hash join,Oracle分分钟干完的事,MySQL可能要忙活一晚上;3决定了在一些关键领域,如金融、电信、保险(大行要是每隔几天丢几笔存款,那它估计活不了几天就该关门了等,MySQL是没有任何立足之地的,除非在一些非关键业务上。

 

那么,MySQL既然跟Oracle比起来差距这么大,为什么却如此流行呢?

 

MySQL作为一个开源的数据库,发展速度还是很快的。题主说的关于查询优化、分区等等,确实是借助开源力量的产物,而且InnoDB支持MVCC也是部分商业数据库没有做到的(如IBM DB2),所以MySQL承担一些业务逻辑简单的互联网应用非常合适.

 

另一方面,MySQL作为免费的开源数据库,扩展的成本是很低的,结合廉价的PC,扩展到几千台甚至上万台的规模用不了多少预算,这就是屌丝流!当然,淘宝那一大堆神仙级的技术牛人可不仅仅是把这几万台机器装上MySQL就算完了,关于他们的神仙事迹,我就不在此多说了,想了解的话就看你自己的执行力了,书籍、博客已经提供了很多你想学到的知识。

 

如有纰漏,欢迎指正。

 

 
 
5号知乎网友:萝魏紫
 
 

让有实际经验的来给你讲讲,百度得到的都没什么用。MSDBA认证,Oracle终生拥护者萝魏紫给你解释下这个问题。

 

三大关系型数据库:MySQL、MSSQL、Oracle,为什么Oracle卖4倍贵?还有很多公司不用MySQL?为什么MSSQL比MySQL企业版贵3倍,还有很多公司不用MySQL,为什么MySQL有开源版还有很多公司要用企业版?

 

第一,服务。

 

我有一个项目,用的Oracle的RAC。我怀疑数据库有问题,一个电话过去,Oracle派一个团队过来——4个人,驻场一个月,调试、测试、出报告,给我把哪些配置配错了?哪些配置可以优化?哪些工具可以用来继续监测?讲得清清楚楚。连不是Oracle的问题,都顺手提出来了。

 

我还有一个项目,用的MSSQL SEVER AG。我怀疑数据库有问题,电话是不接的。要上网填ticket,然后客服打给你,这种客服你懂的,P用都没有。然后一路升级,到一半,发现你的Window没有打全patch,直接postpone,直到你打全patch再说,我只好请Boss调了自己公司其他部门的Wintel 服务团队过来帮忙看,解决了。

 

MySQL我没用过企业版,我帮几个朋友调试过他们自己的库。除了满大街查google,还能做啥?要是你一查百度,完了,漫天中文ctrl+c ctrl+v 的blog,前言不搭后语。

 

第二,健壮性。

 

Oracle你以为他只是数据库?他卖exadata,整体数据库跑在上面。就算他单独卖的数据库,他的HA集群是自己做的。我十多年用过几百台OracleHA,就没见过所有节点挂掉的。RAC的切换非常快,毫秒级别。而MSSQL的集群,我真实看到过AG内切换所有节点下线几秒钟。而MySQL集群?你能像阿里那样开发大量持久化中间件?不能的话,我有一个解决方案:定期带服务器去庙里烧烧香。

 

第三,功能性。

 

Oracle三大工具:AWR、ADDM、ASH report,谁用谁知道,用了都说好。MSSQL 的trace file你要看?对不起,先装个MSSQL客户端。装了你也看不懂,完美符合MS系所有的习惯。要不是找到一个微软内部用的自动分析工具,我是绝对不看trace file的。MySQL 听说有个enterprise monitor,不过没用过。开源版大概只能看看服务器日志,或者装zabbix……

 

大家对于"MySQL已经可以干大部分事情了,还有必要使用商业数据库或者PostgreSQL吗?"这一问题,有怎样的思考和想法呢?欢迎在留言区交流~

 

 

整理丨dbaplus社群
来源丨网址:https://www.zhihu.com/question/21793412
*仅为提供参考和学习交流,不代表dbaplus社群立场!本文为dbaplus社群整理校对,如需转载请标明出处。dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

 

最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告