Mongo概括

Mongo簡介

mongo是文檔數據庫,json存儲結構,提供了靈活的數據類型,可以快速上手,快速開發,隨着數據量的增加,有複製集,sharding模式用來水平擴展。但是他的查詢模式在單機模式,複製集模式到sharding模式中有變更,即sharding模式下sharding key查詢與複製集模式下任意條件查詢不是很符合,相當於關係型數據庫的分庫分表,還是需要更改應用程序中查詢語句


PS:根據個人的NoSQL經驗,我對於mongo的態度是用於快速開發,適合的數據量和MySQL不分庫分表前的承載數據量相當,即數據量1億以下。mongo的發展趨勢一直就是不斷的迎合關係型數據庫,提供更多關係型數據庫具備的功能,讓開發者能夠無縫遷移。果然4.0中提供了跨文檔的事務支持了。



Mongo 物理架構


複製集

![這裏寫圖片描述](https://docs.mongodb.com/manual/_images/replica-set-primary-with-two-secondaries.png)一個主節點,兩個secondary 節點。主節點寫,secondary 節點可以分發讀。三個節點的數據完全一樣。


分片模式

複製集這種不分片的mongo 架構滿足不了數據量大的情況。

![這裏寫圖片描述](https://docs.mongodb.com/manual/_images/sharded-cluster-production-architecture.png)三種角色 - query router 查詢路由,server 發請求到router,然後分發給shard - config servers 存儲集羣的元數據和配置信息,不存儲數據 - shard 存儲分片數據注意query router 是mongos instance,而config server 和 shard中節點都是mongod instance.兩者不一樣。mongos 啓動的時候需要連接config server,並配置各個shard信息。



與Cassandra比較


目前NoSql 排行版前三是Mongo,Cassandra,Redis.Redis 特點明確,key-value 形式,數據不持久化主要用來做緩存。所以這裏主要比較Mongo,Cassandra


1. license 

mongo 是AGPLV3,mongo driver 纔是apache.AGPLV3不是完全開源的,

cassandra 是apache,無壓力


2. 性能

現在這世道,是個數據庫都說自己是高性能。個人使用情況來看。cassandra寫入性能要好很多,原因在於他只寫commit log 和memtable.線性擴展Cassandra也好很多。讀操作沒有特別區別。

但是不基於業務來談性能沒什麼多大意義。因爲cassandra爲了高效存儲數據,對query的支持不是很友好,所以通常爲了滿足query,你可能需要建立index,視圖,或者新表。這些開銷會影響到寫性能。


3. 數據模型

mongo 支持複雜的數據模型,數據類型更加的豐富,還可以嵌套文檔。

cassandra 相對要弱點。


4. 集羣架構

mongo 的sharded 集羣需要三種角色,query router,config server,data store replicat set.當有primary節點down掉,需要重新選舉primary node.所以會有down time.另外集羣角色多,部署起來相對麻煩,但個人覺得這不是什麼多大問題,畢竟沒有人需要經常去部署。

cassandra所有節點都一樣,replication_factor 爲3的,write_consistency 爲quorum時,可支持1個node down。對於整個cluster來說,是zero down time.沒有任何影響。


5. multi active-active 數據中心

mongo 有主從節點,只有主節點能夠寫。所以沒法做到active-active.如果用戶從一個數據中心到另外一個數據中心了,沒法寫到新的數據中心,必須要寫到最初的數據中心。

cassandra 沒問題,server端可以配置DC-Aware 模式,就可以根據server來路由到新的數據中心


6. 與關係型數據庫對比

mongo 更像關係型數據庫,雖然mongo是基於document,沒有了SQL語句,而cassandra卻有CQL.以及mongo 沒有Schema,而cassandra卻有。~~但是從設計schema,和使用情況來說。mongo不需要太多的思想轉變,數據既可以是規範化也可以有反規範化。但是cassandra則完全反規範化。~~


cassandra 與mongo一樣,都有範式和反範式設計。


- mongo index實現原理和關係型數據庫一樣都是B+樹,而cassandra則是新建一張表。mongo index支持類型更加的豐富。


- 另外cql語法和SQL相比,有很多的限制。


SpringBoot開啓Mongo開發之旅

https://github.com/FS1360472174/nosql-mongo/tree/master/project/example


本文分享自微信公衆號 - 方丈的寺院(gh_c98f244e174d)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

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