MySQL已經可以干大部分事情了,還有必要使用商業資料庫或者PostgreSQL嗎?

這個問題涉及到很多方面。MySQL的innodb引擎有事務了,而且也能進行很多比較複雜的查詢,包括嵌套查詢等。如果數據量比較大,可以參考淘寶,也能做到很大的集群,淘寶不是把Oracle都去掉了嗎?據說Oracle很差,不能滿足淘寶的需要。現在流行的hadoop很多時候都是和MySQL配合的。
這樣看起來的話,其它資料庫好像都能用MySQL來代替,並且MySQL是開源免費的。如果擔心Oracle操控MySQL,還可以選擇MariaDB。為何還有那麼多企業買商業資料庫?一般的商業資料庫價格也不低。
還有就是有一種據說比MySQL更開放的PostgreSQL資料庫.感覺它的用戶沒有MySQL的那麼多。而且它能做的MySQL都能做,例如查詢優化、子查詢、索引、分區等等。
為什麼不能在所有場景下都使用MySQL呢?


任何資料庫,甚至任何產品,都有優缺點。因此,到底選擇哪個資料庫,這個決策過程是非常複雜的。

首先需要對比不同的方案、不同的產品,接著列出它們的優缺點;然後大家一起討論,看看大家對其的熟悉程度、學習成本、願不願意學習等等;接著還要進行小範圍的現有伺服器可運行測試、穩定性測試、可行性測試、性能測試、業務測試等等;最後還要關注它的可維護性以及運維成本,等等。

所以,題主關注的功能差異,可以作為一個建議點。但如果僅僅把這一個建議點,就當做決策,那也太兒戲了。

另外,很多答主說A具有某些功能但B不具有,或者B性能比A高之類的說法,其實也是在耍流氓。


性能。
在插入1000萬條數據後,隨機讀取1萬條。Postgres的性能比Mysql(innodb)快接近50倍。
(測試條件:相同資料庫結構、表結構、插入1000萬條隨機數據)
1. 1000萬條記錄Postgres隨機查詢1萬條查詢時間:

2. 1000萬條記錄Mysql(INNODB引擎)隨機查詢1萬條查詢時間:


首先,反駁一下題主的問題。
關於你說的「Oracle很差不能滿足淘寶的需要」,這完全是無稽之談。阿里最初就是用的MySQL,後來性能上不去,於是引入了當時互聯網行業第一台AIX小型機,跑Oracle,哎喲喂,那個爽啊,可勁用啊,性能完全不是問題啊,DBA生活也很安逸。這種架構在現在被稱為「傳統架構」,支撐了無數企業各種規模的信息系統。
既然如此,阿里為啥還要去IBM小雞、Oracle、EMC(去IOE),說白了,就是要從錢窟窿里跳出來。Oracle license以及十八摸小雞還有EMC高端存儲有多貴我就不多說了。隨著數據的不斷增長,那將是個天文數字啊。我們來看一下這個架構是怎麼燒錢的。要承受不斷增長的業務壓力,一般來說,無非兩種手段,一種是提高主機性能,加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就算完了,關於他們的神仙事迹,我就不在此多說了,想了解的話就看你自己的執行力了,書籍、博客已經提供了很多你想學到的知識。

如有紕漏,歡迎指正。


PG能做的MySQL都能做?

呵呵。

先給我放幾個JSON Path索引,再來幾個 XSLT 玩玩。


1、關係運算裡面的連接操作,常用的有三種,mysql有一種沒有實現,你知道原因嗎,知道影響嗎?

2、如果資料庫大小10T以上,你試一下mysql的管理能力,怎麼做備份?

3、高可用要求是有標準的,你知道這個標準大概多高嗎,用幹什麼方案嗎,mysql如何實現,複雜度如何?

4、有沒有見過2000張以上表的系統,數據至少每年10T,經常有6個以上連接的系統,mysql可以嗎?

5、如果不買第三方的同步複製工具, mysql對這方面的支持如何,能和商業資料庫比嗎?

把這些幾個常見的問題搞明白了,你就沒有這麼個疑問了了。


技術上講沒有什麼必要。Oracle能幹的MySQL都能幹。要來談什麼大數據、非企業級資料庫不能用的,都是扯淡。Facebook用的都是MySQL,你開的什麼公司數據量能大過Facebook?

當然如果你看問題光從技術上看,那就sometimes naive了。為什麼砸大錢買大廠的方案?因為政 治原因,萬一出事了,本公司領導可以容易讓廠商出來頂罪。絕大多數公司高層都是非技術人員,他們只認貴的就是好的,出了問題當然叫大廠的support出來頂,不管能不能解決,自己在決策上是沒有錯誤的。能解決:大廠就是好,服務到位,這個錢花得不冤。不能解決:連Oracle這麼貴的方案都不能解決,那是真沒辦法啦。反之,如果選了免費方案比如MySQL,出問題要是無法解決,肯定少不了一個當初貪便宜買次貨的罪名(雖然MySQL也賣支持,但是資料庫本身不要錢嘛,所以一定是便宜貨)


mysql已經可以干大部分事情了,商業資料庫或者postgres的必要性在哪裡?

你見過NOT NULL約束,但mysql還是能null的么?

你見過varcha(5),寫入welcome最後結果是welco么?

任何一個商業資料庫,都不能容忍的事情!


我覺得開源文化雖然很好,可是不經意的培養了很多傻子……真當商業軟體如此不堪啊


相同硬體 Oracle 的性能穩定性都比 Mysql 強,特性領先15年,98年8i的很多特性,Mysql現在都還不具備。對於資深dba來說,mysql就是個裝數據的盒子,基本沒啥牛逼特性。


樓主可以在百度或者google搜索下mysql security 和 oracle security, 或者security 用中文「安全加固」代替, 就可以看到兩者的區別了;
我前不久,幫人家做個資料庫安全加固培訓,mysql 基本就是1,2頁紙,而且大部分還是依賴操作系統的功能; 而oracle 11g 用了100頁PPT,還是超級濃縮精簡版;這只是資料庫的一個功能分支,由點及面,可看出其中的差別了;

hadoop有一張圖,用一堆小魚組成個大鯊魚的形狀來形容現在的時代,除了選擇大鯊魚,也可以選擇一堆小魚堆疊成大魚,組合成甚至比大魚還大的體量和攻擊力; 撇開實際的應用場景,一台exadata一個機櫃,對比50-100台pc 伺服器組成的若干的機櫃的管理處理能力(包括伺服器的故障維護,IDC的電力,空調製冷等等),應該是完全不同的處理場景,非單純的軟體投資這麼簡單;

綜合來說,兩者的區別,就好像自行車和防彈裝甲車的區別, 當然,如果只是(很多學生)需要從家裡到幾公里外的學校上學,那其實用單車反而更適合,大部分用mysql的需求場景是這樣的:對資料庫的高級功能、穩定性、安全性等其實要求很低(或者從其它層面解決這些問題);


為什麼不能在所有場景下都使用MySQL呢?

因為MySQL並不能適應所有場景

阿里用MySQL承擔了大部分的資料庫工作,那是因為阿里有一大批的MySQL技術專家,阿里光是內部淘汰的MySQL架構技術開源出來,就夠很多小公司用的不錯了。

現實是大部分公司都不具備阿里的研發實力,像不差錢的金融電信等行業,包括一些初創的互聯網公司,是沒有必要在資料庫架構上花費過多的精力的。

而且Oracle比MySQL要強太多了。當業務規模小,幾台Oracle就能搞定的時候,同樣的錢用在研發MySQL上,可能就搞不定了。


MySQL的innodb引擎有事務了,而且也能進行很多比較複雜的查詢,包括嵌套查詢等。

  • MySQL在業務系統里的性能相比SQL Server還是查很多,主要是Join的性能
  • MYSQL相比SQLServer和PostgreSQL,缺少CTE,ROW_number和其他窗口函數,導致一些複雜的SQL寫起來非常的不方便。

如果數據量比較大,可以參考淘寶,也能做到很大的集群,淘寶不是把Oracle都去掉了嗎?據說Oracle很差,不能滿足淘寶的需要。

  • 不要覺得集群就能解決所有問題,集群是增加整個系統的複雜度。
  • ACID問題,資料庫表設計問題都是引入集群後需要考慮的
  • 淘寶放棄Oracle並不是因為Oracle差,而是他的數據已經超過了Oracle設計初期的目標,Oracle不會為某一家公司,個性的需求去升級他的產品(畢竟像阿里這麼大的公司,全世界也沒有幾家),阿里只能選擇在開源的系統上進行二次開發。

現在流行的hadoop很多時候都是和MySQL配合的。

  • hadoop的應用場景在大數據方向,更多的是配合hdfs文本方式的,即使要落地數據倉庫,也不會選擇MYSQL,可以選擇Postgresql( Greenplum )或kylin

這樣看起來的話,其它資料庫好像都能用MySQL來代替,並且MySQL是開源免費的。如果擔心Oracle操控MySQL,還可以選擇MariaDB。為何還有那麼多企業買商業資料庫?一般的商業資料庫價格也不低。

  • 除了軟體的價格,請把人力成本也計算在內,如果對性能有要求,相同的業務邏輯,所以不同的資料庫要達到相同的效果,對於人員的要求也是不同的,薪資也會不同。

還有就是有一種據說比MySQL更開放的PostgreSQL資料庫.感覺它的用戶沒有MySQL的那麼多。而且它能做的MySQL都能做,例如查詢優化、子查詢、索引、分區等等。

  • PostgreSQL的用戶相比MYSQL是少,但這個有什麼影響呢?遇到問題沒有人幫你解決?
  • PostgreSQL中能做的MYSQL並不是都能做
    • MYSQL 不能存儲JSON數據(這裡不是說按照文本方式進行存儲)
    • MYSQL 不支持空間索引
    • MYSQL 不支持表繼承

為什麼不能在所有場景下都使用MySQL呢?

  • MYSQL相比與其他資料庫還沒有足夠的優秀,每個資料庫都有優勢和缺陷,具體選用什麼資料庫還要看自己的業務場景。

樓主問出這個問題真畢業生,MySql是能幹大部分事情,但是還是有很多事情它幹不了,在它能幹的很事情上面,乾的也不算好,說實在的,有時候用MySql實屬無奈之舉,Oracle賣那麼貴不是沒道理的


似乎facebook和阿里在用mysql的時候都做了或多或少的優化,不談這個用XX公司很牛-&>XX公司也使用mysql-&>你也使用mysql吧這種邏輯取推薦別人使用mysql是很不厚道的


不同應用場景的需求不同。金融用oracle。地理信息postgrsql。緩存用redis。數據倉庫用hive,數據分析總spark。分散式用hadoop等等。不能一個mysql用遍所有需求,因為它有的達不到。


國企和政府都用商業的,因為有售後...........


阿里不用oracle是因為oracle收費好吧?


用MySQL,如果要做點什麼高級統計計算什麼的功能,好像得自己在應用程序里寫。

用PG,則自已提供或者第三方擴展提供了很多優秀的計算功能。不用自己在應用程里再做一層了,直接拿到結果就好了。

還有全球知名的PostGIS,如果只是查查neaby distance什麼的,可能感覺不到什麼。但是如果你要spatial analysis什麼的,對於很多需求來說基本上可以考慮與ESRI的產品做比較了。


最近看了pg9.5已經支持ip類了,不錯非常不錯,開始在mysql和oracle之間徘徊現在是mysql和pg 之間徘徊了,最近在做一個非常大的項目,43億條數據..


不是還有小部分不能做嘛。


推薦閱讀:

SQL Server和Oracle,我該選擇哪一個去深入學習?他們各有什麼優勢和劣勢?Ps.我是做.NET開發的。
什麼操作用協程比較好?
用 python 寫的爬蟲,有哪些提高的技能?
學校圖書館購買的資料庫是什麼?
(文獻搜索大神進)跪求!!求外國免費的資料庫鏈接。能找到英文圖書和英語期刊論文,能全文查看論文的那種?

TAG:資料庫 | MySQL | 甲骨文Oracle | DB2 | PostgreSQL |