MongoDB 是一款跨平臺(tái)、面向文檔的數(shù)據(jù)庫(kù)。用它創(chuàng)建的數(shù)據(jù)庫(kù)可以實(shí)現(xiàn)高性能、高可用性,并且能夠輕松擴(kuò)展。MongoDB 的運(yùn)行方式主要基于兩個(gè)概念:集合(collection)與文檔(document)。
數(shù)據(jù)庫(kù)是集合的實(shí)際容器。每一數(shù)據(jù)庫(kù)都在文件系統(tǒng)中有自己的一組文件。一個(gè) MongoDB 服務(wù)器通常有多個(gè)數(shù)據(jù)庫(kù)。
集合就是一組 MongoDB 文檔。它相當(dāng)于關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)中的表這種概念。集合位于單獨(dú)的一個(gè)數(shù)據(jù)庫(kù)中。集合不能執(zhí)行模式(schema)。一個(gè)集合內(nèi)的多個(gè)文檔可以有多個(gè)不同的字段。一般來(lái)說(shuō),集合中的文檔都有著相同或相關(guān)的目的。
文檔就是一組鍵-值對(duì)。文檔有著動(dòng)態(tài)的模式,這意味著同一集合內(nèi)的文檔不需要具有同樣的字段或結(jié)構(gòu)。
下表展示了關(guān)系型數(shù)據(jù)庫(kù)與 MongoDB 在術(shù)語(yǔ)上的對(duì)比:
關(guān)系型數(shù)據(jù)庫(kù) | MongoDB |
---|---|
數(shù)據(jù)庫(kù) | 數(shù)據(jù)庫(kù) |
表 | 集合 |
行 | 文檔 |
列 | 字段 |
表 Join | 內(nèi)嵌文檔 |
主鍵 | 主鍵(由 MongoDB 提供的默認(rèn) key_id) |
數(shù)據(jù)庫(kù)服務(wù)器 | 客戶端 |
---|---|
MySQL/Oracle | MongoDB |
mysql/sqlplus | mongo |
下面這個(gè)范例展示了一個(gè)簡(jiǎn)單的博客站點(diǎn)的文檔結(jié)構(gòu),它是由逗號(hào)分隔的鍵值對(duì)構(gòu)成的。
{
_id: ObjectId(7df78ad8902c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'tutorials point',
url: 'http://www.tutorialspoint.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2011,1,20,2,15),
like: 0
},
{
user:'user2',
message: 'My second comments',
dateCreated: new Date(2011,1,25,7,45),
like: 5
}
]
}
_id 是一個(gè) 12 字節(jié)長(zhǎng)的十六進(jìn)制數(shù),它保證了每一個(gè)文檔的唯一性。在插入文檔時(shí),需要提供 _id
。如果你不提供,那么 MongoDB 就會(huì)為每一文檔提供一個(gè)唯一的 id。_id
的頭 4 個(gè)字節(jié)代表的是當(dāng)前的時(shí)間戳,接著的后 3 個(gè)字節(jié)表示的是機(jī)器 id 號(hào),接著的 2 個(gè)字節(jié)表示 MongoDB 服務(wù)器進(jìn)程 id,最后的 3 個(gè)字節(jié)代表遞增值。