沒有宮廷內(nèi)斗赊锚,數(shù)據(jù)庫界的延禧攻略

各位老鐵們羊赵,你們有沒有想老張昧捷,最近老張的才華被工作的繁忙所限制了靡挥,所以一直沒時間更博跋破,今兒個時隔數(shù)日我們終于再次見面啦(很開心)毒返!最近有部特別火的宮廷戲舷手,不知道大家有沒有看男窟,劇名叫做《延禧攻略》蝎宇,講述得是一個宮女,一路過關(guān)斬將兔乞,最后成為皇上最寵愛的令貴妃的故事庸追。加上我本人巨愛這類題材淡溯,所以癡迷得不得了咱娶。(好像暴露了自己沒有更博的真正原因哈哈)。宮廷類的劇屈糊,都是后宮嬪妃之間的爾虞吾詐逻锐,勾心斗角昧诱,有你沒我盏档,有我沒你的殘酷事實纲熏。勝者為王局劲,敗者為寇這種思想好像從古代就一直延續(xù)到今日鱼填。非要分出個勝負苹丸,分出個誰好,誰壞才罷休宦言。

在數(shù)據(jù)庫領域也會有此類問題奠旺,老張我混跡開源數(shù)據(jù)庫圈多年响疚。MySQL數(shù)據(jù)庫占領著開源數(shù)據(jù)庫的頭把交椅忿晕,MongoDB占領著NoSQL數(shù)據(jù)庫的第一位践盼。我們來看下數(shù)據(jù)庫的整體排名情況;

兩者都是第一赖淤,所有總會拿來比較。也會經(jīng)常被人問及到諸如此類的問題MongoDB4.0已經(jīng)問世了绷耍,而且支持事務了褂始,是不是將來可以取代MySQL了崎苗。MySQL和MongoDB哪個數(shù)據(jù)庫好用啊舀寓。今天老張想通過這篇文章互墓,帶著大家全方位解讀MySQL與MongoDB的區(qū)別篡撵。讓有困惑的老鐵們明白育谬,沒有誰替代誰膛檀,只有哪個場景更適合誰。

我們從下面四個方向依次闡明兩者的區(qū)別互站。只有更了解彼此胡桃,讓能更好地利用它們的功能性翠胰。

第一部分:數(shù)據(jù)庫概述

我們先來了解一下MySQL這個數(shù)據(jù)庫之景;

再來學習一下MySQL數(shù)據(jù)庫的特點锻狗;

MySQL了解完轻纪,同理我們來了解MongoDB及其特點的介紹刻帚;

MongoDB特點介紹:

學習完第一部分之后掂僵,我們對兩者數(shù)據(jù)庫都有了一定的認識锰蓬;接下來去從運維的角度來檢驗兩者的不同互妓;

第二部分:日常運維管理維度

1. 術(shù)語和概念的差異

結(jié)論可以看出摹芙,關(guān)系型數(shù)據(jù)庫中的表交胚,在MongoDB中叫做集合。行在MongoDB中叫做文檔。所以經(jīng)常管MongoDB叫做文檔型數(shù)據(jù)庫。

2.存儲數(shù)據(jù)結(jié)構(gòu)的差異

在關(guān)系型數(shù)據(jù)庫中設計表,有些信息需要多表記錄田篇。

而在MongoDB中,上面的三張表衣陶,就變成下面的這一段代碼就可以實現(xiàn)了。

{_id:"M416",name:"zhangsu",phone:[1234,5678],.....}

MongoDB表設計的特點

數(shù)據(jù)聚合

數(shù)據(jù)嵌套

數(shù)組結(jié)構(gòu)

3.啟動配置文件格式差異

MySQL數(shù)據(jù)庫的配置叫做my.cnf授翻,我們來看下它的記錄方式淮菠;


MongoDB配置文件使用Yaml格式

4.增刪改查操作的差異

5.事務支持的差異

但隨著MongoDB 4.0的問世低剔,它將支持多文檔事務镀琉,屆時MongoDB將成為唯一能夠同時支持速度替梨,靈活性,JSON文檔模型優(yōu)勢 和ACID數(shù)據(jù)完整性保證的數(shù)據(jù)庫挽鞠。

所謂的多文檔事務,可以理解為關(guān)系型數(shù)據(jù)庫的多行事務。在關(guān)系型的事務支持中,大家?guī)缀鯚o一例外支持同一事務內(nèi)操作的原子性攘乒,即要么全部提交负饲,要么全部回滾。這個同一事務內(nèi)可以有多個操作,針對于多個表刽沾,或者是同一個表內(nèi)的多行數(shù)據(jù)。

總結(jié):隨著事務支持的增加,MongoDB功能上更接近于關(guān)系型數(shù)據(jù)庫顿乒,但是和關(guān)系型還是有本質(zhì)上的區(qū)別:MySQL是基于關(guān)系模型的數(shù)據(jù)庫吧雹,對各種數(shù)據(jù)多變的場景如物聯(lián)網(wǎng)或社交化并沒有MongoDB支持得好访得。MongoDB的JSON模型則具有動態(tài)靈活鳄炉,數(shù)據(jù)庫無須下線就可以進行模式變遷升級记靡,在這種場景下面,選擇MongoDB會特別合適呀洲。

6.備份上的差異

MySQL備份方式:

MongoDB備份方式:

邏輯備份與恢復

1.mongodump

2.mongorestore

3.mongoexport

4.mongoimport

注:MongoDB目前為止還沒有像xtrabackup這種好用的備份工具滓窍。所以一般來說,都是使用邏輯備份方式來進行操作

從運維角度我們對它們有了更深的認識之后舶替,我們來從集群架構(gòu)的維度出發(fā)抛蚁,去探究其更深的不同之處。

第三部分:集群架構(gòu)層面

1.集群架構(gòu)層面上的差異

我們先從MySQL復制的角度入手;然后再介紹MySQL高可用集群架構(gòu)

MySQL主從復制原理圖

MySQL復制種類總結(jié);

異步復制:

通常沒說明指的都是異步血当,即主庫執(zhí)行完Commit后箩退,在主庫寫入Binlog日志后即可成功返回客戶端吠昭,無需等Binlog日志傳送給從庫府喳,一旦主庫宕機,有可能會丟失日志孔轴。

半同步復制:MySQL5.5版本之后引入了半同步復制功能收厨,主從服務器必須同時安裝半同步復制插件,才能開啟該復制功能碑诉。在該功能下漫仆,確保從庫接收完主庫傳遞過來的binlog內(nèi)容已經(jīng)寫入到自己的relay log里面了,才會通知主庫上面的等待線程建芙,該操作完畢。如果等待超時,超過rpl_semi_sync_master_timeout參數(shù)設置的時間,則關(guān)閉半同步復制竹宋,并自動轉(zhuǎn)換為異步復制模式宪潮,直到至少有一臺從庫通知主庫已經(jīng)接收到binlog信息了為止。

多源復制:

所謂多源復制,就是把多臺主庫的數(shù)據(jù)同步到一臺從庫服務器上,從庫會創(chuàng)建通往每個主庫的管道回官。在MySQL5.7之前的版本中区转,只能實現(xiàn)一主一從、一主多從或者多主多從的復制架構(gòu)侄泽,如果想要實現(xiàn)多主一從的復制悼尾,只能使用MariaDB。MySQL 5.7版本已經(jīng)可以實現(xiàn)多主一從的復制窄刘。

并行復制:

使用MySQL5.7的并行復制功能娩践。在5.6版本中就有了并行的概念翻伺,但其中的并行復制是基于庫級別的沮焕,即slave_parallel_type=database峦树。但在這種模式下,只是基于多庫少表的情況葬馋,并不適用于真實的生產(chǎn)環(huán)境下。在MySQL 5.7版本中条摸,真正實現(xiàn)了基于組提交的并行復制踏枣,簡單說就是主庫并行執(zhí)行SQL語句鸿捧,從庫也可以通過多個workers線程并發(fā)執(zhí)行relay log中主庫提交的事務啦租。想要開啟MySQL5.7的并行復制可以在從庫設置參數(shù)slave_parallel_workers>0,并把5.7版本中新添加的slave_parallel_type參數(shù)設置為LOGICAL_CLOCK荆针。該參數(shù)有DATABASE和 LOGICAL_CLOCK兩個值。MySQL5.6默認是database。

MySQL高可用集群架構(gòu)分類圖袁波;

MHA:

MHA的目的在于維持MySQL Replication中master庫的高可用性吆倦,其最大特點是可以修復多個slave之間的差異日志,最終使所有slave保持數(shù)據(jù)一致绰更,然后從中選擇一個充當新的master,并將其他slave指向它。當master出現(xiàn)故障時瘦赫,可以通過對比slave之間I/O thread 讀取主庫binlog的position號,選取最接近的slave作為備選主庫(備胎)。其他的從庫可以通過與備選主庫對比生成差異的中繼日志峰搪。在備選主庫上應用從原來master保存的binlog,同時將備選主庫提升為master。最后在其他slave上應用相應的差異中繼日志并從新的master開始復制。

雙主+keepalived

中小型規(guī)模的時候灯谣,采用這種架構(gòu)是最省事的胎许。

兩個節(jié)點可以采用簡單的一主一從模式,或者雙主模式北秽,并且放置于同一個VLAN中扬蕊,在master節(jié)點發(fā)生故障后檐春,利用keepalived/heartbeat的高可用機制實現(xiàn)快速切換到slave節(jié)點俐巴。

PXC集群:

PXC是基于Galera協(xié)議的MySQL高可用集群架構(gòu)欣舵。Galera產(chǎn)品是以Galera Cluster方式為MySQL提供高可用集群解決方案的缘圈。Galera Cluster就是集成了Galera插件的MySQL集群袜蚕。Galera replication是Codership提供的MySQL數(shù)據(jù)同步方案牲剃,具有高可用性,方便擴展缠犀,并且可以實現(xiàn)多個MySQL節(jié)點間的數(shù)據(jù)同步復制與讀寫夭坪,可保障數(shù)據(jù)庫的服務高可用及數(shù)據(jù)強一致性室梅。

MGR架構(gòu):

MySQL官方在5.7.17版本正式推出組復制(MySQL Group Replication亡鼠,簡稱MGR)。master1仁热,master2抗蠢,master3迅矛,所有成員獨立完成各自的事務潜叛。當客戶端先發(fā)起一個更新事務威兜,該事務先在本地執(zhí)行,執(zhí)行完成之后就要發(fā)起對事務的提交操作了蚂踊。在還沒有真正提交之前需要將產(chǎn)生的復制寫集廣播出去悴势,復制到其他成員特纤。如果沖突檢測成功侥加,組內(nèi)決定該事務可以提交,其他成員可以應用昔穴,否則就回滾吗货。最終宙搬,這意味著所有組內(nèi)成員以相同的順序接收同一組事務。因此組內(nèi)成員以相同的順序應用相同的修改脖母,保證組內(nèi)數(shù)據(jù)強一致性闲孤。

接下來介紹MongoDB的復制情況讼积;

MongoDB復制集:

三副本架構(gòu)是最基礎的復制集的架構(gòu)勤众,一主兩備模式决摧。主節(jié)點接受外界的讀寫請求凑兰,向備節(jié)點進行數(shù)據(jù)同步姑食。當主節(jié)點宕掉,會自動切換到備節(jié)點则拷,不影響線上業(yè)務煌茬,防止單點故障坛善。

MongoDB復制集自動切換

副本集的所有成員都可以接受讀取操作眠屎。 但是肆饶,默認情況下驯镊,應用程序?qū)⑵渥x取操作指向primary竭鞍。

副本集可以有至多一個primary節(jié)點笼蛛,primary節(jié)點宕機后滨砍,集群會觸發(fā)選舉以選出新的primary節(jié)點

在以下三成員節(jié)點副本集架構(gòu)中,primary宕機后惋戏,觸發(fā)了一次選舉响逢,從剩下的兩個secondary節(jié)點里棕孙,選舉出了一個新的primary節(jié)點。

MongoDB復制集讀寫分離設置

read preference 決定MongoDB客戶端從哪個節(jié)點上讀取數(shù)據(jù)。

默認情況下肢预,應用程序?qū)⑵渥x取操作指向副本集中的primary節(jié)點烫映。

指定read preference 選項時要注意:因為使用異步復制,復制延遲會導致secondary上的數(shù)據(jù)可能不是最新的抽兆。

默認情況下族淮,復制集的所有讀請求都發(fā)到Primary瞧筛,Driver可通過設置Read Preference來將讀請求路由到其他的節(jié)點。

primary: 默認規(guī)則揍瑟,所有讀請求發(fā)到Primary

primaryPreferred: Primary優(yōu)先绢片,如果Primary不可達,請求Secondary

secondary: 所有的讀請求都發(fā)到secondary

secondaryPreferred:Secondary優(yōu)先巢株,當所有Secondary不可達時熙涤,請求Primary

nearest:讀請求發(fā)送到最近的可達節(jié)點上(通過ping探測得出最近的節(jié)點)

MongoDB分片架構(gòu)

分片是一種在多臺機器上分配數(shù)據(jù)的方法祠挫。 MongoDB使用分片架構(gòu)有助于您去管理非常大數(shù)量的數(shù)據(jù)集和高吞吐量操作的集群等舔。

大數(shù)據(jù)量和高吞吐量的業(yè)務情況對單臺服務器來講是具備很大的挑戰(zhàn)性的。例如甚牲,高查詢率可能耗盡服務器的CPU容量丈钙。工作集大小超過系統(tǒng)內(nèi)存著恩,那么壓力則會給到磁盤上蜻展,這對IO來講不是我們所希望看到的邀摆。

MongoDB支持通過分片進行水平縮放栋盹。

總結(jié):MySQL的復制種類很多例获,集群架構(gòu)在選擇性上來說也比較多。但橫向擴展能力上蠕搜,沒有MongoDB的分片架構(gòu)擴展能力強妓灌。

最后一部分,我們來通過MySQL與MongoDB的不同應用場景虫埂;來對兩種數(shù)據(jù)庫做一個最后的總結(jié);

第四部分:應用場景角度

正如開篇介紹MySQL特點時說的缝呕,MySQL使用得覆蓋率已經(jīng)接近100%斧散。從大型BAT颅湘,電商平臺闯参,游戲公司,甚至諸多傳統(tǒng)行業(yè)也無不例外都在往MySQL數(shù)據(jù)庫方向靠攏新博,達到逐漸壟斷的趨勢赫悄。對于MongoDB 的應用也已經(jīng)×××到各個領域埂淮,比如游戲写隶、物流慕趴、電商冕房、內(nèi)容管理、社交给僵、物聯(lián)網(wǎng)想际、視頻直播等。

游戲領域:游戲場景牌柄,使用 MongoDB 存儲游戲用戶信息珊佣,用戶的裝備披粟、積分等直接以內(nèi)嵌文檔的形式存儲,方便查詢守屉、更新拇泛。

2.物流場景:使用MongoDB存儲訂單信息,訂單狀態(tài)在運送過程中會不斷更新恭取,以MongoDB內(nèi)嵌數(shù)組的形式來存儲熄守,一次查詢就能將訂單所有的變更讀取出來裕照。

3.社交場景:使用MongoDB存儲用戶信息晨继,以及用戶發(fā)表的朋友圈信息搬俊,通過地理位置索引實現(xiàn)附近的人唉擂、地點等功能

4.物聯(lián)網(wǎng)場景:使用MongoDB存儲所有接入的智能設備信息玩祟,以及設備匯報的日志信息屿聋,并對這些信息進行多維度的分析

對我而言,2009年開始接觸MySQL盘寡,我在2012年接觸的MongoDB的第一個版本2.1竿痰,對于這兩個數(shù)據(jù)庫真是手心手背都是肉影涉。在我孤獨寂寞的時候蟹倾,都是它們一直陪伴著我喊式,感謝技術(shù)給我們帶來的簡單快樂岔留。無論未來發(fā)展如何,沒有所謂的誰會替代誰检柬,只是說它們各自都有不同的特點献联,促使在不同的應用場景下,我們使用誰更合適而已何址。這里沒有宮廷內(nèi)斗里逆,沒有爾虞我詐,只有那份最簡單地做技術(shù)的心用爪,是現(xiàn)實版的延禧攻略原押!

對老張而言,寫篇文章很簡單偎血,但真得希望可以幫助到那些剛?cè)腴T或者想深入學習數(shù)據(jù)庫的同學們诸衔。能力有限笨农,水平一般,哪里有介紹不到的地方切揭,還望大家海涵!

轉(zhuǎn)載:http://blog.51cto.com/sumongodb/2164678

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子椅野,更是在濱河造成了極大的恐慌杖狼,老刑警劉巖理朋,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熄攘,死亡現(xiàn)場離奇詭異,居然都是意外死亡惯殊,警方通過查閱死者的電腦和手機己儒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門绩卤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來何暇,“玉大人,你說我怎么就攤上這事宏胯』楸梗” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我餐济,道長,這世上最難降的妖魔是什么蚁阳? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮澜沟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己悼枢,他們只是感情好名船,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布百揭。 她就那樣靜靜地躺著,像睡著了一般渺贤。 火紅的嫁衣襯著肌膚如雪获印。 梳的紋絲不亂的頭發(fā)上唆缴,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天趟紊,我揣著相機與錄音铛嘱,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氏义,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼丹泉,長吁一口氣:“原來是場噩夢啊……” “哼晒哄!你這毒婦竟也來了硫兰?” 一聲冷哼從身側(cè)響起泳赋,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耍目,失蹤者是張志新(化名)和其女友劉穎毅访,沒想到半個月后守呜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侣颂,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡攻询,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宿百,死狀恐怖盏袄,靈堂內(nèi)的尸體忽然破棺而出刁愿,到底是詐尸還是另有隱情脑题,我是刑警寧澤已艰,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布辆它,位于F島的核電站,受9級特大地震影響俏脊,放射性物質(zhì)發(fā)生泄漏卷员。R本人自食惡果不足惜挺峡,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一苏遥、第九天 我趴在偏房一處隱蔽的房頂上張望教硫。 院中可真熱鬧景用,春花似錦穆刻、人聲如沸朵锣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽髓梅。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫉入,已是汗流浹背澎粟。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工宫补, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛉谜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捞稿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容