搜尋
首頁資料庫mysql教程Mongodb與MySQL之間的比較分析

Mongodb與MySQL之間的比較分析

Dec 21, 2018 am 10:33 AM
mongodbmysql

這篇文章帶給大家的內容是關於Mongodb與MySQL之間的比較分析,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

在資料庫存放的資料中,有一種特殊的鍵值叫做主鍵,它用於惟一地標識表中的某筆記錄。也就是說,一個表不能有多個主鍵,主鍵不能為空值。無論是MongoDB或MySQL,都存在著主鍵的定義。
對於MongoDB來說,其主鍵名叫”_id”,在產生資料的時候,如果使用者不主動為其分配一個主鍵的話,MongoDB會自動為其產生一個隨機分配的值。

在MySQL中,主鍵的指定是在MySQL插入資料時指明PRIMARY KEY來定義的。當沒有指定主鍵的時候,另一種工具 —— 索引,相當於取代了主鍵的功能。索引可以為空,也可以有重複,另外有一種不允許重複的索引叫惟一索引。如果既沒有指定主鍵也沒有指定索引的話,MySQL會自動為資料建立一個。

儲存速度比較

1、資料庫的平均插入速率:MongoDB不指定_id插入> MySQL不指定主鍵插入> MySQL指定主鍵插入> MongoDB指定_id插入。

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

分析:

1、在指定_id或主鍵時,兩個資料庫在插入時要對索引值進行處理,並尋找資料庫中是否存在相同的鍵值,這會減慢插入的速率。

2、在MongoDB中,指定索引插入比不指定慢很多,這是因為,MongoDB裡每一條資料的_id值都是唯一的。當在不指定_id插入資料的時候,其_id是系統自動計算產生的。 MongoDB透過電腦特徵值、時間、進程ID與隨機數來確保產生的_id是唯一的。而在指定_id插入時,MongoDB每插一條數據,都需要檢查此_id可不可用,當資料庫中資料條數太多的時候,這一步的查詢開銷會拖慢整個資料庫的插入速度。

3、MongoDB會充分使用系統記憶體作為緩存,這是一個非常優秀的功能。我們的測試機的記憶體有64G,插入時,MongoDB會盡可能在記憶體快寫不進去資料之後,再將資料持久化儲存到硬碟上。這也是在不指定_id插入的時候,MongoDB的效率遙遙領先的原因。但在指定_id插入時,當資料量一大內存裝不下時,MongoDB就需要將磁碟中的資訊讀取到記憶體中來查重,這樣一來其插入效率反而慢了。

4、MySQL不愧是一種非常穩定的資料庫,無論在指定主鍵還是在不指定主鍵插入的情況下,其效率都差不了太多。

插入穩定性分析

插入穩定性是指,隨著資料量的增加,每插入一定量資料時的插入速率狀況。

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

先呈現四張圖表上來:

##1、       MongoDB指定_id插入:

Mongodb與MySQL之間的比較分析##2、       MongoDB不指定_id插入:

Mongodb與MySQL之間的比較分析3、     MySQL指定PRIMARY KEY插入:

##4、     MySQL不指定PRIMARY KEY插入:Mongodb與MySQL之間的比較分析

Mongodb與MySQL之間的比較分析總結:

1、整體上的插入速度還是和上一回的統計數據類似: MongoDB不指定_id插入> MySQL不指定主鍵插入> MySQL指定主鍵插入> MongoDB指定_id插入。

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

3、整體來看,MongoDB的速率波動比MySQL的嚴重,變異數變化較大。

4、MongoDB在指定_id插入時,當插入的資料變多之後,插入效率有明顯下降。在其他三種的插入測試中,從開始到結束,其插入的速率在大多數的時候都固定在一個標準上。

分析:

1、毛刺現像是因為,當插入的資料太多的時候,MongoDB需要將記憶體中的資料寫進硬碟,MySQL需要重新分錶。這些操作每當資料庫中的資料達到一定量級後就會自動進行,因此每隔一段時間就會有一個明顯的毛邊。

2、MongoDB畢竟還是新生事物,其穩定性沒有已應用多年的MySQL優秀。

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

4、讀取的資料規模不大時,MongoDB的查詢速度真是一騎絕塵,要甩開MySQL好遠好遠。

5、在查詢的資料量逐漸增多的時候,MySQL的查詢速度是穩定下降的,而MongoDB的查詢速度卻有些起伏。

分析:

1、如果MySQL沒有經過查詢優化的話,查詢速度就不要跟MongoDB比了。 MongoDB可以充分利用系統的記憶體資源,我們的測試機器記憶體是64GB的,記憶體越大MongoDB的查詢速度就越快,畢竟磁碟與記憶體的I/O效率不是一個量級的。

2、本實驗的查詢的資料也是隨機產生的,因此所有待查詢的資料都存在MongoDB的記憶體快取中的機率是很小的。在查詢時,MongoDB需要多次將記憶體中的資料與磁碟互動以便查找,因此其查詢速率取決於其互動的次數。這樣就存在這樣一種可能性,儘管待查詢的資料數目較多,但這段隨機產生的資料被MongoDB以較少的次數從磁碟中取出。因此,其查詢的平均速度反而更快一些。這樣看來,MongoDB的查詢速度波動也處於合理的範圍內。

3、MySQL的穩定性還是毋庸置疑的。

結論

1、相比較MySQL,MongoDB資料庫比較適合那些讀取作業較重的任務模型。 MongoDB能充分利用機器的記憶體資源。如果機器的記憶體資源豐富的話,MongoDB的查詢效率會快很多。

2、在帶」_id」插入資料的時候,MongoDB的插入效率其實並不高。如果想充分利用MongoDB效能的話,建議採取不帶”_id”的插入方式,然後對相關欄位作索引來查詢。

3、MongoDB適合那些對資料庫具體資料格式不明確或資料庫資料格式經常變化的需求模型,而且對開發者十分友善。

4、MongoDB官方就自備一個分散式檔案系統,可以很方便地部署到伺服器機群上。 MongoDB裡有一個Shard的概念,就是方便為了伺服器分片使用的。每增加一台Shard,MongoDB的插入效能也會以接近倍數的方式成長,磁碟容量也很可以很方便地擴充。

5、MongoDB也自備了對map-reduce運算框架的支持,這也很方便進行資料的統計。

MongoDB的缺陷

1、事務關係支援薄弱。這也是所有NoSQL資料庫共同的缺陷,不過NoSQL並不是為了事務關係而設計的,具體應用還是很需求。

2、穩定性有些欠缺,這點從上面的測試便可以看出。

3、MongoDB一方面在方便開發者的同時,另一方面對維運人員卻提出了相當多的要求。業界並沒有成熟的MongoDB維運經驗,MongoDB中資料的存放格式也很隨意,等等問題都對運維人員的考驗。

以上是Mongodb與MySQL之間的比較分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
MySQL:初學者的基本技能MySQL:初學者的基本技能Apr 18, 2025 am 12:24 AM

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL:結構化數據和關係數據庫MySQL:結構化數據和關係數據庫Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL:解釋的關鍵功能和功能MySQL:解釋的關鍵功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL的目的:與MySQL數據庫進行交互SQL的目的:與MySQL數據庫進行交互Apr 18, 2025 am 12:12 AM

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

初學者的MySQL:開始數據庫管理初學者的MySQL:開始數據庫管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

MySQL的角色:Web應用程序中的數據庫MySQL的角色:Web應用程序中的數據庫Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

mysql:構建您的第一個數據庫mysql:構建您的第一個數據庫Apr 17, 2025 am 12:22 AM

構建MySQL數據庫的步驟包括:1.創建數據庫和表,2.插入數據,3.進行查詢。首先,使用CREATEDATABASE和CREATETABLE語句創建數據庫和表,然後用INSERTINTO語句插入數據,最後用SELECT語句查詢數據。

MySQL:一種對數據存儲的初學者友好方法MySQL:一種對數據存儲的初學者友好方法Apr 17, 2025 am 12:21 AM

MySQL適合初學者,因為它易用且功能強大。 1.MySQL是關係型數據庫,使用SQL進行CRUD操作。 2.安裝簡單,需配置root用戶密碼。 3.使用INSERT、UPDATE、DELETE、SELECT進行數據操作。 4.複雜查詢可使用ORDERBY、WHERE和JOIN。 5.調試需檢查語法,使用EXPLAIN分析查詢。 6.優化建議包括使用索引、選擇合適數據類型和良好編程習慣。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)