溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mongodb與MySQL各自特點(diǎn)和比較

發(fā)布時(shí)間:2020-05-12 16:25:37 來源:億速云 閱讀:239 作者:三月 欄目:MySQL數(shù)據(jù)庫

下面一起來了解下MongodbMySQL各自特點(diǎn)和比較,相信大家看完肯定會(huì)受益匪淺,文字在精不在多,希望Mongodb與MySQL各自特點(diǎn)和比較這篇短內(nèi)容是你想要的。                                                           

在數(shù)據(jù)庫存放的數(shù)據(jù)中,有一種特殊的鍵值叫做主鍵,它用于惟一地標(biāo)識(shí)表中的某一條記錄。也就是說,一個(gè)表不能有多個(gè)主鍵,并且主鍵不能為空值。無論是MongoDB還是MySQL,都存在著主鍵的定義。
對(duì)于MongoDB來說,其主鍵名叫”_id”,在生成數(shù)據(jù)的時(shí)候,如果用戶不主動(dòng)為其分配一個(gè)主鍵的話,MongoDB會(huì)自動(dòng)為其生成一個(gè)隨機(jī)分配的值。

在MySQL中,主鍵的指定是在MySQL插入數(shù)據(jù)時(shí)指明PRIMARY KEY來定義的。當(dāng)沒有指定主鍵的時(shí)候,另一種工具 —— 索引,相當(dāng)于替代了主鍵的功能。索引可以為空,也可以有重復(fù),另外有一種不允許重復(fù)的索引叫惟一索引。如果既沒有指定主鍵也沒有指定索引的話,MySQL會(huì)自動(dòng)為數(shù)據(jù)創(chuàng)建一個(gè)。

存儲(chǔ)速度對(duì)比

1、數(shù)據(jù)庫的平均插入速率:MongoDB不指定_id插入 > MySQL不指定主鍵插入 > MySQL指定主鍵插入 > MongoDB指定_id插入。

2、MongoDB在指定_id與不指定_id插入時(shí)速度相差很大,而MySQL的差別卻小很多。

分析:

1、在指定_id或主鍵時(shí),兩種數(shù)據(jù)庫在插入時(shí)要對(duì)索引值進(jìn)行處理,并查找數(shù)據(jù)庫中是否存在相同的鍵值,這會(huì)減慢插入的速率。

2、在MongoDB中,指定索引插入比不指定慢很多,這是因?yàn)椋琈ongoDB里每一條數(shù)據(jù)的_id值都是唯一的。當(dāng)在不指定_id插入數(shù)據(jù)的時(shí)候,其_id是系統(tǒng)自動(dòng)計(jì)算生成的。MongoDB通過計(jì)算機(jī)特征值、時(shí)間、進(jìn)程ID與隨機(jī)數(shù)來確保生成的_id是唯一的。而在指定_id插入時(shí),MongoDB每插一條數(shù)據(jù),都需要檢查此_id可不可用,當(dāng)數(shù)據(jù)庫中數(shù)據(jù)條數(shù)太多的時(shí)候,這一步的查詢開銷會(huì)拖慢整個(gè)數(shù)據(jù)庫的插入速度。

3、MongoDB會(huì)充分使用系統(tǒng)內(nèi)存作為緩存,這是一種非常優(yōu)秀的特性。我們的測(cè)試機(jī)的內(nèi)存有64G,在插入時(shí),MongoDB會(huì)盡可能地在內(nèi)存快寫不進(jìn)去數(shù)據(jù)之后,再將數(shù)據(jù)持久化保存到硬盤上。這也是在不指定_id插入的時(shí)候,MongoDB的效率遙遙領(lǐng)先的原因。但在指定_id插入時(shí),當(dāng)數(shù)據(jù)量一大內(nèi)存裝不下時(shí),MongoDB就需要將磁盤中的信息讀取到內(nèi)存中來查重,這樣一來其插入效率反而慢了。

4、MySQL不愧是一種非常穩(wěn)定的數(shù)據(jù)庫,無論在指定主鍵還是在不指定主鍵插入的情況下,其效率都差不了太多。

插入穩(wěn)定性分析

插入穩(wěn)定性是指,隨著數(shù)據(jù)量的增大,每插入一定量數(shù)據(jù)時(shí)的插入速率情況。

在本次測(cè)試中,我們把這個(gè)指標(biāo)的規(guī)模定在10w,即顯示的數(shù)據(jù)是在每插入10w條數(shù)據(jù)時(shí),在這段時(shí)間內(nèi)每秒鐘能插入多少條數(shù)據(jù)。

先呈現(xiàn)四張圖上來:

1、       MongoDB指定_id插入:

Mongodb與MySQL各自特點(diǎn)和比較

2、       MongoDB不指定_id插入:

Mongodb與MySQL各自特點(diǎn)和比較

3、     MySQL指定PRIMARY KEY插入:

Mongodb與MySQL各自特點(diǎn)和比較

4、     MySQL不指定PRIMARY KEY插入:

Mongodb與MySQL各自特點(diǎn)和比較

總結(jié):

1、整體上的插入速度還是和上一回的統(tǒng)計(jì)數(shù)據(jù)類似:MongoDB不指定_id插入 > MySQL不指定主鍵插入 > MySQL指定主鍵插入 > MongoDB指定_id插入。

2、從圖中可以看出,在指定主鍵插入數(shù)據(jù)的時(shí)候,MySQL與MongoDB在不同數(shù)據(jù)數(shù)量級(jí)時(shí),每秒插入的數(shù)據(jù)每隔一段時(shí)間就會(huì)有一個(gè)波動(dòng),在圖表中顯示成為規(guī)律的毛刺現(xiàn)象。而在不指定插入數(shù)據(jù)時(shí),在大多數(shù)情況下插入速率都比較平均,但隨著數(shù)據(jù)庫中數(shù)據(jù)的增多,插入的效率在某一時(shí)段有瞬間下降,隨即又會(huì)變穩(wěn)定。

3、整體上來看,MongoDB的速率波動(dòng)比MySQL的嚴(yán)重,方差變化較大。

4、MongoDB在指定_id插入時(shí),當(dāng)插入的數(shù)據(jù)變多之后,插入效率有明顯地下降。在其他三種的插入測(cè)試中,從開始到結(jié)束,其插入的速率在大多數(shù)的時(shí)候都固定在一個(gè)標(biāo)準(zhǔn)上。

分析:

1、毛刺現(xiàn)象是因?yàn)?,?dāng)插入的數(shù)據(jù)太多的時(shí)候,MongoDB需要將內(nèi)存中的數(shù)據(jù)寫進(jìn)硬盤,MySQL需要重新分表。這些操作每當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)達(dá)到一定量級(jí)后就會(huì)自動(dòng)進(jìn)行,因此每隔一段時(shí)間就會(huì)有一個(gè)明顯的毛刺。

2、MongoDB畢竟還是新生事物,其穩(wěn)定性沒有已應(yīng)用多年的MySQL優(yōu)秀。

3、MongoDB在指定_id插入的時(shí)候,其性能的下降還是很厲害的。

4、在讀取的數(shù)據(jù)規(guī)模不大時(shí),MongoDB的查詢速度真是一騎絕塵,甩開MySQL好遠(yuǎn)好遠(yuǎn)。

5、在查詢的數(shù)據(jù)量逐漸增多的時(shí)候,MySQL的查詢速度是穩(wěn)步下降的,而MongoDB的查詢速度卻有些起伏。

分析:

1、如果MySQL沒有經(jīng)過查詢優(yōu)化的話,其查詢速度就不要跟MongoDB比了。MongoDB可以充分利用系統(tǒng)的內(nèi)存資源,我們的測(cè)試機(jī)器內(nèi)存是64GB的,內(nèi)存越大MongoDB的查詢速度就越快,畢竟磁盤與內(nèi)存的I/O效率不是一個(gè)量級(jí)的。

2、本次實(shí)驗(yàn)的查詢的數(shù)據(jù)也是隨機(jī)生成的,因此所有待查詢的數(shù)據(jù)都存在MongoDB的內(nèi)存緩存中的概率是很小的。在查詢時(shí),MongoDB需要多次將內(nèi)存中的數(shù)據(jù)與磁盤進(jìn)行交互以便查找,因此其查詢速率取決于其交互的次數(shù)。這樣就存在這樣一種可能性,盡管待查詢的數(shù)據(jù)數(shù)目較多,但這段隨機(jī)生成的數(shù)據(jù)被MongoDB以較少的次數(shù)從磁盤中取出。因此,其查詢的平均速度反而更快一些。這樣看來,MongoDB的查詢速度波動(dòng)也處在一個(gè)合理的范圍內(nèi)。

3、MySQL的穩(wěn)定性還是毋庸置疑的。

結(jié)論

1、相比較MySQL,MongoDB數(shù)據(jù)庫更適合那些讀作業(yè)較重的任務(wù)模型。MongoDB能充分利用機(jī)器的內(nèi)存資源。如果機(jī)器的內(nèi)存資源豐富的話,MongoDB的查詢效率會(huì)快很多。

2、在帶”_id”插入數(shù)據(jù)的時(shí)候,MongoDB的插入效率其實(shí)并不高。如果想充分利用MongoDB性能的話,推薦采取不帶”_id”的插入方式,然后對(duì)相關(guān)字段作索引來查詢。

3、MongoDB適合那些對(duì)數(shù)據(jù)庫具體數(shù)據(jù)格式不明確或者數(shù)據(jù)庫數(shù)據(jù)格式經(jīng)常變化的需求模型,而且對(duì)開發(fā)者十分友好。

4、MongoDB官方就自帶一個(gè)分布式文件系統(tǒng),可以很方便地部署到云服務(wù)器機(jī)群上。MongoDB里有一個(gè)Shard的概念,就是方便為了云服務(wù)器分片使用的。每增加一臺(tái)Shard,MongoDB的插入性能也會(huì)以接近倍數(shù)的方式增長(zhǎng),磁盤容量也很可以很方便地?cái)U(kuò)充。

5、MongoDB還自帶了對(duì)map-reduce運(yùn)算框架的支持,這也很方便進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)。

MongoDB的缺陷

1、事務(wù)關(guān)系支持薄弱。這也是所有NoSQL數(shù)據(jù)庫共同的缺陷,不過NoSQL并不是為了事務(wù)關(guān)系而設(shè)計(jì)的,具體應(yīng)用還是很需求。

2、穩(wěn)定性有些欠缺,這點(diǎn)從上面的測(cè)試便可以看出。

3、MongoDB一方面在方便開發(fā)者的同時(shí),另一方面對(duì)運(yùn)維人員卻提出了相當(dāng)多的要求。業(yè)界并沒有成熟的MongoDB運(yùn)維經(jīng)驗(yàn),MongoDB中數(shù)據(jù)的存放格式也很隨意,等等問題都對(duì)運(yùn)維人員的考驗(yàn)。

看完Mongodb與MySQL各自特點(diǎn)和比較這篇文章后,很多讀者朋友肯定會(huì)想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI