摘要:通過計算機特征值時間進程與隨機數來確保生成的是唯一的。整體上來看,的速率波動比的嚴重,方差變化較大。的缺陷事務關系支持薄弱。一方面在方便開發者的同時,另一方面對運維人員卻提出了相當多的要求。
在數據庫存放的數據中,有一種特殊的鍵值叫做主鍵,它用于惟一地標識表中的某一條記錄。也就是說,一個表不能有多個主鍵,并且主鍵不能為空值。無論是MongoDB還是MySQL,都存在著主鍵的定義。
對于MongoDB來說,其主鍵名叫”_id”,在生成數據的時候,如果用戶不主動為其分配一個主鍵的話,MongoDB會自動為其生成一個隨機分配的值。
在MySQL中,主鍵的指定是在MySQL插入數據時指明PRIMARY KEY來定義的。當沒有指定主鍵的時候,另一種工具 —— 索引,相當于替代了主鍵的功能。索引可以為空,也可以有重復,另外有一種不允許重復的索引叫惟一索引。如果既沒有指定主鍵也沒有指定索引的話,MySQL會自動為數據創建一個。
存儲速度對比 1. 數據庫的平均插入速率:MongoDB不指定_id插入 > MySQL不指定主鍵插入 > MySQL指定主鍵插入 > MongoDB指定_id插入。 2. MongoDB在指定_id與不指定_id插入時速度相差很大,而MySQL的差別卻小很多。插入穩定性是指,隨著數據量的增大,每插入一定量數據時的插入速率情況。
在本次測試中,我們把這個指標的規模定在10w,即顯示的數據是在每插入10w條數據時,在這段時間內每秒鐘能插入多少條數據。
先呈現四張圖上來:
1. MongoDB指定_id插入:
2. MongoDB不指定_id插入:
3. MySQL指定PRIMARY KEY插入:
4. MySQL不指定PRIMARY KEY插入:
整體上的插入速度還是和上一回的統計數據類似:MongoDB不指定_id插入 > MySQL不指定主鍵插入 > MySQL指定主鍵插入 > MongoDB指定_id插入。
從圖中可以看出,在指定主鍵插入數據的時候,MySQL與MongoDB在不同數據數量級時,每秒插入的數據每隔一段時間就會有一個波動,在圖表中顯示成為規律的毛刺現象。而在不指定插入數據時,在大多數情況下插入速率都比較平均,但隨著數據庫中數據的增多,插入的效率在某一時段有瞬間下降,隨即又會變穩定。
整體上來看,MongoDB的速率波動比MySQL的嚴重,方差變化較大。
MongoDB在指定_id插入時,當插入的數據變多之后,插入效率有明顯地下降。在其他三種的插入測試中,從開始到結束,其插入的速率在大多數的時候都固定在一個標準上。
分析:毛刺現象是因為,當插入的數據太多的時候,MongoDB需要將內存中的數據寫進硬盤,MySQL需要重新分表。這些操作每當數據庫中的數據達到一定量級后就會自動進行,因此每隔一段時間就會有一個明顯的毛刺。
MongoDB畢竟還是新生事物,其穩定性沒有已應用多年的MySQL優秀。
MongoDB在指定_id插入的時候,其性能的下降還是很厲害的。
在讀取的數據規模不大時,MongoDB的查詢速度真是一騎絕塵,甩開MySQL好遠好遠。
在查詢的數據量逐漸增多的時候,MySQL的查詢速度是穩步下降的,而MongoDB的查詢速度卻有些起伏。
分析:如果MySQL沒有經過查詢優化的話,其查詢速度就不要跟MongoDB比了。MongoDB可以充分利用系統的內存資源,我們的測試機器內存是64GB的,內存越大MongoDB的查詢速度就越快,畢竟磁盤與內存的I/O效率不是一個量級的。
本次實驗的查詢的數據也是隨機生成的,因此所有待查詢的數據都存在MongoDB的內存緩存中的概率是很小的。在查詢時,MongoDB需要多次將內存中的數據與磁盤進行交互以便查找,因此其查詢速率取決于其交互的次數。這樣就存在這樣一種可能性,盡管待查詢的數據數目較多,但這段隨機生成的數據被MongoDB以較少的次數從磁盤中取出。因此,其查詢的平均速度反而更快一些。這樣看來,MongoDB的查詢速度波動也處在一個合理的范圍內。
MySQL的穩定性還是毋庸置疑的。
結論相比較MySQL,MongoDB數據庫更適合那些讀作業較重的任務模型。MongoDB能充分利用機器的內存資源。如果機器的內存資源豐富的話,MongoDB的查詢效率會快很多。
在帶”_id”插入數據的時候,MongoDB的插入效率其實并不高。如果想充分利用MongoDB性能的話,推薦采取不帶”_id”的插入方式,然后對相關字段作索引來查詢。
MongoDB適合那些對數據庫具體數據格式不明確或者數據庫數據格式經常變化的需求模型,而且對開發者十分友好。
MongoDB官方就自帶一個分布式文件系統,可以很方便地部署到服務器機群上。MongoDB里有一個Shard的概念,就是方便為了服務器分片使用的。每增加一臺Shard,MongoDB的插入性能也會以接近倍數的方式增長,磁盤容量也很可以很方便地擴充。
MongoDB還自帶了對map-reduce運算框架的支持,這也很方便進行數據的統計。
MongoDB的缺陷事務關系支持薄弱。這也是所有NoSQL數據庫共同的缺陷,不過NoSQL并不是為了事務關系而設計的,具體應用還是很需求。
穩定性有些欠缺,這點從上面的測試便可以看出。
MongoDB一方面在方便開發者的同時,另一方面對運維人員卻提出了相當多的要求。業界并沒有成熟的MongoDB運維經驗,MongoDB中數據的存放格式也很隨意,等等問題都對運維人員的考驗。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19447.html
摘要:則在讀取數據時將兩個中文字段混淆成了一個字段,導致整個數據結構錯亂。三條路子全軍覆沒,這讓我情何以堪,好在使用的經驗頗豐,通過中文的轉換和切割就輕松解決了這個問題。 概述 showImg(https://segmentfault.com/img/bVylLL); 在現實場景中,由于數據來源的異構,數據源的格式往往是難以統一的,這就導致大量具有價值的數據通常是以非結構化的形式聚合在一起的...
摘要:出現的問題筆者前段時間開發一個新項目的某個功能模塊要讀取老游戲中某個數據庫計作庫連續讀庫中的個集合相當于的張表取數據在測試環境單次操作時是內但是并發測試情況下比如內個并發時讀取庫個集合的耗時能達到以上甚至且個并發請求幾乎同時完成但是在我本地 出現的問題 筆者前段時間開發一個新項目的某個功能模塊,要讀取老游戲中某個Mongo數據庫(計作A庫),連續讀A庫中的6個集合(相當于MySQL的6...
閱讀 3878·2021-09-27 13:36
閱讀 4554·2021-09-22 15:12
閱讀 3063·2021-09-13 10:29
閱讀 1828·2021-09-10 10:50
閱讀 2360·2021-09-03 10:43
閱讀 519·2019-08-29 17:10
閱讀 443·2019-08-26 13:52
閱讀 3250·2019-08-23 14:37