MongoDB是一個(gè)跨平臺(tái)的,面向文檔的數(shù)據(jù)庫,可提供高性能,高可用性和易擴(kuò)展性。MongoDB致力于收集和文檔的概念。
MongoDB是一個(gè)數(shù)據(jù)庫程序,MongoDB用C ++語言編寫。
免費(fèi) – 您無需為在應(yīng)用程序中使用它而付出任何代價(jià)。
開源 – 開源是開放的,開源社區(qū)為MongoDB數(shù)據(jù)庫程序的開發(fā)做出了貢獻(xiàn)。
跨平臺(tái) – MongoDB構(gòu)建在一個(gè)平臺(tái)(例如Linux)上,并且可以在其他平臺(tái)(Windows,MacOS等)上運(yùn)行,而無需對(duì)代碼進(jìn)行任何修改。
面向文檔 – MongoDB以JSON形式存儲(chǔ)記錄(如文檔)。這樣做有很多優(yōu)點(diǎn)。一個(gè)顯著的優(yōu)點(diǎn)是,向數(shù)據(jù)庫添加新功能(關(guān)系數(shù)據(jù)庫中的列)不需要麻煩。
NoSQL(不僅是SQL) – MongoDB使用基于文檔的數(shù)據(jù)庫,其中每個(gè)文檔都是具有復(fù)雜值的鍵。該文檔值可以包含多個(gè)鍵值對(duì)。
數(shù)據(jù)庫是用于收集的物理容器。每個(gè)數(shù)據(jù)庫在文件系統(tǒng)上都有其自己的文件集。一臺(tái)MongoDB服務(wù)器通常具有多個(gè)數(shù)據(jù)庫。
集合是一組MongoDB文檔。它等效于RDBMS表。集合存在于單個(gè)數(shù)據(jù)庫中。集合不強(qiáng)制執(zhí)行架構(gòu)。集合中的文檔可以具有不同的字段。通常,集合中的所有文檔都具有相似或相關(guān)的目的。
文檔是一組鍵值對(duì)。文檔具有動(dòng)態(tài)架構(gòu)。動(dòng)態(tài)模式意味著同一集合中的文檔不需要具有相同的字段或結(jié)構(gòu)集,并且集合文檔中的公共字段可以保存不同類型的數(shù)據(jù)。
下表顯示了RDBMS術(shù)語與MongoDB的關(guān)系。
關(guān)系數(shù)據(jù)庫管理系統(tǒng) | MongoDB |
---|---|
數(shù)據(jù)庫 | 數(shù)據(jù)庫 |
表 | 集合 |
元組/行 | 文檔 |
列 | 字段 |
表聯(lián)結(jié) | 嵌入式文檔 |
主鍵約束 | 主鍵(MongoDB本身提供的默認(rèn)鍵_id) |
數(shù)據(jù)庫服務(wù)器和客戶端 | |
mysqld / Oracle | mongod |
mysql / sqlplus | mongo |
以下示例顯示了博客站點(diǎn)的文檔結(jié)構(gòu),它只是一個(gè)逗號(hào)分隔的鍵值對(duì)。
{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: '基礎(chǔ)教程', url: '', 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é)的十六進(jìn)制數(shù)字,它保證了每個(gè)文檔的唯一性。您可以在插入文檔時(shí)提供id。如果不提供,那么MongoDB會(huì)為每個(gè)文檔提供一個(gè)惟一的id。這12個(gè)字節(jié)的前4個(gè)字節(jié)用于當(dāng)前時(shí)間戳,接下來的3個(gè)字節(jié)用于機(jī)器id,接下來的2個(gè)字節(jié)用于MongoDB服務(wù)器的進(jìn)程id,剩下的3個(gè)字節(jié)是簡單的增量值。