首頁  >  文章  >  資料庫  >  MySQL只能做小專案?是時候說幾句公道話了!

MySQL只能做小專案?是時候說幾句公道話了!

步履不停
步履不停原創
2019-06-25 17:41:231955瀏覽

MySQL只能做小專案?是時候說幾句公道話了!

我上學那會,很多人對MySQL 有一些偏見,偏見主要集中在以下幾個方面:

1. MySQL 不支援事務(事實上MyISAM 有表鎖,但效率比較低)

2. MySQL 儲存的資料量比較小,適合小項目,大項目還是得上Oracle、DB2 等

這麼多年過去了,我自己在開發中一直是以MySQL 為主,我覺得我有必要說兩句公道話了。

公道話

第一個問題

關於第一個不支援事務的問題,這有一定的歷史原因。 MySQL 從設計之初,儲存引擎就是可插拔的,允許公司或個人按照自己的需求定義自己的儲存引擎(當然,普通的公司或個人其實是沒有這個實力的)。 MySQL 自研的使用較廣的儲存引擎是MyISAM ,MyISAM 支援表鎖,不支援行鎖,所以在處理高並發寫入操作時效率要低一些,另外MyISAM 也不支援外鍵(雖然現在實際專案中外鍵已經用的比較少了)。

但是這個問題並非無解。這就不得不說 MySQL 中另一個大名鼎鼎的儲存引擎 InnoDB 了。

InnoDB 儲存引擎是由一家位於芬蘭赫爾辛基的名為 Innobase Oy 的公司開發的,InnoDB 儲存引擎的歷史甚至比 MySQL 還要悠久。

InnoDB 剛開發的時侯,就是作為一個完整的資料庫來開發的,因此功能很完備。開發出來之後,創辦人是想將這個資料庫賣掉的,但沒有找到買家。

後來MySQL2.0 推出後,這款可插拔的儲存引擎吸引了Innobase Oy 公司創辦人Heikki Tuuri 的注意,在和MySQL 溝通之後,決定將InnoDB 作為一個儲存引擎引入到MySQL 中,MySQL 雖然支援InnoDB ,但實際上還是主推自家的MyISAM。

但是 InnoDB 太優秀了,最終在 2006 年的時侯,成功吸引到大魔王 Oracle 的注意,大手一揮,就把 InnoDB 收購了。

MySQL 主推自家的MyISAM ,日子過得也很慘淡,最終在2008 年被sun 公司以10 億美元拿下,這個操作鞏固了sun 在開源領域的領袖的地位,可是一直以來sun公司的變現能力都比較弱,最後sun 自己在2009 年被Oracle 收入囊中。那會我還在讀高中,某一天吃午餐的時侯,餐廳的電視機上播放央視的午餐新聞,看到了這條消息,現在還有一些印象。

Oracle 收購sun 之後,InnoDB 和MySQL 就都變成了Oracle 的產品了,這下整合就變得非常容易了,在後來發布的版本中,InnoDB 慢慢就成為了MySQL 的預設存儲引擎。在最新的 MySQL8 中,元資料表也使用了 InnoDB 作為儲存引擎。

InnoDB 儲存引擎主要有以下特點:

1. 支援交易

2. 支援4 個層級的交易隔離

3. 支援多重版本讀取

4. 支援行級鎖定

5. 讀寫阻塞與事務隔離等級相關

6. 支援緩存,既能快取索引,也能快取資料

7. 整個表和主鍵以Cluster 方式存儲,組成一顆平衡樹

#8. ...

#當然也不是說InnoDB 一定就是好的,在實際開發中,還是要根據具體的場景來選擇到底要使用InnoDB 還是MyISAM 。

所以第一個問題不攻自破。

第二個問題

第二個問題確實是硬傷。

你要是拿 MySQL 和 Oracle 比,一定是要差一點點感覺。畢竟一個免費一個收費,而且收費的還很貴。但這個問題並非無解。

相信很多小夥伴都聽過國內很多大廠都使用了 MySQL 來儲存資料。大廠用 MySQL ,是因為他們有能力研發出自己的儲存引擎,小廠一般沒有這個實力,沒辦法去研發出自己的儲存引擎,但是 Oracle 又用不起,那麼怎麼辦呢?

這幾年興起的分散式資料庫中間件剛好可以很好的解決這個問題。 Java 領域,類似的工具很多,例如 Sharding-JDBC 、MyCat 等,透過這些工具,可以很好的實作資料庫分庫分錶,以及資料表的動態擴充、讀寫分離、分散式交易解決等。有了這些工具,極大的提高了 MySQL 的應用程式場景。

另一方面,近年來流行微服務,這不是單純的炒概念,微服務架構將一個大的專案拆分成很多個小的微服務,各個微服務處理自己很小的一部分事情,這比較符合人類分工協作的特質。在微服務架構中,我們對大表的需求、多表聯合查詢的需求都會降低,MySQL 也更具用武之地。

因此,第二個問題也是可以解決的。

據我了解,網路公司使用 MySQL 還是比較多的,傳統軟體公司,可能會更青睞 Oracle 等資料庫。

不過話說回來,雲端運算,也是未來一個方向。

更多MySQL相關技術文章,請造訪MySQL教學欄位進行學習!

以上是MySQL只能做小專案?是時候說幾句公道話了!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn