mongodb,redis,mysql 簡要對比

來源:互聯網
上載者:User

標籤:

本篇內容大部分不是原創,轉載的會貼有連結。

準備學習下資料庫,想對目前的主流資料庫做一個簡單的瞭解分析,就搜集了資料整理到了一塊。

當下主流的要數NoSql資料庫了,擁有強大的高並發能力。

mongodb:

它是一個記憶體資料庫,資料都是放在記憶體裡面的。

對資料的操作大部分都在記憶體中,但mongodb並不是單純的記憶體資料庫。

持久化方式:

mongodb的所有資料實際上是存放在硬碟的,所有要操作的資料通過mmap的方式映射到記憶體某個地區內。

然後,mongodb就在這塊地區裡面進行資料修改,避免了零碎的硬碟操作。

至於mmap上的內容flush到硬碟就是作業系統的事情了,所以,如果,mongodb在記憶體中修改了資料後,mmap資料flush到硬碟之前,系統宕機了,資料就會丟失。

mmap詳解連結:http://www.cnblogs.com/techdoc/archive/2010/12/22/1913521.html

redis:

它就是一個不折不扣的記憶體資料庫了。

持久化方式:

redis所有資料都是放在記憶體中的,持久化是使用RDB方式或者aof方式。

解密redis持久化:http://blog.nosqlfan.com/html/3813.html

mysql:

無論資料還是索引都存放在硬碟中。到要使用的時候才交換到記憶體中。能夠處理遠超過記憶體總量的資料。

資料量和效能:當實體記憶體夠用的時候,redis>mongodb>mysql當實體記憶體不夠用的時候,redis和mongodb都會使用虛擬記憶體。實際上如果redis要開始虛擬記憶體,那很明顯要麼加記憶體條,要麼你換個資料庫了。但是,mongodb不一樣,只要,業務上能保證,冷熱資料的讀寫比,使得熱資料在實體記憶體中,mmap的交換較少。mongodb還是能夠保證效能。有人使用mongodb儲存了上T的資料。mysql,mysql根本就不需要擔心資料量跟記憶體下的關係。不過,記憶體的量跟熱資料的關係會極大地影響效能表現。當實體記憶體和虛擬記憶體都不夠用的時候,估計除了mysql你沒什麼好選擇了。其實,從資料存放區原理來看,我更傾向於將mongodb歸類為硬碟資料庫,但是使用了mmap作為加速的手段而已。 簡說mmap:mmap系統調用並不是完全為了用於共用記憶體而設計的。它本身提供了不同於一般對普通檔案的訪問方式,進程可以像讀寫記憶體一樣對普通檔案進行操作。 mmap 系統調用使得進程之間通過映射同一個普通檔案實現共用記憶體。普通檔案被映射到進程地址空間後,進程可以像訪問普通記憶體一樣對檔案進行訪問,不必再調用。 read(),write()等操作。mmap並不分配空間, 只是將檔案對應到調用進程的地址空間裡, 然後你就可以用memcpy等操作寫檔案, 而不用write()了.寫完後用msync()同步一下, 你所寫的內容就儲存到檔案裡了. 不過這種方式沒辦法增加檔案的長度, 因為要映射的長度在調用mmap()的時候就決定了。 下面是redis和mongodb的對比圖:

mongodb,redis,mysql 簡要對比

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.