搜尋

首頁  >  問答  >  主體

nosql - mongo为什么比mysql快

求高手简单明了的回答一下,越通俗越好。

PHP中文网PHP中文网2864 天前667

全部回覆(6)我來回復

  • 迷茫

    迷茫2017-04-17 11:34:43

    寫入操作MongoDB比傳統資料庫快的根本原因是Mongo使用的記憶體映射技術 - 寫入資料時候只要在記憶體裡完成就可以返回給應用程序,這樣並發量自然就很高。而儲存到硬件的操作則在背景異步完成。注意MongoDB在2.4就已經是預設安全寫了(具體實現在驅動程式裡),所以樓上有同學的回答說是」預設不安全「應該是基於2.2或之前版本的。

    讀取操作MongoDB快的原因是: 1)MongoDB的設計要求你常用的資料(working set)可以裝在記憶體中。這樣大部分操作只需要讀內存,自然很快。 2)文檔性模式設計一般會是的你所需要的資料都相對集中在一起(記憶體或硬碟),大家知道硬碟讀寫耗時最多是隨機讀寫所產生的磁頭定位時間,資料集中在一起則減少了關係資料庫需要從各個地方去把資料找過來(然後Join)所耗費的隨機讀取時間

    另外一個就是如@王子亭所提到的Mongo是分散式叢集所以可以平行擴展。目前一般的百萬次並發量都是透過幾十上百個節點的叢集同時實現。這一點MySQL基本上無法做到(或要花很大客製化的代價)

    回覆
    0
  • 迷茫

    迷茫2017-04-17 11:34:43

    不能說的這麼絕對,有很多時候 mongo 不一定比MySQL快

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 11:34:43

    什麼場景、業務、背景都不說,就說mongo為什麼比mysql快?你用過兩者麼?你是來黑mysql吧。去學習下如何提問題吧!

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 11:34:43

    mysql是關係型資料庫 裡面存的是一張一張的表 分散式儲存要求把表拆開 存在不同的盤裡面

    你是豎著拆還是橫著拆呢? 豎起你一個普通查詢就要join

    橫著拆沒那麼麻煩了 但是如果你的語句有join 不管你要找的那筆記錄在哪個盤裡面 它都會遍歷所有的盤來產生join的結果

    能不慢麼?

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 11:34:43

    簡單明了:

    • MongoDB 預設的寫入都是不安全寫入,即資料會暫時保存在內存,不等寫入完成就返回「成功」的結果
    • MongoDB 是非關聯式資料庫,支援的查詢操作比較少
    • MongoDB 天生為分散式叢集設計(例如使用 ObjectID 而非順序 ID), 易於擴容

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 11:34:43

    大數據量的話,建議別用mongo

    回覆
    0
  • 取消回覆