摘要:松哥上學(xué)那會(huì),很多人對(duì)有一些偏見(jiàn),偏見(jiàn)主要集中在以下幾方面不支持事務(wù)事實(shí)上有表鎖,但是效率比較低存儲(chǔ)的數(shù)據(jù)量比較小,適合小項(xiàng)目,大項(xiàng)目還是得上等這么多年過(guò)去了,松哥自己在開(kāi)發(fā)中一直是以為主,我覺(jué)得我有必要說(shuō)兩句公道話(huà)了。
松哥上學(xué)那會(huì),很多人對(duì) MySQL 有一些偏見(jiàn),偏見(jiàn)主要集中在以下幾方面:
MySQL 不支持事務(wù)(事實(shí)上 MyISAM 有表鎖,但是效率比較低)
MySQL 存儲(chǔ)的數(shù)據(jù)量比較小,適合小項(xiàng)目,大項(xiàng)目還是得上 Oracle、DB2 等
這么多年過(guò)去了,松哥自己在開(kāi)發(fā)中一直是以 MySQL 為主,我覺(jué)得我有必要說(shuō)兩句公道話(huà)了。
公道話(huà) 第一個(gè)問(wèn)題關(guān)于第一個(gè)不支持事務(wù)的問(wèn)題,這有一定的歷史原因。MySQL 從設(shè)計(jì)之初,存儲(chǔ)引擎就是可插拔的,允許公司或者個(gè)人按照自己的需求定義自己的存儲(chǔ)引擎(當(dāng)然,普通的公司或者個(gè)人其實(shí)是沒(méi)有這個(gè)實(shí)力的)。MySQL 自研的使用較廣的存儲(chǔ)引擎是 MyISAM ,MyISAM 支持表鎖,不支持行鎖,所以在處理高并發(fā)寫(xiě)操作時(shí)效率要低一些,另外 MyISAM 也不支持外鍵(雖然現(xiàn)在實(shí)際項(xiàng)目中外鍵已經(jīng)用的比較少了)。
但是這個(gè)問(wèn)題并非無(wú)解。這就不得不說(shuō) MySQL 中另外一個(gè)大名鼎鼎的存儲(chǔ)引擎 InnoDB 了。
InnoDB 存儲(chǔ)引擎是由一家位于芬蘭赫爾辛基的名為 Innobase Oy 的公司開(kāi)發(fā)的,InnoDB 存儲(chǔ)引擎的歷史甚至比 MySQL 還要悠久。
InnoDB 剛剛開(kāi)發(fā)的時(shí)侯,就是作為一個(gè)完整的數(shù)據(jù)庫(kù)來(lái)開(kāi)發(fā)的,因此功能很完備。開(kāi)發(fā)出來(lái)之后,創(chuàng)始人是想將這個(gè)數(shù)據(jù)庫(kù)賣(mài)掉的,但是沒(méi)有找到買(mǎi)家。
后來(lái) MySQL2.0 推出后,這種可插拔的存儲(chǔ)引擎吸引了 Innobase Oy 公司創(chuàng)始人 Heikki Tuuri 的注意,在和 MySQL 溝通之后,決定將 InnoDB 作為一個(gè)存儲(chǔ)引擎引入到 MySQL 中,MySQL 雖然支持 InnoDB ,但是實(shí)際上還是主推自家的 MyISAM。
但是 InnoDB 實(shí)在太優(yōu)秀了,最終在 2006 年的時(shí)侯,成功吸引到大魔王 Oracle 的注意,大手一揮,就把 InnoDB 收購(gòu)了。
MySQL 主推自家的 MyISAM ,日子過(guò)得也很慘淡,最終在 2008 年被 sun 公司以 10 億美元拿下,這個(gè)操作鞏固了 sun 在開(kāi)源領(lǐng)域的領(lǐng)袖的地位,可是一直以來(lái) sun 公司的變現(xiàn)能力都比較弱,最終 sun 自己在 2009 年被 Oracle 收入囊中。那會(huì)松哥還在讀高中,某一天吃午飯的時(shí)侯,餐廳的電視機(jī)上播放央視的午間新聞,看到了這條消息,現(xiàn)在還有一些印象。
Oracle 收購(gòu) sun 之后,InnoDB 和 MySQL 就都成了 Oracle 的產(chǎn)品了,這下整合就變得非常容易了,在后來(lái)發(fā)布的版本中,InnoDB 慢慢就成為了 MySQL 的默認(rèn)存儲(chǔ)引擎。在最新的 MySQL8 中,元數(shù)據(jù)表也使用了 InnoDB 作為存儲(chǔ)引擎。
InnoDB 存儲(chǔ)引擎主要有如下特點(diǎn):
支持事務(wù)
支持 4 個(gè)級(jí)別的事務(wù)隔離
支持多版本讀
支持行級(jí)鎖
讀寫(xiě)阻塞與事務(wù)隔離級(jí)別相關(guān)
支持緩存,既能緩存索引,也能緩存數(shù)據(jù)
整個(gè)表和主鍵以 Cluster 方式存儲(chǔ),組成一顆平衡樹(shù)
...
當(dāng)然也不是說(shuō) InnoDB 一定就是好的,在實(shí)際開(kāi)發(fā)中,還是要根據(jù)具體的場(chǎng)景來(lái)選擇到底是使用 InnoDB 還是 MyISAM 。
所以第一個(gè)問(wèn)題不攻自破。
第二個(gè)問(wèn)題第二個(gè)問(wèn)題確實(shí)是一個(gè)硬傷。
你要是拿 MySQL 和 Oracle 比,肯定是要差一點(diǎn)點(diǎn)感覺(jué)。畢竟一個(gè)免費(fèi)一個(gè)收費(fèi),而且收費(fèi)的還很貴。但是這個(gè)問(wèn)題并非無(wú)解。
相信很多小伙伴都聽(tīng)過(guò)國(guó)內(nèi)很多大廠都使用了 MySQL 來(lái)存儲(chǔ)數(shù)據(jù)。大廠用 MySQL ,是因?yàn)樗麄冇心芰ρ邪l(fā)出自己的存儲(chǔ)引擎,小廠一般沒(méi)有這個(gè)實(shí)力,沒(méi)法去研發(fā)出自己的存儲(chǔ)引擎,但是 Oracle 又用不起,那么怎么辦呢?
這幾年興起的分布式數(shù)據(jù)庫(kù)中間件剛好可以很好的解決這個(gè)問(wèn)題。Java 領(lǐng)域,類(lèi)似的工具很多,例如 Sharding-JDBC 、MyCat 等,通過(guò)這些工具,可以很好的實(shí)現(xiàn)數(shù)據(jù)庫(kù)分庫(kù)分表,以及數(shù)據(jù)表的動(dòng)態(tài)擴(kuò)展、讀寫(xiě)分離、分布式事務(wù)解決等。有了這些工具,極大的提高了 MySQL 的應(yīng)用場(chǎng)景。
另一方面,近些年流行微服務(wù),這不是單純的炒概念,微服務(wù)架構(gòu)將一個(gè)大的項(xiàng)目拆分成很多個(gè)小的微服務(wù),各個(gè)微服務(wù)處理自己很小的一部分事情,這更符合人類(lèi)分工協(xié)作的特點(diǎn)。在微服務(wù)架構(gòu)中,我們對(duì)大表的需求、對(duì)多表聯(lián)合查詢(xún)的需求都會(huì)有所降低,MySQL 也更具用武之地。
因此,第二個(gè)問(wèn)題也是可以解決的。
據(jù)松哥了解,互聯(lián)網(wǎng)公司使用 MySQL 還是比較多的,傳統(tǒng)軟件公司,可能會(huì)更青睞 Oracle 等數(shù)據(jù)庫(kù)。
不過(guò)話(huà)說(shuō)回來(lái),云計(jì)算,也是未來(lái)一個(gè)方向。
結(jié)語(yǔ)為什么要寫(xiě)這篇文章呢?因?yàn)樗筛绱蛩愠鰩灼恼陆o大家介紹一下分布式數(shù)據(jù)庫(kù)中間件 MyCat 和 Sharding-JDBC 的用法,有了這些分布式數(shù)據(jù)庫(kù)中間件,就可以讓你的 MySQL 真正具備可以媲美大型數(shù)據(jù)庫(kù)的能力。本文算是一個(gè)引子吧。
后面松哥就先更新 MyCat 。
關(guān)注公眾號(hào)【江南一點(diǎn)雨】,專(zhuān)注于 Spring Boot+微服務(wù)以及前后端分離等全棧技術(shù),定期視頻教程分享,關(guān)注后回復(fù) Java ,領(lǐng)取松哥為你精心準(zhǔn)備的 Java 干貨!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77863.html
摘要:引入中間件之后,我們的應(yīng)用程序?qū)⒅恍枰B接就行了,再由去操作各種不同的,各個(gè)分布式數(shù)據(jù)庫(kù)的排序結(jié)果集合并數(shù)據(jù)過(guò)濾等操作都在中完成,這樣我們的應(yīng)用又可以專(zhuān)注于業(yè)務(wù)的開(kāi)發(fā)了,那些繁瑣的重復(fù)的操作,又交給去完成。 關(guān)于 MyCat 的鋪墊文章已經(jīng)寫(xiě)了兩篇了: MySQL 只能做小項(xiàng)目?松哥要說(shuō)幾句公道話(huà)! 北冥有 Data,其名為鯤,鯤之大,一個(gè) MySQL 放不下! 今天是最后一次鋪墊...
摘要:經(jīng)常有讀者在公眾號(hào)上問(wèn)亂碼的問(wèn)題,昨天又有一個(gè)小伙伴問(wèn)及此事,其實(shí)這個(gè)問(wèn)題很簡(jiǎn)單,但是想要說(shuō)清楚卻并不容易,因?yàn)槊總€(gè)人亂碼的原因都不一樣,給每位小伙伴都把亂碼的原因講一遍也挺費(fèi)時(shí)間的,因此,松哥今天決定寫(xiě)一篇文章,和大伙好好捋捋中的亂碼問(wèn)題 經(jīng)常有讀者在公眾號(hào)上問(wèn) JavaWeb 亂碼的問(wèn)題,昨天又有一個(gè)小伙伴問(wèn)及此事,其實(shí)這個(gè)問(wèn)題很簡(jiǎn)單,但是想要說(shuō)清楚卻并不容易,因?yàn)槊總€(gè)人亂碼的原因...
閱讀 1084·2021-10-08 10:04
閱讀 3523·2021-08-05 10:01
閱讀 2278·2019-08-30 11:04
閱讀 1794·2019-08-29 15:29
閱讀 836·2019-08-29 15:12
閱讀 1670·2019-08-26 12:11
閱讀 3115·2019-08-26 11:33
閱讀 1163·2019-08-26 10:23