MongoDB 是一款跨平臺、面向文檔的數(shù)據(jù)庫。用它創(chuàng)建的數(shù)據(jù)庫可以實現(xiàn)高性能、高可用性,并且能夠輕松擴(kuò)展。MongoDB 的運行方式主要基于兩個概念:集合(collection)與文檔(document)。
數(shù)據(jù)庫是集合的實際容器。每一數(shù)據(jù)庫都在文件系統(tǒng)中有自己的一組文件。一個 MongoDB 服務(wù)器通常有多個數(shù)據(jù)庫。
集合就是一組 MongoDB 文檔。它相當(dāng)于關(guān)系型數(shù)據(jù)庫(RDBMS)中的表這種概念。集合位于單獨的一個數(shù)據(jù)庫中。集合不能執(zhí)行模式(schema)。一個集合內(nèi)的多個文檔可以有多個不同的字段。一般來說,集合中的文檔都有著相同或相關(guān)的目的。
文檔就是一組鍵-值對。文檔有著動態(tài)的模式,這意味著同一集合內(nèi)的文檔不需要具有同樣的字段或結(jié)構(gòu)。
下表展示了關(guān)系型數(shù)據(jù)庫與 MongoDB 在術(shù)語上的對比:
| 關(guān)系型數(shù)據(jù)庫 | MongoDB |
|---|---|
| 數(shù)據(jù)庫 | 數(shù)據(jù)庫 |
| 表 | 集合 |
| 行 | 文檔 |
| 列 | 字段 |
| 表 Join | 內(nèi)嵌文檔 |
| 主鍵 | 主鍵(由 MongoDB 提供的默認(rèn) key_id) |
| 數(shù)據(jù)庫服務(wù)器 | 客戶端 |
|---|---|
| MySQL/Oracle | MongoDB |
| mysql/sqlplus | mongo |
下面這個范例展示了一個簡單的博客站點的文檔結(jié)構(gòu),它是由逗號分隔的鍵值對構(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 是一個 12 字節(jié)長的十六進(jìn)制數(shù),它保證了每一個文檔的唯一性。在插入文檔時,需要提供 _id。如果你不提供,那么 MongoDB 就會為每一文檔提供一個唯一的 id。_id 的頭 4 個字節(jié)代表的是當(dāng)前的時間戳,接著的后 3 個字節(jié)表示的是機(jī)器 id 號,接著的 2 個字節(jié)表示 MongoDB 服務(wù)器進(jìn)程 id,最后的 3 個字節(jié)代表遞增值。