簡體   English   中英

為什么MongoDB比SQL DB快得多的任何詳細和特定原因?

[英]Any detailed and specific reasons for Why MongoDB is much faster than SQL DBs?

好的,關於MongoDB為什么這么快有疑問

我很欣賞這些答案,但是它們很籠統。 是的我知道:

  • MongoDB是基於文檔的,那么為什么基於文檔可以提高速度呢?
  • MongoDB是noSQL,但是為什么noSQL意味着更高的性能?
  • SQL在一致性,ACID等方面比MongoDB要做的事情要多得多,但是我相信MongoDB還在做類似的事情來保持數據安全,維護索引等,對嗎?

好吧,我寫這個問題只是為了找出答案

  1. MongoDB高性能的具體原因是什么?
  2. SQL究竟做什么的,而MongoDB卻沒有,所以它獲得了很高的性能?
  3. 如果訪問者(MongoDB和SQL專家)問您"Why MongoDB is so fast" ,您將如何回答? 顯然僅回答: "because MongoDB is noSQL"是不夠的。

謝謝

首先,讓我們將蘋果與蘋果進行比較: MongoDB的讀寫就像是在RDBMS中沒有主鍵的表上通過主鍵進行的單次讀寫。

因此,讓我們精確地進行基准測試: http : //mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html

事實證明,在完全相同的原始操作的公平比較中,速度差異並不大。 實際上,MySQL稍快一些。 我會說,它們是等效的。

為什么? 因為實際上,在該特定基准測試中,兩個系統都在做類似的事情。 通過主鍵搜索返回單行實際上並沒有那么多工作。 這是一個非常快的操作。 我懷疑跨進程通信開銷是其中很大的一部分。

我的猜測是,MySQL中經過更優化的代碼要比MongoDB的系統開銷少一些(沒有邏輯鎖,可能還有其他一些小東西)。

這得出一個有趣的結論: 您可以將MySQL像文檔數據庫一樣使用,並從中獲得出色的性能。


如果面試官說:“我們不在乎文檔或樣式,我們只需要一個更快的數據庫,您認為我們應該使用MySQL還是MongoDB?”,我該怎么回答?

我建議暫時忽略性能,並查看兩個系統的相對強度。 MongoDB想到了諸如擴展(擴展)和復制之類的事情。 對於MySQL,還有很多功能,例如豐富的查詢,並發模型,更好的工具和成熟度等等。

基本上,您可以以功能換取性能。 願意這樣做嗎? 這是通常無法做出的選擇。 如果您不惜一切代價選擇性能,請考慮在添加其他技術之前先調整MySQL。


當客戶通過主鍵檢索單個行/文檔時,將發生以下情況。 我將注釋兩個系統之間的差異:

  1. 客戶端建立一個二進制命令(相同)
  2. 客戶端通過TCP發送(相同)
  3. 服務器解析命令(相同)
  4. 服務器從緩存訪問查詢計划(僅SQL,不是MongoDB,不是HandlerSocket)
  5. 服務器要求B-Tree組件訪問行(相同)
  6. 服務器對通往該行的B樹路徑進行物理只讀鎖定(相同)
  7. 服務器對行進行邏輯鎖定(僅SQL,不是MongoDB,不是HandlerSocket)
  8. 服務器對行進行序列化並通過TCP發送(相同)
  9. 客戶端反序列化(相同)

對於典型的基於SQL的RDBMS,只有兩個附加步驟。 這就是為什么沒有真正區別的原因。

通常,MySQL和MongoDB在單台計算機上的“持久”寫入性能非常相似。 簡單的鍵/值查找幾乎是相同的……如果您想以這種方式使用MySQL。 顯然,文檔支持可帶來巨大的生產力收益和巨大的性能優勢。

使用自動分片... MongoDB以難以描述的方式更快。 開箱即用,通過適當的設計,您幾乎可以線性擴展,而無需在代碼中構建任何邏輯。

幾乎每個驅動程序都內置了讀/寫拆分功能,大多數由10gen自己贊助或開發。

我之前已經對應用程序進行了擴展,並編寫了讀/寫拆分代碼,用於分片的分布式哈希,重新平衡了連續運行的作業,並將gzip添加到了mysql“ document”存儲中。 啊。

它速度更快,因為它既簡單又專注。 設計時要考慮到所有這些。 優先考慮商品硬件的規模。 RDBMS的優先級完全不同。

默認情況下,mongo不做任何索引; 也沒有交易。 但是,如果將mysql表配置為未編制索引,然后打開自動提交,則不會看到巨大的速度差異。 將位寫入磁盤僅需要一定的時間。

但是,mongo旨在輕松擴展。 使用分片,您可以水平擴展寫操作並獲得更好的性能,而無需使用主-主復制的復雜性。 使用副本集,您可以水平縮放閱讀。 因此,我想說這是系統性能的提高,但是每個查詢不一定更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM