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