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