1. 程式人生 > >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 等資料庫。

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

結語

為什麼要寫這篇文章呢?因為鬆哥打算出幾篇文章給大家介紹一下分散式資料庫中介軟體 MyCat 和 Sharding-JDBC 的用法,有了這些分散式資料庫中介軟體,就可以讓你的 MySQL 真正具備可以媲美大型資料庫的能力。本文算是一個引子吧。

後面鬆哥就先更新 MyCat 。

關注公眾號【江南一點雨】,專注於 Spring Boot+微服務以及前後端分離等全棧技術,定期視訊教程分享,關注後回覆 Java ,領取鬆哥為你精心準備的 Java 乾貨!

相關推薦

MySQL 只能專案要說公道

鬆哥上學那會,很多人對 MySQL 有一些偏見,偏見主要集中在以下幾方面: MySQL 不支援事務(事實上 MyISAM 有表鎖,但是效率比較低) MySQL 儲存的資料量比較小,適合小專案,大專案還是得上 Oracle、DB2 等 這麼多年過去了,鬆哥自己在開發中一直是以 MySQL 為主,我覺得我有必

#某里程序員吐槽:好多本司混不下去的只能公司當領導,只指揮不幹活

公司其實就像一個江湖,能力有高有低,因此很容易造成彼此看不起的現象。有小公司的程式設計師就在網路上吐槽,稱其公司來了阿里前員工,感覺就是個渣渣,天天只動嘴不幹活,能力也不見得高到哪裡去。 如果有想學習java的程式設計師,可來我們的java學習扣qun:94311,1692免費送java的視訊教

創業初期,為什麼程式而不是APP?

       在如今網際網路高速發展,萬眾創新創業時代,產品需要快速迭代,快速找到使用者去驗證你的商業模式,不斷微調產品方向,最終才做出使用者真正需要的產品。   但是,把重點放在埋頭開發APP耽誤了最佳的試錯時間,市場機會便會稍縱即逝。   而在有了

酷可科技:企業程式的十個理由

企業要做小程式的十個理由 自打小程式釋出以來,越來越多的企業上線了自己的小程式,也有一部分企業仍然保持觀望狀態。 那麼對於企業來說,小程式是否有必要?答案是:當然必要。小程式不僅能提升品牌形象,對維繫使用者也大有幫助。 來來來,讓上線君為你闡述,“企業要做小程式的十大理由。”

馬雲100%信任的CEO,卻說大公司,原來是這意思

"我知道阿里巴巴這樣的公司管起來不容易,我100%相信張勇將會比我做得更好!" 剛剛,馬雲在阿里巴巴全球投資者大會上,用這麼一句話評價了現任CEO張勇,把接近尾聲的大會再次推向了高潮! "100%信任!"馬雲這句話絕不是說說而已,而是經過了多年對張勇的考驗和觀察。

商城專案實現購物車功能的時候除了個bug...

@Autowired private ItemService itemService; @Value("${COOKIE_CART_EXPIRE}") private int COOKIE_CART_EXPIRE; @Autowired private Cart

PHP+MySQL開發專案的集合筆記(三)關聯資料庫,並限制小數位數

需求:先關聯資料,最後顯示資料限制,小數的位數。 MySQL語句: SELECT `ID`,`TDC_PlanningHC`,`TDC_EntryHC`,`TDC_ExitHC`,`Priority_num`,`Priority_char` FROM rmk WH

PHP+MySQL開發專案的集合筆記(四)控制div的排列和p標籤,從另外表讀取加工資料並規定小數點位數

需求:HTML頁面增加註釋,div盒子控制曲線大小,多個盒子相互巢狀。具體資料從另外表內獲取。 HTML頁面更改: <!-- Morris chart - Sales --> <!-- Change! -->

SSH框架結合MySql資料庫實現常用專案(名片系統、商品管理、商品推薦、登陸註冊)

概述        這裡主要使用hibernate3.0、struts2.0和spring框架結合mysql資料庫搭建的開發環境,實現了幾個在開發學習中常用到的功能,名片系統、商品管理、商品推薦、登陸註冊、css結合js簡單優化頁面

nodejs+mysql+angularjs+bootstrap招聘類app專案

程式碼地址:https://github.com/nbfulei/nodeJS_web 目前正在完善中,聊天功能也正在開發中,有好的建議的同學可以在下方留言,一起討論學習,此專案我會長期維護下去! 專案部分截圖如下: 登陸頁:        

完四個專案的收穫

一、員工資訊管理系統     1)繫結下拉列表的知識 1 private void Form1_Load(object sender, EventArgs e) 2 { 3 string sql = "select *

一個spring boot專案

口號:省錢小幫手 1、開啟一個spring boot專案,用於做後端伺服器 2、用微信小程式作為前端,小程式實現掃描入庫和輸入入庫兩種模式 3、實現獲取淘寶、京東(特別是京東到家)指定商品的東西的價格的功能,有相關的介面 擴充套件功能: 所有有價格波動和趨勢的都可以整合進來,對比分析各家價格

KING教你android專案(二)---實現登陸頁面並跳轉和簡單的註冊頁面

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_par

【程式設計棧】這輩子沒法太多事情,所以每一件事都做到精妙絕倫

關於 就像恐龍有植食和肉食性的區別,我深刻的認識到原來人類不是雜事雜食性動物,真有人就不吃肉,好吧,那我就承認自己是屬於暴龍級別的那一種。嚴重的嗜肉動物,總要喊著減肥但是體重卻一直飆升的那一款!T^T雖然不願意喊但是還是要說,我要瘦!!!!!我是被Eric Bodden

Struts2註解+JDBC+MySQL專案應用

很簡易的Struts2,用JDBC連線MySQL資料庫。用於學習Struts2註解和JDBC基礎。 一、建立資料庫。小哆安裝的MySQL資料庫 /* Navicat MySQL Data T

jsp+servlet+mysql實現班級資訊管理的web專案

jsp+servlet+mysql實現班級資訊管理的javaweb小專案 功能描述:能夠建立和檢視班級列表,以及檢視班級的學生資訊,可以為每個班級新增學生。除此之外還實現了一個登陸介面。 在最後加上了資料庫建立的sql語句 專案下載地址:https://d

KING教你android專案(一)

寫在專案開始之前: 最近關於android的視訊教程,入門的書籍也已經有很多了,例如我的入門就是看了mars的視訊教程。但是這麼一圈學習下來,覺得真正快速提高的,不是在看視訊,而是在實際工作中動手做專

TensorFlow框架實時人臉識別專案(二)

在第一部分中,分析了整個小專案的體系,重點討論了用於人臉檢測對齊的mtcnn網路的實現原理,並利用膝上型電腦自帶的攝像頭進行了測試。今天在這裡要討論的重點是人臉識別中的核心部分——facenet網路。facenet是Google開源的人臉識別框架,它的作用是把輸入的人臉影象對

初學者:想一些專案需要掌握哪些技術

作為初學者想要更有效率的學習Java技術,理論中穿插專案練習很有必要。但專案練習要在你掌握了一定的技術之後才能做的,它是用來加深你對技術理解的。 就拿Javaweb來說吧,如果你想要做專案,是需要掌握以下技術的(個人見解,如果有其他的理解歡迎大家一起討論分析):

2018年新時代到來,還不知道為什麼程式嗎?

​ 剛剛過去的2017年,有兩個新生的事物:小程式、新零售。所以,2017年,也被成為小程式元年、新零售元年。而在這之前,資本市場的動態,大資料等等,都給了一個非常明確的訊號給我們,新時代要來了! 我們可以非常明顯的看到,資本市場越來越不喜歡純網際網路公司,越來越青睞投資