一、基本概念
MongoDB 是一個高性能,開源,無模式的文檔型資料庫,是目前NoSQL 資料庫産品中最熱門的一種。它在許多場景下可用于替代傳統的關系型資料庫或鍵/值存儲方式,MongoDB 使用C++開發。MongoDB 的官方網站位址是:http://www.mongodb.org/,大家可以在此獲得更詳細的資訊。
MongoDB 是一個介于關系資料庫和非關系資料庫之間的産品,是非關系資料庫當中功能最豐富,最像關系資料庫的。他支援的資料結構非常松散,是類似json 的bjson 格式,是以可以存儲比較複雜的資料類型。MongoDB 最大的特點是他支援的查詢語言非常強大,其文法有點類似于面向對象的查詢語言,幾乎可以實作類似關系資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。它是一個面向集合的,模式自由的文檔型資料庫。
二、對比
MongoDB | 關系型資料庫 | |
資料存儲 | 面向集合 | 面向關系表 |
資料結構 | 模式自由 | 二維表關系模式 |
事務 | 不支援 | 支援 |
大型資料(視訊) | 很好 | 一般 |
大資料量查詢(千萬條以上) | 很好 | 較差 |
資料庫維護 | 相對簡單 | 相對複雜 |
資料及表關系、結構浏覽 | 困難 | 簡單 |
資料安全性 | 較差 | 很好 |
分布式 | 很好 | 一般 |
查詢 | 非常靈活 | 非常強大 |
主外鍵關聯 | 不支援 | 支援 |
索引 | 支援 | 支援 |
存儲過程 | 支援 | 支援 |
三、對比說明
1. 資料存儲
MongoDB是面向集合(collection)的,集合中又包含多個文檔(document),并支援對象型資料的存儲。其中集合和文檔的概念,在關系型資料庫中類似于表(table)和元組(row:也就是所謂的一行資料)。另外MongoDB是以bson形式存儲,而關系型資料庫是以二維關系形式存儲。
2. 資料結構
MongoDB對資料結構的支援非常靈活,從橫向到縱向的支援都很好,比如下面的資料都能存儲在同一個集合中:
① {“name”: “wangwu”, “age”: 25}
② {“name”: “lisi”}
③ {“state”: “激活”, “remark”: “無”}
④ {“name”: 6, “age”: “你猜”}
從上面的例子我們能看出,橫向方面,支援字段的動态增減(如①和②),從縱向方面,支援字段資料類型混合存儲(如①和④)。而在關系型資料庫中這種方式的存儲是絕對達不到的。
3. 事務
MongoDB本身不支援事務處理,隻能通過程式代碼來保證。
4. 大型資料
MongoDB不僅支援結構化資料,還支援非結構化資料存儲(音頻、視訊、文檔、XML、HTML等),而關系型資料庫雖然支援大型資料(如視訊)的存儲,但是不管從存儲效率上還是從擷取速度上都不及MongoDB,MongoDB可采用高效的二進制來存儲大型資料。
5. 大型資料量查詢
MongoDB對于上千萬條以上的資料,在查詢速度上非常快。而這點卻是關系型資料庫中的一大痛處。
6. 資料庫維護
MongoDB在資料庫備份和還原以及資料的導入導出的操作上是非常簡單的,通過簡單的指令即可完成,還支援主-從模式及伺服器之間的互相複制。複制的主要目标是提供備援及自動故障轉移,而關系型資料庫在操作上相對複雜一些,上手難一些。
7. 資料及表關系、結構浏覽
MongoDB因為沒什麼特别好的GUI用戶端,是以在資料浏覽和表關系、結構浏覽上是非常困難和笨拙的,關系型資料庫在這方面上優勢明顯。
8. 資料安全性
MongoDB在資料安全方面比較差,如果稍有不慎或操作不當,很容易造成資料丢失或資料錯誤,是以在資料維護和操作上,要非常小心。而關系型資料庫在這方面上的擔心卻要少很多。
9. 分布式
MongoDB非常适合由數十或數百台伺服器組成的資料庫。支援自動分片以支援雲級别的伸縮性。其中自動分片功能支援水準的資料庫叢集,可動态添加額外的機器。關系型資料庫在分布式的支援和操作上都要困難些、發雜些。
10. 查詢
MongoDB的查詢語句與關系型的sql語句有着很大的不同,或者說是兩種風格,二者表現都很不錯,MongoDB主要展現在靈活易用上,而sql則展現在功能全面強大上。
11. 主外鍵關聯
MongoDB不支援主外鍵關聯,也沒有“限制”的概念。
12. 索引
MongoDB同樣支援索引
13. 存儲過程
MongoDB同樣也支援存儲過程
四、總結
通過以上對比,我們可以看出MongoDB是以犧牲安全、事務、結構來換取簡單、高效、靈活的,是以關系型也好非關系型也好都有他們适用的場合,非關系型資料庫的出現,為我們多提供了一條選擇的道路,進而在資料維護和存儲上給予了我們很大的幫助,讓我們在軟體開發上能更加得心應手,是以傳統保守關系型資料庫觀念的人們,可以試試體驗下非關系型資料庫,也許你一下就會迷上他,在關系型資料庫大行其道今天,掌握好一門非關系型資料庫對你未來的發展也是非常有利的。
那麼關于MongoDB的入門簡介就先到這裡,筆者今後會對MongoDB具體的内容進行較為系統的總結和介紹,希望能幫助需要用到的朋友。