欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MongoDB的基本特性與內(nèi)部構(gòu)造的講解

 更新時間:2019年03月19日 15:17:42   作者:CODETC  
今天小編就為大家分享一篇關(guān)于MongoDB的基本特性與內(nèi)部構(gòu)造的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bjson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。

對于大多數(shù)的MongoDB的用戶來說,MongoDB就像是一個大黑盒。但是如果你能夠了解到MongoDB一些內(nèi)部構(gòu)造的話,將有利于你更好地理解和使用MongoDB。

BSON

在MongoDB中,文檔是對數(shù)據(jù)的抽象,它被使用在Client端和Server端的交互中。所有的Client端(各種語言的Driver)都會使用這種抽象,它的表現(xiàn)形式就是我們常說的BSON(Binary JSON)。

BSON 是一個輕量級的二進制數(shù)據(jù)格式。MongoDB能夠使用BSON,并將BSON作為數(shù)據(jù)的存儲存放在磁盤中。

當(dāng)Client端要將寫入文檔,使用查詢等操作時,需要將文檔編碼為BSON格式,然后再發(fā)送給Server端。同樣,Server端的返回結(jié)果也是編碼為BSON格式再返回給Client端的。

使用BSON格式出于以下3種目的:

效率。BSON是為效率而設(shè)計的,它只需要使用很少的空間。即使在最壞的情況下,BSON格式也比JSON格式在最好的情況下存儲效率高。
傳輸性。在某些情況下,BSON會犧牲額外的空間讓數(shù)據(jù)的傳輸更加方便。比如,字符串的傳輸?shù)那熬Y會標(biāo)識字符串的長度,而不是在字符串的末尾打上結(jié)束的標(biāo)記。這樣的傳輸形式有利于MongoDB修改傳輸?shù)臄?shù)據(jù)。
性能。最后,BSON格式的編碼和解碼都是非常快速的。它使用了C風(fēng)格的數(shù)據(jù)表現(xiàn)形式,這樣在各種語言中都可以高效地使用。

寫入?yún)f(xié)議

Client端訪問Server端使用了輕量級的TCP/IP寫入?yún)f(xié)議。這種協(xié)議在MongoDB Wiki中有詳細(xì)介紹,它其實是在BSON數(shù)據(jù)上面做了一層簡單的包裝。比如說,寫入數(shù)據(jù)的命令中包含了1個20字節(jié)的消息頭(由消息的長度和寫入命令標(biāo)識組成),需要寫入的Collection名稱和需要寫入的數(shù)據(jù)。

數(shù)據(jù)文件

在MongoDB的數(shù)據(jù)文件夾中(默認(rèn)路徑是/data/db)由構(gòu)成數(shù)據(jù)庫的所有文件。每一個數(shù)據(jù)庫都包含一個.ns文件和一些數(shù)據(jù)文件,其中數(shù)據(jù)文件會隨著數(shù)據(jù)量的增加而變多。所以如果有一個數(shù)據(jù)庫名字叫做foo,那么構(gòu)成foo這個數(shù)據(jù)庫的文件就會由foo.ns,foo.0,foo.1,foo.2等等組成。

數(shù)據(jù)文件每新增一次,大小都會是上一個數(shù)據(jù)文件的2倍,每個數(shù)據(jù)文件最大2G。這樣的設(shè)計有利于防止數(shù)據(jù)量較小的數(shù)據(jù)庫浪費過多的空間,同時又能保證數(shù)據(jù)量較大的數(shù)據(jù)庫有相應(yīng)的空間使用。

MongoDB會使用預(yù)分配方式來保證寫入性能的穩(wěn)定(這種方式可以使用–noprealloc關(guān)閉)。預(yù)分配在后臺進行,并且每個預(yù)分配的文件都用0進行填充。這會讓MongoDB始終保持額外的空間和空余的數(shù)據(jù)文件,從而避免了數(shù)據(jù)增長過快而帶來的分配磁盤空間引起的阻塞。

名字空間和盤區(qū)

每一個數(shù)據(jù)庫都由多個名字空間組成,每一個名字空間存儲了相應(yīng)類型的數(shù)據(jù)。數(shù)據(jù)庫中的每一個Collection都有各自對應(yīng)的名字空間,索引文件同樣也有名字空間。所有名字空間的元數(shù)據(jù)都存儲在.ns文件中。

名字空間中的數(shù)據(jù)在磁盤中分為多個區(qū)間,這個叫做盤區(qū)。在下圖中,foo這個數(shù)據(jù)庫包含3個數(shù)據(jù)文件,第三個數(shù)據(jù)文件屬于空的預(yù)分配文件。頭兩個數(shù)據(jù)文件被分為了相應(yīng)的盤區(qū)對應(yīng)不同的名字空間。

上圖顯示了名字空間和盤區(qū)的相關(guān)特點。每一個名字空間可以包含多個不同的盤區(qū),這些盤區(qū)并不是連續(xù)的。與數(shù)據(jù)文件的增長相同,每一個名字空間對應(yīng)的盤區(qū)大小的也是隨著分配的次數(shù)不斷增長的。這樣做的目的是為了平衡名字空間浪費的空間與保持某一個名字空間中數(shù)據(jù)的連續(xù)性。上圖中還有一個需要注意的名字空間:$freelist,這個名字空間用于記錄不再使用的盤區(qū)(被刪除的Collection或索引)。每當(dāng)名字空間需要分配新的盤區(qū)的時候,都會先查看$freelist是否有大小合適的盤區(qū)可以使用。

內(nèi)存映射存儲引擎

MongoDB目前支持的存儲引擎為內(nèi)存映射引擎。當(dāng)MongoDB啟動的時候,會將所有的數(shù)據(jù)文件映射到內(nèi)存中,然后操作系統(tǒng)會托管所有的磁盤操作。這種存儲引擎有以下幾種特點:

  • MongoDB中關(guān)于內(nèi)存管理的代碼非常精簡,畢竟相關(guān)的工作已經(jīng)有操作系統(tǒng)進行托管。
  • MongoDB服務(wù)器使用的虛擬內(nèi)存將非常巨大,并將超過整個數(shù)據(jù)文件的大小。不用擔(dān)心,操作系統(tǒng)會去處理這一切。要注意的是,MongoDB自己是不管理內(nèi)存的,無法指定內(nèi)存大小,完全交給操作系統(tǒng)來管理,因此有時候是不可控的,在生產(chǎn)環(huán)境使用必須在OS層面監(jiān)控內(nèi)存使用情況。
  • MongoDB無法控制數(shù)據(jù)寫入磁盤的順序,這樣將導(dǎo)致MongoDB無法實現(xiàn)writeahead日志的特性。所以,如果MongoDB希望提供一種durability的特性,需要實現(xiàn)另外一種存儲引擎。
  • 32位系統(tǒng)的MongoDB服務(wù)器每一個Mongod實例只能使用2G的數(shù)據(jù)文件。這是由于地址指針只能支持32位。

特性

它的特點是高性能、易部署、易使用,存儲數(shù)據(jù)非常方便。主要功能特性有:

  • 面向集合存儲,易存儲對象類型的數(shù)據(jù)。
  • 模式自由。
  • 支持動態(tài)查詢。
  • 支持完全索引,包含內(nèi)部對象。
  • 支持查詢。
  • 支持復(fù)制和故障恢復(fù)。
  • 使用高效的二進制數(shù)據(jù)存儲,包括大型對象(如視頻等)。
  • 自動處理碎片,以支持云計算層次的擴展性
  • 支持RUBY,PYTHON,JAVA,C++,PHP等多種語言。
  • 文件存儲格式為BSON(一種JSON的擴展)
  • 可通過網(wǎng)絡(luò)訪問

所謂“面向集合”(Collenction-Orented),意思是數(shù)據(jù)被分組存儲在數(shù)據(jù)集中,被稱為一個集合(Collenction)。每個 集合在數(shù)據(jù)庫中都有一個唯一的標(biāo)識名,并且可以包含無限數(shù)目的文檔。集合的概念類似關(guān)系型數(shù)據(jù)庫(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。

模式自由(schema-free),意味著對于存儲在mongodb數(shù)據(jù)庫中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。如果需要的話,你完全可以把不同結(jié)構(gòu)的文件存儲在同一個數(shù)據(jù)庫里。

存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標(biāo)識一個文檔,為字符串類型,而值則可以是各中復(fù)雜的文件類型。我們稱這種存儲形式為BSON(Binary Serialized dOcument Format)。

其它

在《MongoDB The Definitive Guide》中介紹的MongoDB內(nèi)部構(gòu)造只有這么多,如果真要把它說清楚,可能需要另外一本書來專門講述了。比如內(nèi)部的JS解析,查詢的優(yōu)化,索引的建立等等。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • MongoDB備份和還原的操作指南

    MongoDB備份和還原的操作指南

    MongoDB備份和還原是指將MongoDB數(shù)據(jù)庫中的數(shù)據(jù)和集合備份到另一個存儲位置,并在需要的時候恢復(fù)這些備份的過程,備份和還原MongoDB數(shù)據(jù)庫非常重要,本文給大家介紹了MongoDB備份和還原的操作指南,需要的朋友可以參考下
    2024-05-05
  • MongoDB 副本集的搭建過程

    MongoDB 副本集的搭建過程

    這篇文章主要介紹了MongoDB 副本集的搭建過程,幫助大家更好的理解和學(xué)習(xí)使用MongoDB數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-03-03
  • MongoDB數(shù)據(jù)庫設(shè)置賬號密碼完整步驟

    MongoDB數(shù)據(jù)庫設(shè)置賬號密碼完整步驟

    MongoDB這工具很好用的,頁面美觀,設(shè)置賬號密碼也必不可少,下面這篇文章主要給大家介紹了關(guān)于MongoDB數(shù)據(jù)庫設(shè)置賬號密碼的完整步驟,文中給出了詳細(xì)的實例代碼,需要的朋友可以參考下
    2023-05-05
  • SpringBoot?整合mongoDB并自定義連接池的示例代碼

    SpringBoot?整合mongoDB并自定義連接池的示例代碼

    這篇文章主要介紹了SpringBoot?整合mongoDB并自定義連接池?,整合mongoDB的目的就是想用它給我們提供的mongoTemplate,它可以很容易的操作mongoDB數(shù)據(jù)庫,對整合過程及實例代碼感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Windows平臺安裝MongoDB數(shù)據(jù)庫

    Windows平臺安裝MongoDB數(shù)據(jù)庫

    這篇文章介紹了Windows平臺安裝MongoDB數(shù)據(jù)庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • MongoDB數(shù)據(jù)備份遷移的全過程

    MongoDB數(shù)據(jù)備份遷移的全過程

    這篇文章主要記錄了MongoDB數(shù)據(jù)備份遷移的全過程,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對大家了解學(xué)習(xí)MongoDB數(shù)據(jù)備份遷移有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • mongodb數(shù)據(jù)庫的6個安全設(shè)置命令

    mongodb數(shù)據(jù)庫的6個安全設(shè)置命令

    這篇文章主要介紹了mongodb數(shù)據(jù)庫的6個安全設(shè)置命令,如安全模式啟動、安全認(rèn)證、數(shù)據(jù)讀寫加鎖、解鎖等,需要的朋友可以參考下
    2014-05-05
  • 淺談MySQL和MariaDB區(qū)別(mariadb和mysql的性能比較)

    淺談MySQL和MariaDB區(qū)別(mariadb和mysql的性能比較)

    MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品
    2018-02-02
  • 阿里云服務(wù)器安裝mongodb的方法

    阿里云服務(wù)器安裝mongodb的方法

    這篇文章主要介紹了阿里云服務(wù)器安裝mongodb的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • Windows安裝壓縮版MongoDB的教程

    Windows安裝壓縮版MongoDB的教程

    MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。這篇文章主要介紹了Windows安裝壓縮版MongoDB的教程,需要的朋友可以參考下
    2019-12-12

最新評論