天天看點

《MongoDB管理與開發精要》——1.2節初識MongoDB

1.2 初識mongodb

mongodb是一個介于關系資料庫和非關系資料庫之間的産品,是非關系資料庫當中功能最豐富、最像關系資料庫的。它支援的資料結構非常松散,是類似json的bson格式,是以可以存儲比較複雜的資料類型。

1.2.1 特點及功能

mongodb最大的特點是支援的查詢語言非常強大,其文法類似于面向對象的查詢語言,幾乎可以實作類似關系資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。它是一個面向集合的、模式自由的文檔型資料庫。

(1)面向集合(collection-oriented)

資料被分組存儲在資料集中,稱為一個集合(collection)。每個集合在資料庫中都有一個唯一的辨別名,并且可以包含無限數目的文檔。集合的概念類似關系型資料庫(rdbms)裡的表(table),不同的是它不需要定義任何模式(schema)。

(2)模式自由(schema-free)

對于存儲在mongodb資料庫中的檔案,不需要知道它的任何結構定義。多次提到“無模式”或“模式自由”,它到底是個什麼概念呢?例如,下面兩條記錄可以存在于同一個集合裡面,如下面的代碼所示:

(3)文檔型

我們存儲的資料是鍵值對的集合,鍵是字元串,值可以是資料類型集合裡的任意類型,包括數組和文檔。這個資料格式稱作bson(binary serialized document notation)。

mongodb的特點

面向集合存儲,易于存儲對象類型的資料。

模式自由。

支援動态查詢。

支援完全索引,包含内部對象。

支援查詢。

支援複制和故障恢複。

使用高效的二進制資料存儲,包括大型對象(如視訊等)。

自動處理碎片,以支援雲計算層次的擴充性。

支援python、php、ruby、java、c、c#、javascript、perl及c++語言的驅動程式,社群中也提供了對erlang及.net等平台的驅動程式。

檔案存儲格式為bson(一種json的擴充)。

可通過網絡通路。

mongodb的功能

面向集合的存儲:适合存儲對象及json形式的資料。

動态查詢:mongodb支援豐富的查詢表達式。查詢指令使用json形式的标記,可輕易查詢文檔中内嵌的對象及數組。

完整的索引支援:包括文檔内嵌對象及數組。mongodb的查詢優化器會分析查詢表達式,并生成一個高效的查詢計劃。

查詢監視:mongodb包含一系列監視工具用于分析資料庫操作的性能。

複制及自動故障轉移:mongodb資料庫支援伺服器之間的資料複制,支援主從模式及伺服器之間的互相複制。複制的主要目标是提供備援及自動故障轉移。

高效的傳統存儲方式:支援二進制資料及大型對象(如照片或圖檔)。

自動分片以支援雲級别的伸縮性:自動分片功能支援水準的資料庫叢集,可動态添加額外的機器。

1.2.2 适用場合

網站資料:mongodb非常适合實時插入、更新與查詢,并具備網站實時資料存儲所需的複制及高度伸縮性。

緩存:由于性能高,mongodb也适合作為資訊基礎設施的緩存層。在系統重新開機後,由mongodb搭建的持久化緩存層可以避免下層的資料源過載。

大尺寸、低價值的資料:使用傳統的關系型資料庫存儲一些資料時可能會比較昂貴,在此之前,很多時候程式員往往會選擇傳統的檔案進行存儲。

高伸縮性的場景:mongodb非常适合由數十或數百台伺服器組成的資料庫。mongodb的路線圖中已經包含對mapreduce引擎的内置支援。

用于對象及json資料的存儲:mongodb的bson資料格式非常适合文檔化格式的存儲及查詢。