mongodb,redis,mysql 簡要對比

mongodb,redis,mysql 簡要對比

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

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

當下主流的要數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的對比圖:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章