Mongdb、MySQL、Redis的區別

Mongdb、MySQL、Redis的區別
Mongdb的優勢:1、快速!擁有適量級內存的Mongdb的性能是非常迅速的,它將熱數據存儲在物理內存中(而不僅僅是索引和少部分數據),使得熱數據的讀寫變得十分快速,從而提高了整體的速度和效率。
2、高擴展性!Mongdb的高可用與集羣架構擁有十分高效的擴展性,通過物理機器的增加,以及sharding的增加,Mongdb的擴展將達到一個十分驚人的地步。
3、自身的Failover!Mongdb的副本集配置中,當主庫遇到問題,無法繼續提供服務的時候,副本集將選舉出一個新的主庫來繼續提供服務。
4、Json的存儲格式!Mongdb和Bson存儲格式十分適合文檔格式的存儲和查詢。
MongoDB 的劣勢:不支持事務操作(最主要的缺點)、MongoDB 佔用空間過大、MongoDB 沒有如 MySQL 那樣成熟的維護工具。
Redis:內存數據庫,持久化方式:Redis所有數據庫都是放在內存中的,持久化是使用RDB方式或AOF方式。

數據量和性能的比較:

當物理內存夠用的時候,Redis > MongoDB > MySQL
當物理內存不夠用的時候,Redis 和 MongoDB 都會使用虛擬內存。
實際上如果Redis要開始虛擬內存,那很明顯要麼加內存條,要麼你就該換個數據庫了。
但是,MongoDB 不一樣,只要業務上能保證冷熱數據的讀寫比,使得熱數據在物理內存中 mmap 的交換較少,MongoDB 還是能夠保證性能。有人使用 MongoDB 存儲了上T的數據。
MySQL,MySQL根本就不需要擔心數據量跟內存下的關係。不過,內存的量跟熱數據的關係會極大地影響性能表現。
當物理內存和虛擬內存都不夠用的時候,估計除了 MySQL 你沒什麼好選擇了。
其實,從數據存儲原理來看,我更傾向於將 MongoDB 歸類爲硬盤數據庫,但是使用了 mmap 作爲加速的手段而已。
MongoDB 與 MySQL 命令對比
傳統的關係數據庫一般由數據庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB 是由數據庫(database)、集合(collection)、文檔對象(document)三個層次組成。MongoDB對於關係型數據庫裏的表,但是集合中沒有列、行和關係概念,這體現了模式自由的特點。
MongoDB (文檔型數據庫):提供可擴展的高性能數據存儲
1、基於分佈式文件存儲
2、高負載情況下添加更多節點,可以保證服務器性能
3、將數據存儲爲一個文檔
MongoDB 與 MySQL 的比較
1、穩定性
2、索引,索引放在內存中,能夠提升隨機讀寫的性能。如果索引不能完全放在內存,一旦出現隨機讀寫比較高的時候,就會頻繁地進行磁盤交換,MongoDB 的性能就會急劇下降
3、佔用的空間很大,因爲它屬於典型空間換時間原則的類型。那麼它的磁盤空間比普通數據庫會浪費一些,而且到目前爲止它還沒有實現在線壓縮功能,
在 MongoDB 中頻繁的進行數據增刪改時,如果記錄變了,例如數據大小發生了變化,這時候容易產生一些數據碎片,出現碎片引發的結果,一個是索引會出現性能問題,另外一個就是在一定的時間後,所佔空間會莫明其妙地增大,所以要定期把數據庫做修復,定期重新做索引,這樣會提升MongoDB 的穩定性和效率。在最新的版本里,它已經在實現在線壓縮,估計應該在2.0版左右,應該能夠實現在線壓縮,可以在後臺執行現在repair DataBase 的一些操作。如果那樣,就解決了目前困擾我們的大問題。
4、MongoDB 對數據間的事務關係支持比較弱
5、運維不方便
MongoDB 相對於 MySQL 的優勢

  1. 適合那些對數據庫具體數據格式不明確或者數據庫數據格式經常變化的需求模型,而且對開發者十分友好。
    2. 自帶一個分佈式文件系統,可以很方便地部署到服務器機羣上。
    MongoDB 裏有一個Shard的概念,就是方便爲了服務器分片使用的。每增加一臺Shard,MongoDB 的插入性能也會以接近倍數的方式增長,磁盤容量也很可以很方便地擴充。
  2. 自帶了對map-reduce運算框架的支持,這也很方便進行數據的統計。類似於group by。
    MongoDB 和 Redis 的區別:

    MongoDB 更類似 MySQL,支持字段索引、遊標操作,其優勢在於查詢功能比較強大,擅長查詢 JSON 數據,能存儲海量數據,但是不支持事務。
    MySQL 在大數據量時效率顯著下降,MongoDB 更多時候作爲關係數據庫的一種替代。
    內存管理機制
    Redis 數據全部存在內存,定期寫入磁盤,當內存不夠時,可以選擇指定的 LRU 算法刪除數據。
    MongoDB 數據存在內存,由 linux系統 mmap 實現,當內存不夠時,只將熱點數據放入內存,其他數據存在磁盤。
    支持的數據結構
    Redis 支持的數據結構豐富,包括hash、set、list等。
    MongoDB 數據結構比較單一,但是支持豐富的數據表達,索引,最類似關係型數據庫,支持的查詢語言非常豐富。
    集羣:MongoDB 集羣技術比較成熟,Redis從3.0開始支持集羣。二者均可支持持久化。
    不適用場景:1、需要使用複雜sql的操作;2、事務性系統;
    Mongdb、MySQL、Redis的區別

    MySQL 與 Redis 的區別:

    MySQL 是持久化存儲,存放在磁盤裏面,檢索的話,會涉及到一定的 IO,爲了解決這個瓶頸,於是出現了緩存,比如現在用的最多的 memcached(簡稱mc)。首先,用戶訪問mc,如果未命中,就去訪問 MySQL,之後像內存和硬盤一樣,把數據複製到mc一部分。Redis 和mc都是緩存,並且都是駐留在內存中運行的,這大大提升了高數據量web訪問的訪問速度。然而mc只是提供了簡單的數據結構,比如 string存儲;Redis卻提供了大量的數據結構,比如string、list、set、hashset、sorted set這些,這使得用戶方便了好多,畢竟封裝了一層實用的功能,同時實現了同樣的效果,當然用Redis而慢慢捨棄mc。
    內存和硬盤的關係,硬盤放置主體數據用於持久化存儲,而內存則是當前運行的那部分數據,CPU訪問內存而不是磁盤,這大大提升了運行的速度,當然這是基於程序的局部化訪問原理。
     推理到 Redis + MySQL,它是內存+磁盤關係的一個映射,MySQL 放在磁盤,Redis放在內存,這樣的話,web應用每次只訪問Redis,如果沒有找到想要的數據,纔去訪問 MySQL。
     然而 Redis + MySQL 和內存+磁盤的用法最好是不同的。
    前者是內存數據庫,數據保存在內存中,當然速度快。
    後者是關係型數據庫,功能強大,數據訪問也就慢。
    像memcache,MongoDB,Redis,都屬於No SQL系列。
    不是一個類型的東西,應用場景也不太一樣,還是要看你的需求來決定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章