天天看點

資料庫必知詞彙:MongoDB

MongoDB是一個基于分布式檔案存儲的資料庫。由C++語言編寫。旨在為Web應用提供可擴充的高性能資料存儲解決方案。MongoDB是一個介于關系資料庫和非關系資料庫之間的産品,是非關系資料庫當中功能最豐富,最像關系資料庫的。它支援的資料結構非常松散,是類似JSON的BSON格式,是以可以存儲比較複雜的資料類型。

MongoDB最大的特點是它支援的查詢語言非常強大,其文法有點類似于面向對象的查詢語言,幾乎可以實作類似關系資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。MongoDB 将資料存儲為一個文檔,資料結構由鍵值(key=>value)對組成。MongoDB文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。

MongoDB 的設計目标是高性能、可擴充、易部署、易使用,存儲資料非常友善。其主要功能特性如下。

(1)面向集合存儲,容易存儲對象類型的資料。在MongoDB 中資料被分組存儲在集合中,集合類似RDBMS 中的表,一個集合中可以存儲無限多的文檔。

(2)模式自由,采用無模式結構存儲。在MongoDB 中集合中存儲的資料是無模式的文檔,采用無模式存儲資料是集合差別于RDBMS 中的表的一個重要特征。

(3)支援完全索引,可以在任意屬性上建立索引,包含内部對象。MongoDB的索引和RDBMS 的索引基本一樣,可以在指定屬性、内部對象上建立索引以提高查詢的速度。除此之外,MongoDB 還提供建立基于地理空間的索引的能力。

(4)支援查詢。MongoDB 支援豐富的查詢操作,MongoDB 幾乎支援SQL中的大部分查詢。

(5)強大的聚合工具。MongoDB 除了提供豐富的查詢功能外,還提供強大的聚合工具,如count、group 等,支援使用MapReduce 完成複雜的聚合任務。

(6)支援複制和資料恢複。MongoDB 支援主從複制機制,可以實作資料備份、故障恢複、讀擴充等功能。而基于副本集的複制機制提供了自動故障恢複的功能,確定了叢集資料不會丢失。

(7)使用高效的二進制資料存儲,包括大型對象(如視訊)。使用二進制格式存儲,可以儲存任何類型的資料對象。

(8)自動處理分片,以支援雲計算層次的擴充。MongoDB 支援叢集自動切分資料,對資料進行分片可以使叢集存儲更多的資料,實作更大的負載,也能保證存儲的負載均衡。

(9)支援Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++語言的驅動程式,MongoDB 提供了目前所有主流開發語言的資料庫驅動包,開發人員使用任何一種主流開發語言都可以輕松程式設計,實作通路MongoDB 資料庫。

(10)檔案存儲格式為BSON(JSON 的一種擴充)。BSON 是對二進制格式的JSON 的簡稱,BSON 支援文檔和數組的嵌套。

(11)可以通過網絡通路。可以通過網絡遠端通路MongoDB 資料庫。

MongoDB的資料模型:一個MongoDB 執行個體可以包含一組資料庫,一個Database 可以包含一組Collection(集合),一個集合可以包含一組Document(文檔)。一個Document包含一組field(字段),每一個字段都是一個Key/Value Pair。

MongoDB 的主要目标是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS 系統(具有豐富的功能)之間架起一座橋梁,它集兩者的優勢于一身。根據官方網站的描述,Mongo 适用于以下場景:

  • 網站資料:Mongo 非常适合實時的插入,更新與查詢,并具備網站實時資料存儲所需的複制及高度伸縮性。
  • 緩存:由于性能很高,Mongo 也适合作為資訊基礎設施的緩存層。在系統重新開機之後,由Mongo 搭建的持久化緩存層可以避免下層的資料源過載。
  • 大尺寸、低價值的資料:使用傳統的關系型資料庫存儲一些資料時可能會比較昂貴,在此之前,很多時候程式員往往會選擇傳統的檔案進行存儲。
  • 高伸縮性的場景:Mongo 非常适合由數十或數百台伺服器組成的資料庫,Mongo 的路線圖中已經包含對MapReduce 引擎的内置支援。
  • 用于對象及JSON 資料的存儲:Mongo 的BSON 資料格式非常适合文檔化格式的存儲及查詢。

    MongoDB 的使用也會有一些限制,例如,它不适合于以下幾個地方。

  • 高度事務性的系統:例如,銀行或會計系統。傳統的關系型資料庫目前還是更适用于需要大量原子性複雜事務的應用程式。
  • 傳統的商業智能應用:針對特定問題的BI 資料庫會産生高度優化的查詢方式。對于此類應用,資料倉庫可能是更合适的選擇。
  • 需要SQL 的問題。

資料來源:

什麼是MongoDB ?

https://www.runoob.com/mongodb/mongodb-intro.html

張紹華,潘蓉,宗宇偉主編. 大資料技術與應用 大資料治理與服務[M]. 上海:上海科學技術出版社, 2016.01.

Boicea A , Radulescu F , Agapin L I . MongoDB vs Oracle -- Database Comparison[C]// Emerging Intelligent Data and Web Technologies (EIDWT), 2012 Third International Conference on. IEEE, 2012.

What Is MongoDB?

https://www.mongodb.com/what-is-mongodb