成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Mongodb 與 MySQL對比

PingCAP / 1953人閱讀

摘要:通過計算機特征值時間進程與隨機數(shù)來確保生成的是唯一的。整體上來看,的速率波動比的嚴重,方差變化較大。的缺陷事務(wù)關(guān)系支持薄弱。一方面在方便開發(fā)者的同時,另一方面對運維人員卻提出了相當多的要求。

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

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

存儲速度對比 1. 數(shù)據(jù)庫的平均插入速率:MongoDB不指定_id插入 > MySQL不指定主鍵插入 > MySQL指定主鍵插入 > MongoDB指定_id插入。 2. MongoDB在指定_id與不指定_id插入時速度相差很大,而MySQL的差別卻小很多。
分析: 1. 在指定_id或主鍵時,兩種數(shù)據(jù)庫在插入時要對索引值進行處理,并查找數(shù)據(jù)庫中是否存在相同的鍵值,這會減慢插入的速率。 2. 在MongoDB中,指定索引插入比不指定慢很多,這是因為,MongoDB里每一條數(shù)據(jù)的_id值都是唯一的。當在不指定_id插入數(shù)據(jù)的時候,其_id是系統(tǒng)自動計算生成的。MongoDB通過計算機特征值、時間、進程ID與隨機數(shù)來確保生成的_id是唯一的。而在指定_id插入時,MongoDB每插一條數(shù)據(jù),都需要檢查此_id可不可用,當數(shù)據(jù)庫中數(shù)據(jù)條數(shù)太多的時候,這一步的查詢開銷會拖慢整個數(shù)據(jù)庫的插入速度。 3. MongoDB會充分使用系統(tǒng)內(nèi)存作為緩存,這是一種非常優(yōu)秀的特性。我們的測試機的內(nèi)存有64G,在插入時,MongoDB會盡可能地在內(nèi)存快寫不進去數(shù)據(jù)之后,再將數(shù)據(jù)持久化保存到硬盤上。這也是在不指定_id插入的時候,MongoDB的效率遙遙領(lǐng)先的原因。但在指定_id插入時,當數(shù)據(jù)量一大內(nèi)存裝不下時,MongoDB就需要將磁盤中的信息讀取到內(nèi)存中來查重,這樣一來其插入效率反而慢了。 4. MySQL不愧是一種非常穩(wěn)定的數(shù)據(jù)庫,無論在指定主鍵還是在不指定主鍵插入的情況下,其效率都差不了太多。 插入穩(wěn)定性分析

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

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

先呈現(xiàn)四張圖上來:
1. MongoDB指定_id插入:


2. MongoDB不指定_id插入:

3. MySQL指定PRIMARY KEY插入:

4. MySQL不指定PRIMARY KEY插入:


總結(jié):

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

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

整體上來看,MongoDB的速率波動比MySQL的嚴重,方差變化較大。

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

分析:

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

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

MongoDB在指定_id插入的時候,其性能的下降還是很厲害的。

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

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

分析:

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

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

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

結(jié)論

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

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

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

MongoDB官方就自帶一個分布式文件系統(tǒng),可以很方便地部署到服務(wù)器機群上。MongoDB里有一個Shard的概念,就是方便為了服務(wù)器分片使用的。每增加一臺Shard,MongoDB的插入性能也會以接近倍數(shù)的方式增長,磁盤容量也很可以很方便地擴充。

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

MongoDB的缺陷

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

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19447.html

相關(guān)文章

  • [原]深入對比數(shù)據(jù)科學(xué)工具箱:Python和R 非結(jié)構(gòu)化數(shù)據(jù)的結(jié)構(gòu)化

    摘要:則在讀取數(shù)據(jù)時將兩個中文字段混淆成了一個字段,導(dǎo)致整個數(shù)據(jù)結(jié)構(gòu)錯亂。三條路子全軍覆沒,這讓我情何以堪,好在使用的經(jīng)驗頗豐,通過中文的轉(zhuǎn)換和切割就輕松解決了這個問題。 概述 showImg(https://segmentfault.com/img/bVylLL); 在現(xiàn)實場景中,由于數(shù)據(jù)來源的異構(gòu),數(shù)據(jù)源的格式往往是難以統(tǒng)一的,這就導(dǎo)致大量具有價值的數(shù)據(jù)通常是以非結(jié)構(gòu)化的形式聚合在一起的...

    leiyi 評論0 收藏0
  • 記錄一次并發(fā)讀取MongoDB的踩坑過程

    摘要:出現(xiàn)的問題筆者前段時間開發(fā)一個新項目的某個功能模塊要讀取老游戲中某個數(shù)據(jù)庫計作庫連續(xù)讀庫中的個集合相當于的張表取數(shù)據(jù)在測試環(huán)境單次操作時是內(nèi)但是并發(fā)測試情況下比如內(nèi)個并發(fā)時讀取庫個集合的耗時能達到以上甚至且個并發(fā)請求幾乎同時完成但是在我本地 出現(xiàn)的問題 筆者前段時間開發(fā)一個新項目的某個功能模塊,要讀取老游戲中某個Mongo數(shù)據(jù)庫(計作A庫),連續(xù)讀A庫中的6個集合(相當于MySQL的6...

    luffyZh 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<