社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

DBAplus社群 • 1 年前 • 169 次点击  


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




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倍,还有很多公司不用My SQL,为什么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


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/166430
 
169 次点击