为什么很多公司都开始去oracle而使用mysql?(整理)Oracle和MySQL的主要区别 Oracle:客户端和命令窗口,都是由用户决定内容-> conn user_name/password;

原文地址:https://www.zhihu.com/question/29088685

最近听了阿里的一个分享会,发现他们完成了整体从oralce转换为MysqL的过程。为什么很多公司都开始去oracle而使用MysqL?关于这个问题已经看到很多很多很多次了,在浏览了各家之言后,就借知乎这块宝地,我也写一点我的看法,可能会有点长。


首先,题主直接问为什么,这个明显不符合知乎的规矩嘛,咱要先来看看 是不是真的很多公司开始去oracle而使用MysqL@H_502_10@。
historical trend of the popularity ranking of database management systems
<img src="https://pic4.zhimg.com/b66ab8f2f92ca7414e35d63d70450bcf_b.jpg" data-rawwidth="2006" data-rawheight="1208" class="origin_image zh-lightBox-thumb" width="2006" data-original="https://pic4.zhimg.com/b66ab8f2f92ca7414e35d63d70450bcf_r.jpg">从图片来看,oracle和MysqL的流行程度没有明显的逆转,oracle还是关系形数据库中的老大。 从图片来看,oracle和MysqL的流行程度没有明显的逆转,oracle还是关系形数据库中的老大。我没有找到在互联网行业中的统计数据,希望有知友补充。在知道了是不是之后,正式开始答题。
我本人是一个MysqL dba,对于oracle了解不多,所以要我直接从正面去解答这个问题呢,多多少少都是会有一些偏袒的,所以我想把这个问题转化一下,就是 一个公司在作出数据库选型转变的时候,需要考虑哪些方面的因素?@H_502_10@淘宝从oracle转为MysqL可以作为这个问题很好的一个例子。

成本因素@H_502_10@
我们都知道MysqL是开源的,也就是说完全免费,而oracle价格不菲,如果再考虑到搭载oracle的服务器和存储设备的话,那直接可以看见的成本差距确实很大,这是现实。但是这样就简单的判断从oracle迁移到MysqL就一定节约成本,我觉得这个事儿不好说。 直接根据产品本身购买价格算成本的方式不能说错,但是肯定不全面,还漏了不少东西要算@H_502_10@。

@歪脖大肚子Q问:假如Oracle的许可证费用足够低,还会换用OB吗?按照大部分人都解释,可能从安全方面考虑,@王少亚认为关键不是费用,是可控性 。但是事实很简单,就是Oracle要价太高。淘宝顶级科学家阳振坤微博号@阿里正祥 回复@王少亚:很多人猜测答案是NO,非也,答案是YES,而且是在费用上,呵呵。可以想象马云当时是多么火大,你收我那么多钱,跟我阿里的理念完全相反啊。我成本无限高,我怎么服务中小企业!必须上马。@阿里正祥表示:目前 OceanBase做到了商业数据库成本的一半以下,这得益于OceanBase不再需要昂贵的共享存储、高可靠的服务器、数据库软件的许可费。 OceanBase还有很大的性能提升空间和成本降低空间。


有网友问为什么不用MysqL?

@阿里正祥回答,“金融系统要求在主库故障的时候不能丢失任何数据(地震等天灾人祸除外),MysqL无法做到这一点(如果不使用共享存储的话)。 ”

<img src="https://pic1.zhimg.com/00a47de293fd3ea44a342f1a4bf658c4_b.jpg" data-rawwidth="601" data-rawheight="280" class="origin_image zh-lightBox-thumb" width="601" data-original="https://pic1.zhimg.com/00a47de293fd3ea44a342f1a4bf658c4_r.jpg">

对于是否增加硬件采购,@阿里正祥表示,机器确实增加了,但也没有这个同学说的这么夸张(一个同学认为机器增加了7-8倍),不知道这个数据从何而来。对于这个交易系统,跟商业数据库相比,OceanBase成本更低,同时还提供了超过一倍的性能和容量。




你听的啥分享会啊,明明是迁到OceanBase啊。
文章链接数据库要变天!阿里 OceanBase 五年破茧为蝶
http://www.oschina.net/news/60996/oceanbase-five-years?from=message&isappinstalled=0
OceanBase技术负责人正祥的新浪微博: weibo.com 的页面
淘宝分布式数据库 OceanBase
http://www.oschina.net/p/oceanbase
http://baike.baidu.com/link?url=2wCq74IQAg583BNlfDJd_4THrFyN1sW09KZTpYvXCOVOwgEWDNZjSar-drDKgM7PHUokTlMrhFR_8v1XSIP32IM2_u6jCdVO4DLiZRe7D5u
淘宝研发的 OceanBase 相比其他开源的 nosql 数据库有什么独特的优点?
https://www.zhihu.com/question/19841579
OceanBase 是一个支持海量数据的高性能分布式数据库系统,实现了数千亿条记录、数百TB数据上的跨行跨表事务,由淘宝核心系统研发部、运维、DBA、广告、应用研发 等部门共同完成。在设计和实现OceanBase的时候暂时摒弃了不紧急的DBMS的功能,例如临时表,视图(view),研发团队把有限的资源集中到关 键点上,当前 OceanBase主要解决数据更新一致性、高性能的跨表读事务、范围查询、join、数据全量及增量dump、批量数据导入。

你听的啥分享会啊,明明是迁到OceanBase啊。
文章链接数据库要变天!阿里 OceanBase 五年破茧为蝶
http://www.oschina.net/news/60996/oceanbase-five-years?from=message&isappinstalled=0
OceanBase技术负责人正祥的新浪微博: weibo.com 的页面
淘宝分布式数据库 OceanBase
http://www.oschina.net/p/oceanbase
http://baike.baidu.com/link?url=2wCq74IQAg583BNlfDJd_4THrFyN1sW09KZTpYvXCOVOwgEWDNZjSar-drDKgM7PHUokTlMrhFR_8v1XSIP32IM2_u6jCdVO4DLiZRe7D5u
淘宝研发的 OceanBase 相比其他开源的 nosql 数据库有什么独特的优点?
https://www.zhihu.com/question/19841579
OceanBase 是一个支持海量数据的高性能分布式数据库系统,实现了数千亿条记录、数百TB数据上的跨行跨表事务,由淘宝核心系统研发部、运维、DBA、广告、应用研发 等部门共同完成。在设计和实现OceanBase的时候暂时摒弃了不紧急的DBMS的功能,例如临时表,视图(view),研发团队把有限的资源集中到关 键点上,当前 OceanBase主要解决数据更新一致性、高性能的跨表读事务、范围查询、join、数据全量及增量dump、批量数据导入。

目前OceanBase已经应用于淘宝收藏夹,用于存储淘宝用户收藏条目和具体的商品、店铺信息,每天支持4~5千万的更新操作。等待上线的应用还包括CTU、SNS等,每天更新超过20亿,更新数据量超过2.5TB,并会逐步在淘宝内部推广。


风险成本@H_502_10@:2008年的淘宝是一辆在高速公路上飞驰的汽车,业务发展是很快的,这个时候要 迁移数据库这样的基础架构,那必然是牵一发而动全身的事情@H_502_10@。就好比要给这辆在高速公路上的汽车换个引擎,车还不能熄火, 这个事情本身的难度和风险就是很大的@H_502_10@。
技术成本:@H_502_10@其实上面提到了 迁移过程的难度大@H_502_10@。主要有几个方面, 业务不能停,数据一致性,大量的业务可能面临解耦,重构@H_502_10@等等,这些做完 整体架构@H_502_10@可能都变天了,这个是需要 大量开发人员费时费力还不一定就能百分百做好的事@H_502_10@儿。如果 没有一点前期的技术积累,几乎不可能完成@H_502_10@,淘宝这方面的实力确实国内领先(这里感叹一下)。
人力成本:大量开发人员做重构的时候还是要拿工资的@H_502_10@吧。 新技术的学习成本@H_502_10@也要算进去,这个包括运维的dba和各个业务的开发人员@H_502_10@,凡是需要用db的人都要新学一遍,这也要花不少时间和精力。 还有在决定迁移的这一刻,对于之前的一些技术的积累,包括人员的培养等方面,一定是有浪费的@H_502_10@,物体的运动轨迹发生突变往往意味着能量损失,这是一个道理。 随着技术转型,一批老的出色的oracle dba和开发人员的流失带来的损失更难估量@H_502_10@。
如果把这些七七八八都算进去的话,那还 真的一定节约成本么?@H_502_10@至少在短时间内,这个事儿不好说,反正我是老板的话,我算不清。

业务因素@H_502_10@
这里可能用“ 业务场景@H_502_10@”这个词解释更加合适,或者说这是一个 数据库选型的问题@H_502_10@。根据淘宝架构师在公开场合的描述,当时淘宝的业务量发展太快了,这使得原本基于oracle旧架构的系统扩展性不能很好支撑整个业务了, 架构解藕这件事已经是车到山前了,这就意味着业务需要分拆,数据库需要分拆@H_502_10@。 如果业务只需要十几个或者几十个集群就能承载的话,那我觉得oracle完全ok,但是现在大型互联网公司的业务规模都是需要上百集群,上千机器来承载,对于这样的规模,MysqL这样轻量级的数据库更合适@H_502_10@。所以这里不是谁更好的问题,只是 哪种数据库产品更适合当前及未来公司的业务场景@H_502_10@,换句话说,就是“物尽其用”而已。 现在不是也有很多数据从MysqL向nosql迁移了么@H_502_10@。

技术趋势
当前互联网技术发展有个整体的趋势,就是开源产品为主流@H_502_10@。oracle是这个世界上到目前为止最优秀的 关系形数据库产品@H_502_10@,但是他闭源, 闭源就意味着在整个互联网大行业背景下,这个产品本身就可能变的越来越小众@H_502_10@,对于一家互联网公司使用的 基础架构@H_502_10@本身很小众的话还不是什么太大的问题,但是其导致的 技术上的壁垒就很难接受@H_502_10@了, 自己最核心的基础架构掌握在别人家手里,核心技术都是人家的,这就好比芒刺在背@H_502_10@。打个可能不太恰当的比方吧,有一天你LOL天梯打到了2000,但是你发现你的圈子里已经没什么人玩这个了,别人都去玩另外一个游戏了,而且还是别人自己开发的游戏,代码能自己改,能自己写外挂能加英雄加功能你当然可以继续玩LOL,你可以始终是个顶级玩家,但是同时你失去了成为顶级游戏开发者的机会。@H_502_10@
说到这里我想再延伸一下,有个成语叫“不破不立”,拿 淘宝迁到MysqL的例子@H_502_10@来说的话(迁MysqL我想可能只是一部分),淘宝在这个 分拆重构的过程@H_502_10@中积累了很多技术。淘宝内部人员也在公开场合也提到过,淘宝在那段时间诞生了很多出色的架构师,积累很多新技术,比如很多 中间件@H_502_10@,底层针对MysqL的优化,运维工具等等,可能没有当时的那次变革, 阿里的RDS出现@H_502_10@可能还要晚几年,甚至出不来。


高层意志@H_502_10@
我看到过有 淘宝系@H_502_10@的人说 那次迁移其实是某博士的一次政治运动@H_502_10@,反正咱不是阿里的人,咱就瞎猜了哈。 迁移这事儿谁提出来的不好说,但是得到高层的首肯是必然的,甚至我觉得这样的规模必然是有高层的压力的,如果这个事情说服不了大老板,很难想象下面上千的开发人员行动能统一@H_502_10@。

大概就先到这吧,写得有点乱,题主凑合看了,好像说了半天也没说去oracle而使用MysqL到底好不好,题主可以自己根据以上因素自己掂量掂量。至于淘宝从oracle迁到MysqL好不好,我挺某博士。

其它一些观点:
oracle 要钱,MysqL不要钱;
分布式存储用MysqL方便;
MysqL经过这么多年本身也成熟,比如备份、主备库、有经验的MysqL的dba人数增多;
MysqL开源,有技术资源的大公司可以定制开发些东西;
互联网类的应用对数据库依赖越来越小,比如触发器、存储过程等很多都不建议用,到最后数据库完全就是用来存储结构化重要数据的这么一个东东,导致oracle优势小了很多,反正到最后发现oracle也就是存储数据用的,其他的都没用上;
非结构化非核心的数据存储用了nosql,对数据库特殊数据类型的依赖小了;
复杂的数据运算有专门的分布式计算做比如Hadoop,对数据库的特殊查询比如分析函数依赖小了;


MysqL替代oracle的用户可以分为三种:
1)应用太小且要求不高,MysqL完全搞定,根本不需要oracle,又是免费的,不用白不用。
2)系统太大,做最大的oracle集群也满足不了其容量和性能的要求,用MysqL做砖头自己建存储集群。
3)不明真相的被忽悠的群众。
对于一般的用户,用oracle是最经济的,用MysqL所需要的投入不是他们能承受的。


有意思论述:
大部分是因为没钱没技术。
如果把数据服务比作请客户吃饭,可以把MysqL比作大菜场,oracle就是五星级大饭店。
先考虑钱:
1. 又穷又没技术的,菜市场门口有卖熟菜,但选择不多。胜在价廉物美,并且如果你买了油炸鸡块。再去超市买几瓶啤酒,在晚上吃的话,可以组成经典的“啤酒炸鸡看星星”这种有b格的组合。另外有些熟菜摊可能是高级饭店出来为了“自由”做个体户的!
2. 有钱没技术的,对菜有要求的一般都会去五星级饭店,全方位保证,b格满,安全卫生口味好,选择多,而且有大龙虾鱼翅鲍鱼满足挑剔的食客。

下面考虑技术:
1. 有点技术的可能会选择菜市场,家用厨具还是有的,家里没有大油锅,大骨刀,可能会让菜市场口的熟食摊主把鱼过个油,让卖肉的把排条切好,然后自己做,其实大部分这样做的人口味并不会比五星级更好,但肯定会省很多钱。偶尔也可以搞点五星级菜谱上没有的,但自己客人又爱吃的菜。
2. 有技术的也有可能选择五星级饭店,毕竟如果预算够,客户要求高,五星级饭店总是个不错的选择,毕竟五星级饭店本身就有接待高级客户的经验,可以帮忙推荐菜谱,甚至针对特殊客群的套餐,同时出了事五星级饭店可以帮忙解决食客的投诉,公司内部问责了,菜不是我烧的,并且五星级都不满意,是客户脑子烧了,总之不是我的问题。
3. 真正nb的公司才是嫌弃五星级只提供菜谱上的东西,并决定直接去菜市场买原材料回来自己加工一桌媲美甚至超越五星级的美食。

结论:大部分不选择五星级饭店接待客人的,并不是因为自己做的比五星级饭店更好吃,搭配更好。毕竟不是每家人都擅长做菜,家里有厨师比五星级大厨还nb的,也是少数中的少数。 也就阿里等大公司能拿出来讲讲,问题人家养了一个什么团队?你其他公司养的起么!

应该不是大部分公司,而应该是大部分知名互联网公司。

原因很简单,oracle已经不能满足他们的需求,或者成本太高无法接受,使用oracle的成本已经比自己养活一只团队改MysqL的成本要高。MysqL开源对顶尖的互联网公司来说最大的好处就是有源码,看哪里不满意就把哪里改了,因为顶尖互联网团队的员工足够NB。你说MysqL不稳定,那我把MysqL改成稳定的;性能差?那我把它某一方面的性能改强。多次修改后估计已经和社区版有很大差别了。基本上可以认为阿里或Facebook自己搞了(开发)个不怎么开源的阿里版MysqL和Facebook版MysqL,和MysqL的关系估计和MariaDB与MysqL的关系有的一比,至于是否高度兼容就不太好说。


流行跟风: 技术就跟服饰一样,今年流行这个,过一段时间流行那个。

持续使用ORACLE中,还是比较方便,也是由于公司系统架构复杂数据量较大迁移不易.....该花的钱还得花,如果转用MysqL目测客户的投诉能到下个世纪......
@H_242_301@
@H_242_301@这个 '很多公司' 里肯定没有金融保险行业的;像Oracle这种拥有多年技术积累的大型商业数据库所带来的稳定性、时效性是其他开源数据库无法比拟的。
@H_242_301@
有一小点:相比较nosqlsql更擅长transaction,而恰巧是一般大公司所需要的。nosql在做transaction的时候需要roll back,很麻烦



SQL Server,MySQL,Oracle三者的区别

http://www.cnblogs.com/tufujie/p/5071669.html


Oracle和MysqL的主要区别

Oracle:客户端和命令窗口,都是由用户决定内容-> conn user_name/password;

MysqL:客户端和命令窗口,都是由数据库决定内容-> use datebase;

都可以创建多数据库用户,个人倾向于Oracle一个数据库中多个用户的形式,MysqL多个数据库多个用户形式(最好每个数据库对应一个用户

Oracle是大型数据库MysqL是中小型数据库,Oracle市场占有率达40%,MysqL只有20%左右,同时MysqL是开源的而Oracle价格非常高。

Oracle支持大并发,大访问量,是OLTP(On-Line Transaction Processing联机事务处理系统)最好的工具。

安装所用的空间差别也是很大的,MysqL安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能

Oracle也与MysqL操作上的一些区别

聚合函数用法规则

MysqL中聚合函数在select语句中可以随意使用,但在Oracle中如果查询语句中有聚合函数,那其他列名必须是聚合函数处理过的,或者是group by子句中的列否则报错
eg:
select name,count(money) from user;这个放在MysqL中没有问题在Oracle中就有问题了。

自动增长的数据类型处理

MysqL自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。Oracle没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999
INSERT语句插入这个字段值为:序列号的名称.NEXTVAL

单引号的处理

MysqL里可以用双引号包起字符串,Oracle里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

翻页sql语句的处理

MysqL处理翻页sql语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。Oracle处理翻页sql语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。
以下是经过分析后较好的两种Oracle翻页sql语句(ID是唯一关键字的字段名):
语句一:
SELECT ID,[FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW,ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;

语句二:
SELECT * FROM (( SELECT ROWNUM AS NUMROW,c.* from (SELECT [FIELD_NAME,...] FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;

长字符串的处理

长字符串的处理Oracle也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用Oracle里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。

日期字段的处理

MysqL日期字段分DATE和TIME两种,Oracle日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE('2001-08-01','YYYY-MM-DD')年-月-日24小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式,可以参看Oracle DOC.

日期型字段转换成字符串函数TO_CHAR('2001-08-01','YYYY-MM-DD HH24:MI:SS')
日期字段的数学运算公式有很大的不同。MysqL找到离当前时间7天用DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)Oracle找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7;
MysqL中插入当前时间的几个函数是:NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以'YYYY-MM-DD'的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以'HH:MM:SS'的格式返回当前的时间,可以直接存到TIME字段中。例:insert into tablename (fieldname) values (now())
而Oracle中当前时间是sysdate

空字符的处理

MysqL的非空字段也有空的内容,Oracle里定义了非空字段就不容许有空的内容。按MysqL的NOT NULL来定义Oracle表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

字符串的模糊比较

MysqL里用字段名like%'字符串%',Oracle里也可以用字段名like%'字符串%'但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,'字符串')>0会得到更精确的查找结果。

程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。

主键

MysqL一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,MysqL自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。

Oracle实现了ANSIIsql中大部分功能,如,事务的隔离级别、传播特性等而MysqL在这方面还是比较的弱


mysql、MsSqlserver和Oracle的特点,优缺点

http://blog.itpub.net/21981351/viewspace-1117082/


MYSQL 浅谈MyISAM 存储引擎

http://www.cnblogs.com/baochuan/archive/2012/03/15/2398276.html


MySQL存储引擎--MyISAM与InnoDB区别

http://blog.csdn.net/xifeijian/article/details/20316775

相关文章

数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
(1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...