MongoDB 簡介

知識擴充:
關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的區(qū)別,優(yōu)勢比較?
官網(wǎng)鏈接:
https://www.mongodb.com/nosql-explained?jmp=footer
區(qū)別:
關(guān)系型數(shù)據(jù)庫通過外鍵關(guān)聯(lián)來建立表與表之間的關(guān)系,非關(guān)系型數(shù)據(jù)庫通常指數(shù)據(jù)以對象形式存儲在數(shù)據(jù)庫中(鍵值對),而對象之間的關(guān)系通常通過每個對象的自身屬性來確定。

非關(guān)系型數(shù)據(jù)庫的優(yōu)勢:

  1. 性能
    NOSQL 是基于鍵值對的,不需要SQL層的解析,所以性能非常高。
  2. 可擴展性
    同樣也是因為基于鍵值對,數(shù)據(jù)之間沒有耦合性,所以非常容易水平擴展。

關(guān)系型數(shù)據(jù)庫的優(yōu)勢:

  1. 復雜查詢
    可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數(shù)據(jù)查詢。
  2. 事務(wù)支持
    使得對于安全性能很高的數(shù)據(jù)訪問要求得以實現(xiàn)。

MongoDB簡介

1、易用性

MongoDB是一個面向文檔(document-oriented)的數(shù)據(jù)庫,而不是關(guān)系型數(shù)據(jù)庫。
不采用關(guān)系型主要是為了獲得更好得擴展性。當然還有一些其他好處,與關(guān)系數(shù)據(jù)庫相比,面向文檔的數(shù)據(jù)庫不再有“行“(row)的概念取而代之的是更為靈活的“文檔”(document)模型。
通過在文檔中嵌入文檔和數(shù)組,面向文檔的方法能夠僅使用一條記錄來表現(xiàn)復雜的層級關(guān)系,這與現(xiàn)代的面向?qū)ο笳Z言的開發(fā)者對數(shù)據(jù)的看法一致。
另外,不再有預(yù)定義模式(predefined schema):文檔的鍵(key)和值(value)不再是固定的類型和大小。由于沒有固定的模式,根據(jù)需要添加或刪除字段變得更容易了。通常由于開發(fā)者能夠進行快速迭代,所以開發(fā)進程得以加快。而且,實驗更容易進行。開發(fā)者能嘗試大量的數(shù)據(jù)模型,從中選一個最好的。

2、易擴展性

應(yīng)用程序數(shù)據(jù)集的大小正在以不可思議的速度增長。隨著可用帶寬的增長和存儲器價格的下降,即使是一個小規(guī)模的應(yīng)用程序,需要存儲的數(shù)據(jù)量也可能大的驚人,甚至超出
了很多數(shù)據(jù)庫的處理能力。過去非常罕見的T級數(shù)據(jù),現(xiàn)在已經(jīng)是司空見慣了。
由于需要存儲的數(shù)據(jù)量不斷增長,開發(fā)者面臨一個問題:應(yīng)該如何擴展數(shù)據(jù)庫,分為縱向擴展和橫向擴展,縱向擴展是最省力的做法,但缺點是大型機一般都非常貴,而且
當數(shù)據(jù)量達到機器的物理極限時,花再多的錢也買不到更強的機器了,此時選擇橫向擴展更為合適,但橫向擴展帶來的另外一個問題就是需要管理的機器太多。
MongoDB的設(shè)計采用橫向擴展。面向文檔的數(shù)據(jù)模型使它能很容易地在多臺服務(wù)器之間進行數(shù)據(jù)分割。MongoDB能夠自動處理跨集群的數(shù)據(jù)和負載,自動重新分配文檔,以及將
用戶的請求路由到正確的機器上。這樣,開發(fā)者能夠集中精力編寫應(yīng)用程序,而不需要考慮如何擴展的問題。如果一個集群需要更大的容量,只需要向集群添加新服務(wù)器,MongoDB就會自動將現(xiàn)有的數(shù)據(jù)向新服務(wù)器傳送

3. 豐富的功能

MongoDB作為一款通用型數(shù)據(jù)庫,除了能夠創(chuàng)建、讀取、更新和刪除數(shù)據(jù)之外,還提供了一系列不斷擴展的獨特功能

1、索引

支持通用二級索引,允許多種快速查詢,且提供唯一索引、復合索引、地理空間索引、全文索引

2、聚合

支持聚合管道,用戶能通過簡單的片段創(chuàng)建復雜的集合,并通過數(shù)據(jù)庫自動優(yōu)化

3、特殊的集合類型

支持存在時間有限的集合,適用于那些將在某個時刻過期的數(shù)據(jù),如會話session。類似地,MongoDB也支持固定大小的集合,用于保存近期數(shù)據(jù),如日志

4、文件存儲

支持一種非常易用的協(xié)議,用于存儲大文件和文件元數(shù)據(jù)。MongoDB并不具備一些在關(guān)系型數(shù)據(jù)庫中很普遍的功能,如鏈接join和復雜的多行事務(wù)。省略
這些的功能是處于架構(gòu)上的考慮,或者說為了得到更好的擴展性,因為在分布式系統(tǒng)中這兩個功能難以高效地實現(xiàn)

4、卓越的性能

MongoDB的一個主要目標是提供卓越的性能,這很大程度上決定了MongoDB的設(shè)計。MongoDB把盡可能多的內(nèi)存用作緩存cache,視圖為每次查詢自動選擇正確的索引。
總之各方面的設(shè)計都旨在保持它的高性能
雖然MongoDB非常強大并試圖保留關(guān)系型數(shù)據(jù)庫的很多特性,但它并不追求具備關(guān)系型數(shù)據(jù)庫的所有功能。只要有可能,數(shù)據(jù)庫服務(wù)器就會將處理邏輯交給客戶端。這種精簡方式的設(shè)計是MongoDB能夠?qū)崿F(xiàn)如此高性能的原因之一.

MongoDB基本數(shù)據(jù)類型

1、在概念上,MongoDB的文檔與Javascript的對象相近,因而可以認為它類似于JSON。JSON(http://www.json.org)是一種簡單的數(shù)據(jù)表示方式:其規(guī)范僅用一段文字就能描述清楚(其官網(wǎng)證明了這點),且僅包含六種數(shù)據(jù)類型。

2、這樣有很多好處:易于理解、易于解析、易于記憶。然而從另一方面說,因為只有null、布爾、數(shù)字、字符串、數(shù)字和對象這幾種數(shù)據(jù)類型,所以JSON的表達能力有一定的局限。

3、雖然JSON具備的這些類型已經(jīng)具有很強的表現(xiàn)力,但絕大數(shù)應(yīng)用(尤其是在于數(shù)據(jù)庫打交道時)都還需要其他一些重要的類型。例如,JSON沒有日期類型,這使得原本容易日期處理變得煩人。另外,JSON只有一種數(shù)字類型,無法區(qū)分浮點數(shù)和整數(shù),更別區(qū)分32位和64位了。再者JSON無法表示其他一些通用類型,如正則表達式或函數(shù)。

4、MongoDB在保留了JSON基本鍵/值對特性的基礎(chǔ)上,添加了其他一些數(shù)據(jù)類型。在不同的編程語言下,這些類型的確切表示有些許差異。下面說明了MongoDB支持的其他通用類型,以及如何正在文檔中使用它們.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容