mongodb之(1)mongodb數(shù)據(jù)庫簡介

1、mongodb簡介

MongoDB 是一個(gè)介于關(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 格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。MongoDB 最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。它是一個(gè)面向集合的,模式自由的文檔型數(shù)據(jù)庫。

1.1、面向集合(Collenction-Orented)

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

1.2、 模式自由(schema-free)

對(duì)于存儲(chǔ)在MongoDB 數(shù)據(jù)庫中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。無需如關(guān)系型數(shù)據(jù)庫一樣提前定義表結(jié)構(gòu),或如ElasticSearch一樣定義mapper映射。在Mongodb中,我們可以自由擴(kuò)展或刪除字段。

1.3、 文檔型

Mongodb以bson格式存儲(chǔ)數(shù)據(jù),其類似于JSON結(jié)構(gòu),但對(duì)JSON的數(shù)據(jù)類型進(jìn)行了擴(kuò)充。其存儲(chǔ)以bson文檔格式的數(shù)據(jù)。我們存儲(chǔ)的數(shù)據(jù)是鍵-值對(duì)的集合,鍵是字符串,值可以是數(shù)據(jù)類型集合里的任意類型,包括數(shù)組和文檔. 我們把這個(gè)數(shù)據(jù)格式稱作 “BSON” 即 “Binary Serialized Document Notation”。

2、Mongodb特點(diǎn)

  • 易于使用與擴(kuò)展:不采用關(guān)系模型,面向集合存儲(chǔ),采用文檔模型,便于開發(fā)者快速迭代;
  • 索引豐富,支持二級(jí)索引,允許多種快速索引,如唯一索引、復(fù)合索引、地理空間索引、全文檢索等;
  • 支持聚合管道,用戶能通過簡單的片段創(chuàng)建復(fù)雜的聚合,并通過數(shù)據(jù)庫自動(dòng)優(yōu)化。
  • 支持豐富的集合類型,如TTL類型集合,固定大小集合等;
  • 支持文件存儲(chǔ),基于一種易用的協(xié)議,存儲(chǔ)大文件和文件元數(shù)據(jù)。
  • 支持動(dòng)態(tài)查詢;
  • 支持復(fù)制和故障恢復(fù);
  • 使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻等);
  • 自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性;
  • 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及C++語言的驅(qū)動(dòng)程序,社區(qū) 中也提供了對(duì)Erlang 及.NET 等平臺(tái)的驅(qū)動(dòng)程序;
  • 文件存儲(chǔ)格式為BSON(一種JSON 的擴(kuò)展);
  • 可通過網(wǎng)絡(luò)訪問;

3、Mongodb功能簡介

  • 面向集合的存儲(chǔ):適合存儲(chǔ)對(duì)象及JSON 形式的數(shù)據(jù);
  • 動(dòng)態(tài)查詢:MongoDB 支持豐富的查詢表達(dá)式。查詢指令使用JSON 形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對(duì)象及數(shù)組;
  • 完整的索引支持:包括文檔內(nèi)嵌對(duì)象及數(shù)組。MongoDB 的查詢優(yōu)化器會(huì)分析查詢表達(dá)式,并生成一個(gè)高效的查詢計(jì)劃;
  • 查詢監(jiān)視:MongoDB 包含一系列監(jiān)視工具用于分析數(shù)據(jù)庫操作的性能;
  • 復(fù)制及自動(dòng)故障轉(zhuǎn)移:MongoDB 數(shù)據(jù)庫支持服務(wù)器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間的相互復(fù)制。復(fù)制的主要目標(biāo)是提供冗余及自動(dòng)故障轉(zhuǎn)移;
  • 高效的傳統(tǒng)存儲(chǔ)方式:支持二進(jìn)制數(shù)據(jù)及大型對(duì)象(如照片或圖片);
  • 自動(dòng)分片以支持云級(jí)別的伸縮性:自動(dòng)分片功能支持水平的數(shù)據(jù)庫集群,可動(dòng)態(tài)添加額外的機(jī)器;

4、適用場(chǎng)景

  • 網(wǎng)站數(shù)據(jù):MongoDB 非常適合實(shí)時(shí)的插入,更新與查詢,并具備網(wǎng)站實(shí)時(shí)數(shù)據(jù)存儲(chǔ)所需的復(fù)制及高度伸縮性;
  • 緩存:由于性能很高,MongoDB 也適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由MongoDB 搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過載;
  • 大尺寸,低價(jià)值的數(shù)據(jù):使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫存儲(chǔ)一些數(shù)據(jù)時(shí)可能會(huì)比較昂貴,在此之前,很多時(shí)候程序員往往會(huì)選擇傳統(tǒng)的文件進(jìn)行存儲(chǔ);
  • 高伸縮性的場(chǎng)景:MongoDB 非常適合由數(shù)十或數(shù)百臺(tái)服務(wù)器組成的數(shù)據(jù)庫。MongoDB的路線圖中已經(jīng)包含對(duì)MapReduce 引擎的內(nèi)置支持;
  • 用于對(duì)象及JSON 數(shù)據(jù)的存儲(chǔ):MongoDB 的BSON 數(shù)據(jù)格式非常適合文檔化格式的存儲(chǔ)及查詢;

5、數(shù)據(jù)邏輯結(jié)構(gòu)

MongoDB 的邏輯結(jié)構(gòu)是一種層次結(jié)構(gòu)。主要由:文檔(document)、集合(collection)、數(shù)據(jù)庫(database)這三部分組成的。邏輯結(jié)構(gòu)是面向用戶的,用戶使用MongoDB 開發(fā)應(yīng)用程序使用的就是邏輯結(jié)構(gòu)。

  • MongoDB 的文檔(document),相當(dāng)于關(guān)系數(shù)據(jù)庫中的一行記錄。
  • 多個(gè)文檔組成一個(gè)集合(collection),相當(dāng)于關(guān)系數(shù)據(jù)庫的表。
  • 多個(gè)集合(collection),邏輯上組織在一起,就是數(shù)據(jù)庫(database)。
  • 一個(gè)MongoDB 實(shí)例支持多個(gè)數(shù)據(jù)庫(database)。

文檔(document)、集合(collection)、數(shù)據(jù)庫(database)的層次結(jié)構(gòu)如下圖:

1574489227(1).png

mongodb與關(guān)系型數(shù)據(jù)庫的邏輯結(jié)構(gòu)對(duì)比:

MongoDB術(shù)語/概念 SQL術(shù)語/概念 解釋說明
database database 數(shù)據(jù)庫
collection table 數(shù)據(jù)庫表/集合
document row 數(shù)據(jù)記錄行/文檔
field column 數(shù)據(jù)字段/域
index index 索引
table joins 表連接,MongoDB不支持
primary key primary key 主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵

6、數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)

MongoDB 的默認(rèn)數(shù)據(jù)目錄是/data/db,它負(fù)責(zé)存儲(chǔ)所有的MongoDB 的數(shù)據(jù)文件。在MongoDB內(nèi)部,每個(gè)數(shù)據(jù)庫都包含一個(gè).ns 文件和一些數(shù)據(jù)文件,而且這些數(shù)據(jù)文件會(huì)隨著數(shù)據(jù)量的增加而變得越來越多。所以如果系統(tǒng)中有一個(gè)叫做foo 的數(shù)據(jù)庫,那么構(gòu)成foo 這個(gè)數(shù)據(jù)庫的文件就會(huì)由foo.ns,foo.0,foo.1,foo.2 等等組成。

MongoDB 內(nèi)部有預(yù)分配空間的機(jī)制,每個(gè)預(yù)分配的文件都用0 進(jìn)行填充,由于有了這個(gè)機(jī)制, MongoDB 始終保持額外的空間和空余的數(shù)據(jù)文件,從而有效避免了由于數(shù)據(jù)暴增而帶來的磁盤壓力過大的問題。

由于表中數(shù)據(jù)量的增加,數(shù)據(jù)文件每新分配一次,它的大小都會(huì)是上一個(gè)數(shù)據(jù)文件大小的2倍,每個(gè)數(shù)據(jù)文件最大2G。這樣的機(jī)制有利于防止較小的數(shù)據(jù)庫浪費(fèi)過多的磁盤空間,同時(shí)又能保證較大的數(shù)據(jù)庫有相應(yīng)的預(yù)留空間使用。

數(shù)據(jù)庫的每張表都對(duì)應(yīng)一個(gè)命名空間,每個(gè)索引也有對(duì)應(yīng)的命名空間。這些命名空間的元數(shù)據(jù)都集中在*.ns 文件中。

7、mongodb的數(shù)據(jù)類型

MongoDB文檔存儲(chǔ)是使用BSON類型,BSON(BSON short for Bin-ary JSON, is a bin-ary-en-coded seri-al-iz-a-tion of JSON-like doc-u-ments)是二進(jìn)制序列化的形式。類如JSON,同樣支持內(nèi)嵌各種類型。

MongoDB 常用數(shù)據(jù)類型:

數(shù)據(jù)類型 說明 示例
String 字符串。存儲(chǔ)數(shù)據(jù)常用的數(shù)據(jù)類型。在 MongoDB 中,UTF-8 編碼的字符串才是合法的。 {"a" : "string"}
Number 數(shù)值類型。不區(qū)分整數(shù)和浮點(diǎn)數(shù)。 {"a" : 1.34}或{"a" : 123}
Integer 整型數(shù)值。用于存儲(chǔ)數(shù)值。根據(jù)你所采用的服務(wù)器,可分為 32 位或 64 位。 整數(shù):{"a" : 123}或 {"a" : NumberInt("3")} 或{"a" : NumberLong("3")}
Boolean 布爾值。用于存儲(chǔ)布爾值(真/假)。 {"a" : true}
Double 雙精度浮點(diǎn)值。用于存儲(chǔ)浮點(diǎn)值。 {"a" : 1.34}
Min/Max keys 將一個(gè)值與 BSON(二進(jìn)制的 JSON)元素的最低值和最高值相對(duì)比。
Array 用于將數(shù)組或列表或多個(gè)值存儲(chǔ)為一個(gè)鍵。 {"a" : ["b", "c" , "d", "e"]}
Timestamp 時(shí)間戳。記錄文檔修改或添加的具體時(shí)間。
Object 用于內(nèi)嵌文檔。 {"a" : {"b" : "c" , "d" : "e"}}
Null 用于創(chuàng)建空值。 {"a" : null}
Symbol 符號(hào)。該數(shù)據(jù)類型基本上等同于字符串類型,但不同的是,它一般用于采用特殊符號(hào)類型的語言。
Date 日期時(shí)間。用 UNIX 時(shí)間格式來存儲(chǔ)當(dāng)前日期或時(shí)間。你可以指定自己的日期時(shí)間:創(chuàng)建 Date 對(duì)象,傳入年月日信息。 {"a" : new Date()}
Object ID 對(duì)象 ID。用于創(chuàng)建文檔的 ID。  (每個(gè)文檔都有) {"a" : ObjectId()}
Binary Data 二進(jìn)制數(shù)據(jù)。用于存儲(chǔ)二進(jìn)制數(shù)據(jù)。 {"a" : function() { /* ... */ }}
Code 代碼類型。用于在文檔中存儲(chǔ) JavaScript 代碼。
Regular expression 正則表達(dá)式 {“a”:/^egon.*?nb$/i}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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