非常感謝http://blog.csdn.net/drifterj/article/details/7814536
隨著應用需要處理資料量的指數級膨脹和分析這種海量資料需求的膨脹,關係型資料庫漸漸顯露出了疲態。系統進行橫向擴充時,關係型資料庫也往往成為效能提升的瓶頸。這時,NoSQL相關技術成為這輪更迭的發起者和成功者。這其中MongoDB風頭最勁了。MongoDB非常適合於大資料量,高並發,弱事務的互連網應用,並且其內建的水平擴充機制提供了從百萬到十億層級的資料量處理能力。這點可以保證採用MongoDB的應用,在後期擴充中資料庫端不會成為約束瓶頸。
以上算是作為自己開始自學MongoDB的開篇小記吧。自己完全出於興趣開始研究MongoDB,所選書籍為《MongoDB權威指南》,第一次以博文的形式去學習一門技術是因為想在學習過程中留下更多的痕迹,便於後期有機會實戰時進行反思。我會逐個章節進行學習,同步的逐個章節進行部落格記載,希望最後能有所收穫。開始吧。
工欲善其事,必先利其器,學習一門技術首先必須下載相關的程式包和源碼,我下載了2.0.6版本,並上傳到自己的資源中。這本書的第一章就是對MongoDB的簡介。
MongoDB是面向文檔的資料庫,不是現在使用最普遍的關係型資料庫,其放棄關聯式模式的原因就是為了獲得更加方便的擴充、穩定容錯等特性。面向文檔的基本思路就是:將關聯式模式中的“行”的概念換成成“文檔”模型。面向文檔的方式可以將文檔和數組內嵌進行,因此實際中用一條資料可以表示非常複雜的結構,而這非常符合物件導向語言看待資料的方式。
MongoDB沒有模式:文檔的鍵不會事先定義也不會固定不變。由於沒有模式需要更改,通常不需要遷移大量資料。不必將所有資料都放到一個模子裡面,應用程式層可以處理新增或丟失的鍵。這樣開發人員可以非常容易地變更資料模型。
實際應用中,隨著使用者群的增長和應用的增多,系統都不可避免地需要進行擴充,通常擴充包括縱向擴充和橫向擴充。縱向擴充是簡單的方式,對應用不會有任何影響,就是提升單台伺服器的效能,如2核變4核,8G記憶體升16G記憶體等,但這種擴充方式是有限的,達到硬體的物理極限就無法進行下去,對於中小應用是可以接受的。橫向擴充就是通過增加伺服器的數量來提升應用整體效能的方式,支援無限擴充。但這種擴充方式對整個應用和維護都會提出更高的要求,應用本身需要支援橫向擴充,伺服器叢集也需要支援負載平衡等,系統的穩定性同樣需要更強的控制,這事適合大型應用的擴充方式。
在橫向擴充中,關係型資料庫部分同樣是一個痛點,關係型資料庫本質上不支援橫行擴充,如果你一定要通過將表進行分類分開的方式進行,則在DAO層僅需要進行大量的額外代碼支援。MongoDB在初始設計時就考慮到了擴充的問題,面向文檔的資料模型可以自動在多台伺服器之間分割資料。它還可以平衡叢集的資料和負載,自動重排文檔。開發人員根本不用考慮資料庫層次的擴充問題,需要擴充資料庫時,在叢集中添加機器即可,MongoDB會自動處理後續的事情。
MongoDB有如上各種特性,但為了達到這些,他也放棄了關係型資料庫的某些功能如表串連join和複雜的多行事務。因為這兩個功能本質上確實很難在一個分布式系統上實現。
MongoDB盡量讓伺服器自治來簡化資料庫的管理。除了啟動資料庫伺服器之外,幾乎沒有什麼必要的管理操作。如果主伺服器掛掉了,MongoDB會自動切換到備份伺服器上,並且將備份伺服器提升為活躍伺服器。在分布式環境下,叢集中只要知道新增加了節點,就會自動整合並配置這個新節點。
MongoDB的管理理念是儘可能讓伺服器自動設定,讓使用者在需要的時候調整設定。
最後給大家一個MongoDB的網址,如果想看看該項目的其他資訊,可以參考:http://www.mongodb.org/display/DOCS/Home