序
MongoDB 是當今業界使用最廣泛的文件資料庫之一,其從2009 年誕生以來,已經吸引瞭無數開發者的目光。曾經MongoDB 被冠以「四不像」的稱號,被大傢稱為「非關聯式資料庫中最像關聯式資料庫的軟體」。即使如此,MongoDB 在其發展歷程中仍錶現齣強大的生命力。尤其在近幾年,隨著雲端運算、巨量資料的高速發展,企業專案對分散式資料庫的需求越來越多,MongoDB 為靈活好用、高可用、高可擴充的分散式資料庫,在許多網際網路產品及企業專案中大展拳腳。
筆者從2016 年開始真正接觸MongoDB 資料庫,而在此之前曾有過很長一段時間的關聯式資料庫使用經驗。從自身的感受來說,採用傳統的關聯式資料庫可能是一種「萬金油」的方案,選擇MongoDB 則很大程度取決於團隊對NoSQL 的接受程度,或是來自敏捷開發、高效擴充方麵的權衡。
MongoDB 的名字來自英文單字"Humongous",中文含義是「龐大」「巨大」,命名者的意圖是可以處理大規模的資料。但筆者所在的團隊更喜歡稱呼它為「芒果」資料庫,除瞭譯音更加相近,還有這幾年使用MongoDB 的兩層感受。
■ 第一層感受是「爽」。相比關聯式資料庫,MongoDB 幾乎沒有太多的約束。一方麵,MongoDB 的文件模型是基於JSON 的,開發者更容易瞭解。另一方麵,動態化模式的特性讓資料庫的管理工作變得更加簡單,例如一些線上的變更可以更快速地完成。
■ 第二層感受是「酸爽」。這一點對 MongoDB 資料管理員來說可能更有感觸一些。MongoDB 由於入門體驗「過於友善」,導緻初學者很容易產生一種誤解,即MongoDB 不需要在管理方麵投入太多的精力,最終導緻係統上線後不斷被發現一些技術債務。更戲謔的說法是,「發錶一時爽,維護火葬場」。當然,這麼說可能並不恰當,但筆者想錶達的觀點是,與傳統的關聯式資料庫一樣,MongoDB 在使用上仍然需要認真地考量和看護,隻有如此纔可能最大限度地發揮齣MongoDB 的優勢。
本書寫作想法
本書除瞭介紹MongoDB 技術,還會介紹與微服務相關的技術範例。在當今的背景下,風靡業界的微服務架構已成為分散式係統的事實標準。因此,我們在談MongoDB 應用程式開發時,必然免不瞭和微服務技術堆疊產生一些關聯。以開發者的角度來看,在成為一名MongoDB 高手之前,掌握全端式的知識技能仍然是必需的,這些技能可概括為以下3個方麵。
■ MongoDB 資料庫技術的掌握:包括基本的文件模型概念和資料操作,以及叢集高可用、資料分片方麵的知識。
■ MongoDB 整閤微服務的技能:需要對微服務週邊的技術框架有一定的掌握。本書以當前最流行的 Java 微服務技術堆疊為背景,介紹瞭從MongoDB Java Driver、Spring Data Mongo(ODM 層)到上層應用整閤的各種實戰範例。
■ MongoDB 高階技巧的掌握:包括 MongoDB 係統性能最佳化及MongoDB 架構高可用、安全性、高效運行維護管理方麵的一些知識和經驗。
由此可見,初學者在從MongoDB 入門到進階的過程中,需要學習及掌握的知識並不算少。尤其是高階技巧方麵,這部分是最難也是最花費時間成本的。而筆者一貫認同的是,好記性不如爛筆頭,在學習MongoDB 的歷程中,筆者將MongoDB 在專案中的實戰經驗進行瞭複習,並多次以文章的形式發錶。在和一些讀者交流之後,筆者發現大傢實際上都遇到瞭不少應用層麵的開發問題。儘管MongoDB 的官方文件已經做得非常詳細(大多數基本的資料庫問題都可以從官方文件中找到答案),然而其在週邊技術堆疊的整閤、係統管理及最佳化方麵仍缺乏一些富有針對性的內容。因此筆者認為在結閤一些實踐案例的前提下,再以開發管理者的角度對MongoDB 技術進行係統地梳理,則可能會產生事半功倍的效果,遂齣現瞭編寫本書的想法。
本書內容概要
第1 部分:MongoDB 入門(第1 ~ 6 章)
該部分介紹MongoDB 的基本概念及入門知識。
透過該部分的學習,讀者可對MongoDB 自身的技術全貌形成一定的認識。
第2 部分:MongoDB 微服務開發(第7 ~ 10 章)
該部分介紹微服務的基本概念及微服務架構中應用MongoDB 的相關技術實現。
透過該部分的學習,讀者將能深入瞭解基於Java 微服務技術堆疊開發MongoDB 應用的實踐方法。
第3 部分:MongoDB 進階(第11 ~ 15 章)
該部分介紹MongoDB 更加進階的一些使用技巧。
透過該部分的學習,讀者可掌握MongoDB 在性能最佳化方麵的一些最佳實踐及指導方案。
第4 部分:MongoDB 架構管理(第16 ~ 18 章)
該部分介紹MongoDB 在架構管理方麵的一些經驗。
透過該部分的學習,讀者可獲得MongoDB 在架構可靠性、安全方麵的指導及如何在專案中進行資料庫問題防治的一些想法。
適閤讀者群
本書適閤希望瞭解、使用MongoDB 資料庫的技術從業者。
對有一定基礎的研發人員,透過閱讀本書可以更深入地瞭解MongoDB在性能最佳化、叢集技術方麵的一些原理。
對初學者,可以根據書中的一些案例快速開發基於 MongoDB 的微服務應用。
對係統架構師,可以透過本書瞭解 MongoDB 的一些進階特性及原理,並獲得在技術選型、架構管理方麵的指導資訊。
特別說明
本書的重點是討論MongoDB 開發進階方麵的內容, 但書中會介紹MongoDB 整閤Java 微服務所必備的一些關鍵技能( 如Java 驅動、Spring 框架整閤等)。微服務本身是一個非常大的課題,由於篇幅和筆者水準有限,這裡對容器化、分散式框架方麵的細節不會做過多介紹,而實際上這也超齣瞭本書的範圍。如果讀者感興趣,建議參閱其他書籍。
緻謝
決定寫一本書,不僅是分享知識,還是踐行長期主義的一次歷程。不得不說,這個過程的確是痛並快樂著。由於平日裡工作非常繁忙,筆者無數次不得不堅持在深夜裡趕稿子,由此也犧牲瞭很多陪伴傢人和孩子的寶貴時間。在此特別感謝我的傢人,如果沒有你們的大力支持,本書不會如此順利地完成。另外還要感謝筆者的專案團隊,讓筆者有機會在工作過程中學習到大量的MongoDB 的知識。
本書提供瞭大量的案例說明,旨在分享MongoDB 在應用程式開發、係統最佳化及管理中的一些實戰經驗。由於筆者個人能力有限,書中難免存在錯漏之處,懇請讀者提齣問題並幫忙指正,再次感謝!