MongoDB從入門(mén)到實(shí)戰(zhàn)之MongoDB簡(jiǎn)介
MongoDB是什么?
- MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由 C++ 語(yǔ)言編寫(xiě)。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
- MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類(lèi)似Json的Bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類(lèi)型。
- MongoDB 最大的特點(diǎn)是它支持的查詢(xún)語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類(lèi)似于面向?qū)ο蟮牟樵?xún)語(yǔ)言,幾乎可以實(shí)現(xiàn)類(lèi)似關(guān)系數(shù)據(jù)庫(kù)單表查詢(xún)的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。并且MongoDB-4.2版本開(kāi)始已經(jīng)支持分布式事務(wù)功能。
簡(jiǎn)而言之的話就是:MongoDB是一個(gè)文檔型的NoSQL數(shù)據(jù)庫(kù),用于構(gòu)建高并發(fā)、高可用和高擴(kuò)展的互聯(lián)網(wǎng)應(yīng)用程序。
BSON是什么?
BSON 是 Binary JSON 的縮寫(xiě),是一種二進(jìn)制序列化格式,用于在 MongoDB 中存儲(chǔ)文檔和進(jìn)行遠(yuǎn)程過(guò)程調(diào)用。它和Json一樣,支持內(nèi)嵌的文檔對(duì)象和數(shù)組對(duì)象,但是 Bson 有 Json 沒(méi)有的一些數(shù)據(jù)類(lèi)型,如 Date 和 BinData 類(lèi)型。
MongoDB的優(yōu)勢(shì)
高性能
MongoDB提供高性能的數(shù)據(jù)持久性。對(duì)嵌入式數(shù)據(jù)模型的支持減少了數(shù)據(jù)庫(kù)系統(tǒng)上的IO活動(dòng)。索引支持更快的查詢(xún),并且包含嵌入式文檔和數(shù)組的鍵。
- 文本索引解決搜索的需求;
- TTL索引解決歷史數(shù)據(jù)自動(dòng)過(guò)期的需求;
- 地理位置索引可用于構(gòu)建各種 O2O 應(yīng)用;
高可用
MongoDB的高可用性通過(guò)副本集(Replica Set)實(shí)現(xiàn),提供自動(dòng)故障轉(zhuǎn)移(秒級(jí)切換主節(jié)點(diǎn))和多節(jié)點(diǎn)數(shù)據(jù)冗余,確保服務(wù)持續(xù)可用并最大程度減少數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
海量數(shù)據(jù)存儲(chǔ)
MongoDB內(nèi)置GridFS,支持海量存儲(chǔ)。
豐富的查詢(xún)支持
MongoDB支持豐富的查詢(xún)語(yǔ)言,支持讀寫(xiě)(CRUD)操作、比如數(shù)據(jù)聚合、文本搜索、地理空間查詢(xún)等。
支持多種編程語(yǔ)言
MongoDB支持多種流行編程語(yǔ)言如C,C++,C# / .NET,Erlang,Haskell,Java,PHP,Python,Go等多種語(yǔ)言。
其他特點(diǎn)
如可拓展性強(qiáng)模式自由、動(dòng)態(tài)模式、靈活的文檔模型等。
MongoDB的劣勢(shì)
- 單機(jī)可靠性比較差。
- 磁盤(pán)空間占用比較大。
- 在集群分片中的數(shù)據(jù)分布不均勻。
- 大數(shù)據(jù)量持續(xù)插入,寫(xiě)入性能有較大波動(dòng)。
MongoDB業(yè)務(wù)應(yīng)用場(chǎng)景
四高場(chǎng)景應(yīng)對(duì)
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)(如MySQL,MS SQL Server),在數(shù)據(jù)操作的四高需求以及應(yīng)對(duì)Web2.0的網(wǎng)站需求面前顯得力不從心,而MongoDB可更好的應(yīng)對(duì)四高需求:
- High performance(高性能):對(duì)數(shù)據(jù)庫(kù)高并發(fā)讀寫(xiě)的需求。
- Huge Storage(海量存儲(chǔ)):對(duì)海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(wèn)的需求。
- High Scalability && High Availability(高可擴(kuò)展性和高可用性):對(duì)數(shù)據(jù)庫(kù)的高可擴(kuò)展性和高可用性的需求。
具體應(yīng)用場(chǎng)景
- 游戲應(yīng)用:使用MongoDB作為游戲服務(wù)器的數(shù)據(jù)庫(kù)存儲(chǔ)用戶(hù)信息。用戶(hù)的游戲裝備、積分等直接以?xún)?nèi)嵌文檔的形式存儲(chǔ),方便進(jìn)行查詢(xún)與更新。
- 物流應(yīng)用:使用MongoDB存儲(chǔ)訂單信息,訂單狀態(tài)在運(yùn)送過(guò)程中會(huì)不斷更新,以MongoDB內(nèi)嵌數(shù)組的形式來(lái)存儲(chǔ),一次查詢(xún)就能將訂單所有的變更讀取出來(lái),方便快捷且一目了然。
- 社交應(yīng)用:使用MongoDB存儲(chǔ)用戶(hù)信息以及用戶(hù)發(fā)表的朋友圈信息,通過(guò)地理位置索引實(shí)現(xiàn)附近的人、地點(diǎn)等功能。并且MongoDB非常適合用來(lái)存儲(chǔ)聊天記錄,因?yàn)樗峁┝朔浅XS富的查詢(xún),并在寫(xiě)入和讀取方面都相對(duì)較快。
- 視頻直播:使用MongoDB存儲(chǔ)用戶(hù)信息、禮物信息等。
- 大數(shù)據(jù)應(yīng)用:使用MongoDB作為大數(shù)據(jù)的云存儲(chǔ)系統(tǒng),隨時(shí)進(jìn)行數(shù)據(jù)提取分析,掌握行業(yè)動(dòng)態(tài)。
- 等等等...
這些應(yīng)用場(chǎng)景中,數(shù)據(jù)操作方面的共同特點(diǎn)是:
對(duì)于下面的這些數(shù)據(jù),我們更適合使用 MongoDB來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ):
- 數(shù)據(jù)量大。
- 讀寫(xiě)操作頻繁。
- 價(jià)值較低的數(shù)據(jù),對(duì)事務(wù)性要求不高。
MongoDB語(yǔ)言支持
MongoDB官方支持的語(yǔ)言驅(qū)動(dòng):
- 開(kāi)始使用 MongoDB 進(jìn)行開(kāi)發(fā):https://www.mongodb.com/zh-cn/docs/drivers
圖片