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

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

Jun 25, 2019 pm 05:41 PM
mysql

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP 的大數據結構處理技巧 PHP 的大數據結構處理技巧 May 08, 2024 am 10:24 AM

PHP 的大數據結構處理技巧

如何優化 PHP 中的 MySQL 查詢效能? 如何優化 PHP 中的 MySQL 查詢效能? Jun 03, 2024 pm 08:11 PM

如何優化 PHP 中的 MySQL 查詢效能?

如何在 PHP 中使用 MySQL 備份和還原? 如何在 PHP 中使用 MySQL 備份和還原? Jun 03, 2024 pm 12:19 PM

如何在 PHP 中使用 MySQL 備份和還原?

如何使用 PHP 插入資料到 MySQL 表? 如何使用 PHP 插入資料到 MySQL 表? Jun 02, 2024 pm 02:26 PM

如何使用 PHP 插入資料到 MySQL 表?

Java 枚舉類型在資料庫中的應用場景有哪些? Java 枚舉類型在資料庫中的應用場景有哪些? May 05, 2024 am 09:06 AM

Java 枚舉類型在資料庫中的應用場景有哪些?

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 Dec 09, 2024 am 11:42 AM

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤

如何在 PHP 中使用 MySQL 預存程序? 如何在 PHP 中使用 MySQL 預存程序? Jun 02, 2024 pm 02:13 PM

如何在 PHP 中使用 MySQL 預存程序?

如何使用 PHP 建立 MySQL 表? 如何使用 PHP 建立 MySQL 表? Jun 04, 2024 pm 01:57 PM

如何使用 PHP 建立 MySQL 表?

See all articles