每日一句
Failure will never overtake me if my determination to succeed is strong enough.
只要我成功的決心足夠強,失敗就永遠不會打倒我。
概述
MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。
在高負載的情況下,添加更多的節(jié)點,可以保證服務(wù)器性能。
MongoDB 旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
MongoDB 將數(shù)據(jù)存儲為一個文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。
主要特點
- MongoDB的提供了一個面向文檔存儲,操作起來比較簡單和容易。
- 你可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現(xiàn)更快的排序。
- 你可以通過本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像,這使得MongoDB有更強的擴展性。
- 如果負載的增加(需要更多的存儲空間和更強的處理能力) ,它可以分布在計算機網(wǎng)絡(luò)中的其他節(jié)點上這就是所謂的分片。
- Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組。
- MongoDb 使用update()命令可以實現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。
- Mongodb中的Map/reduce主要是用來對數(shù)據(jù)進行批量處理和聚合操作。
- Map和Reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進行處理。
- Map函數(shù)和Reduce函數(shù)是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執(zhí)行MapReduce操作。
- GridFS是MongoDB中的一個內(nèi)置功能,可以用于存放大量小文件。
- MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲在服務(wù)端,下次直接調(diào)用即可。
- MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
- MongoDB安裝簡單。
發(fā)展歷史
- 2007年10月,MongoDB由10gen團隊所發(fā)展。2009年2月首度推出。
- 2012年05月23日,MongoDB2.1 開發(fā)分支發(fā)布了! 該版本采用全新架構(gòu),包含諸多增強。
- 2012年06月06日,MongoDB 2.0.6 發(fā)布,分布式文檔數(shù)據(jù)庫。
- 2013年04月23日,MongoDB 2.4.3 發(fā)布,此版本包括了一些性能優(yōu)化,功能增強以及bug修復(fù)。
- 2013年08月20日,MongoDB 2.4.6 發(fā)布,是目前最新的穩(wěn)定版。
應(yīng)用場景
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(如MySQL),在數(shù)據(jù)操作的‘三高’需求以及應(yīng)對web2.0的網(wǎng)站需求時,顯得力不從心。
關(guān)于三高的解釋:
- High performance - 對數(shù)據(jù)庫高并發(fā)讀寫的需求
- Huge Storage - 對海量數(shù)據(jù)的高效率存儲和訪問的需求。
- High Scalability && High Availability - 對數(shù)據(jù)庫的高可擴展性和高可用性的需求。
使用MongoDB可以應(yīng)對三高需求。
具體應(yīng)用場景
- 社交場景:使用MongoDB存儲用戶信息,以及用戶發(fā)表的朋友圈信息,通過地理位置索引實現(xiàn)附近的人、地點等功能。
- 游戲場景:使用MongoDB存儲游戲用戶信息,用戶的裝備、積分等直接以內(nèi)嵌文檔的形式存儲,方便查詢、高效率存儲。
- 物流場景:使用MongoDB存儲訂單信息,訂單狀態(tài)在運送過程中會不斷更新,以MongoDB內(nèi)嵌數(shù)組的形式來存儲,一次查詢就能將訂單所有的變更讀取出來。
- 物聯(lián)網(wǎng)場景:使用MongoDB存儲所有接入的智能設(shè)備信息,以及設(shè)備匯報的日志信息,并對這些信息進行多維度的分析。
- 視頻直播:使用MongoDB存儲用戶信息、點贊互動的信息等。
什么時候選擇MongoDB
在架構(gòu)選型上,關(guān)于是否要選擇它,可以考慮以下的幾個特征:
- 數(shù)據(jù)量大
- 讀寫頻繁
- 價值較低的數(shù)據(jù),對事務(wù)性要求不高,不需要復(fù)雜join 支持
- 新應(yīng)用、新業(yè)務(wù)、需求會變、數(shù)據(jù)模型無法確定,想快速迭代開發(fā)
- 應(yīng)用需要2000 - 3000 以上的讀寫QPS(更高也可以)
- 應(yīng)用需要TB甚至PB級別的數(shù)據(jù)存儲
- 應(yīng)用發(fā)展迅速,需要能夠快速水平擴展
- 應(yīng)用要求存儲的數(shù)據(jù)不丟失
- 應(yīng)用需要99.999%高可用
- 應(yīng)用需要大量的地址位置查詢、文本查詢
如果上述有1個符合,可以考慮 MongoDB,2個及以上的符合,選擇 MongoDB 絕不會后悔。
美文佳句
每當秋風驟起,那柿樹上的一片片葉子,就紛紛落下來了,給人一種歲月易逝、時不我待的感覺。而這時候的柿子,個個都裸露了出來,它們站在高高的樹枝上,在深秋陽光的照耀下,呈現(xiàn)出晶瑩剔透的光澤,給人一種歲月靜美的印象、果實甜蜜的誘惑。
你好,我是yltrcc,日常分享技術(shù)點滴,歡迎關(guān)注我:ylcoder