1、MySQL
關係型數據庫。node
在不一樣的引擎上有不一樣 的存儲方式。mysql
查詢語句是使用傳統的sql語句,擁有較爲成熟的體系,成熟度很高。web
開源數據庫的份額在不斷增長,mysql的份額頁在持續增加。redis
缺點就是在海量數據處理的時候效率會顯著變慢。算法
2、Mongodb
非關係型數據庫(nosql ),屬於文檔型數據庫。先解釋一下文檔的數據庫,便可以存放xml、json、bson類型系那個的數據。這些數據具有自述性(self-describing),呈現分層的樹狀數據結構。數據結構由鍵值(key=>value)對組成。sql
存儲方式:虛擬內存+持久化。mongodb
查詢語句:是獨特的Mongodb的查詢方式。數據庫
適合場景:事件的記錄,內容管理或者博客平臺等等。json
架構特色:能夠經過副本集,以及分片來實現高可用。後端
數據處理:數據是存儲在硬盤上的,只不過須要常常讀取的數據會被加載到內存中,將數據存儲在物理內存中,從而達到高速讀寫。
成熟度與普遍度:新興數據庫,成熟度較低,Nosql數據庫中最爲接近關係型數據庫,比較完善的DB之一,適用人羣不斷在增加。
優點:
-
快速!在適量級的內存的Mongodb的性能是很是迅速的,它將熱數據存儲在物理內存中,使得熱數據的讀寫變得十分快,
-
高擴展!
-
自身的Failover機制!
-
json的存儲格式!
缺點:主要是無事物機制!
3、Redis
非關係型數據庫(nosql )
Redis數據所有存在內存,按期寫入磁盤,當內存不夠時,能夠選擇指定的LRU算法刪除數據。
4、MongoDB和Redis區別
MongoDB和Redis都是NoSQL,採用結構型數據存儲。兩者在使用場景中,存在必定的區別,這也主要因爲
兩者在內存映射的處理過程,持久化的處理方法不一樣。MongoDB建議集羣部署,更多的考慮到集羣方案,Redis
更偏重於進程順序寫入,雖然支持集羣,也僅限於主-從模式。
指標 | MongoDB(v2.4.9) | Redis(v2.4.17) | 比較說明 |
---|---|---|---|
實現語言 | C++ | C/C++ | - |
協議 | BSON、自定義二進制 | 類Telnet | - |
性能 | 依賴內存,TPS較高 | 依賴內存,TPS很是高 | Redis優於MongoDB |
可操做性 | 豐富的數據表達、索引;最相似於關係數據庫,支持豐富的查詢語言 | 數據豐富,較少的IO | MongoDB優於Redis |
內存及存儲 | 適合大數據量存儲,依賴系統虛擬內存管理,採用鏡像文件存儲;內存佔有率比較高,官方建議獨立部署在64位系統(32位有最大2.5G文件限制,64位沒有改限制) | Redis2.0後增長虛擬內存特性,突破物理內存限制;數據能夠設置時效性,相似於memcache | 不一樣的應用角度看,各有優點 |
可用性 | 支持master-slave,replicaset(內部採用paxos選舉算法,自動故障恢復),auto sharding機制,對客戶端屏蔽了故障轉移和切分機制 | 依賴客戶端來實現分佈式讀寫;主從複製時,每次從節點從新鏈接主節點都要依賴整個快照,無增量複製;不支持自動sharding,須要依賴程序設定一致hash機制 | MongoDB優於Redis;單點問題上,MongoDB應用簡單,相對用戶透明,Redis比較複雜,須要客戶端主動解決。(MongoDB 通常會使用replica sets和sharding功能結合,replica sets側重高可用性及高可靠性,而sharding側重於性能、易擴展) |
可靠性 | 從1.8版本後,採用binlog方式(MySQL一樣採用該方式)支持持久化,增長可靠性 | 依賴快照進行持久化;AOF加強可靠性;加強可靠性的同時,影響訪問性能 | MongoDB優於Redis |
一致性 | 不支持事物,靠客戶端自身保證 | 支持事物,比較弱,僅能保證事物中的操做按順序執行 | Redis優於MongoDB |
數據分析 | 內置數據分析功能(mapreduce) | 不支持 | MongoDB優於Redis |
應用場景 | 海量數據的訪問效率提高 | 較小數據量的性能及運算 | MongoDB優於Redis |
5、Mysql和Mongodb應用場景
MongoDB 的適用場景爲:數據不是特別重要(例如通知,推送這些),數據表結構變化較爲頻繁,數據量特別大,數據的併發性特別高,數據結構比較特別(例如地圖的位置座標),這些狀況下用 MongoDB , 其餘狀況就仍是用 MySQL ,這樣組合使用就能夠達到最大的效率。
-
1.若是須要將mongodb做爲後端db來代替mysql使用,即這裏mysql與mongodb 屬於平行級別,那麼,這樣的使用可能有如下幾種狀況的考量: (1)mongodb所負責部分以文檔形式存儲,可以有較好的代碼親和性,json格式的直接寫入方便。(如日誌之類) (2)從data models設計階段就將原子性考慮於其中,無需事務之類的輔助。開發用如nodejs之類的語言來進行開發,對開發比較方便。 (3)mongodb自己的failover機制,無需使用如MHA之類的方式實現。
-
2.將mongodb做爲相似redis ,memcache來作緩存db,爲mysql提供服務,或是後端日誌收集分析。 考慮到mongodb屬於nosql型數據庫,sql語句與數據結構不如mysql那麼親和 ,也會有不少時候將mongodb作爲輔助mysql而使用的類redis memcache 之類的緩存db來使用。 亦或是僅做日誌收集分析。
MongoDB 有一個最大的缺點,就是它佔用的空間很大,由於它屬於典型空間換時間原則的類型。那麼它的磁盤空間比普通數據庫會浪費一些,並且到目前爲止它尚未實如今線壓縮功能,在 MongoDB 中頻繁的進行數據增刪改時,若是記錄變了,例如數據大小發生了變化,這時候容易產生一些數據碎片,出現碎片引起的結果,一個是索引會出現性能問題。
另一個就是在必定的時間後,所佔空間會莫明其妙地增大,因此要按期把數據庫作修復,按期從新作索引,這樣會提高MongoDB 的穩定性和效率。
1.MySQL 來自女兒的名字; MongoDB 來自 humongous
2.MySQL 使用 Table/Row/Column; MongoDB 使用 Collection/Document
3.MySQL 須要指定 table 的 schema; MongoDB的 collection 的每一個 document 的 schema 能夠自由修改
4.MySQL 支持 join; MongoDB 沒有 join
5.MySQL 使用 SQL 語言; MongoDB 使用相似 JavaScript 的函數
命令對比
MongoDB 與 MySQL 命令對比 傳統的關係數據庫通常由數據庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB 是由數據庫(database)、集合(collection)、文檔對象(document)三個層次組成。MongoDB對於關係型數據庫裏的表,可是集合中沒有列、行和關係概念,這體現了模式自由的特色。
6、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系列。不是一個類型的東西,應用場景也不太同樣,仍是要看你的需求來決定。