云享專家韋世東:開發者如何學好 MongoDB
作為一名研發,數據庫是或多或少都會接觸到的技術。 MongoDB 是當前火熱的 NoSQL 之一,我們怎樣才能學好 MongoDB 呢?本篇文章,我們將從以下幾方面討論這個話題:
MongoDB 是什么
我如何確定我需要學習 MongoDB
開發者應該掌握 MongoDB 的哪些知識
學習的選擇和困境
我們先來了解一下,MongoDB 為何物。
NoSQL 泛指非關系型數據庫,該詞是關系型數據庫(即 SQL)的相對稱呼。MongoDB 是非關系型數據庫(NoSQL)中較為人熟知的一種。
它擁有很多優秀特性,例如高性能、高可用、支持豐富的查詢語句、無需預定義數據模型和水平可伸縮等,適合存儲結構化、半結構化的文檔和特定格式的文檔,這些特性使它受到眾多開發者的青睞。
我們通過幾個例子來看看 MySQL 與 MongoDB 的差異。
與 MySQL 數據庫不同的是,MongoDB 不需要預先定義表和字段,這正是它靈活性的體現。MongoDB 可以擁有多個數據庫,每個數據庫可以擁有多個集合,每個集合可以存儲多份文檔,這種關系與 SQL 數據庫中的“數據庫、表、數據”相當。下圖描述了 MongoDB 中數據庫、集合和文檔的關系:
數據庫 fotoo 中有兩個集合,它們分別是 player 和 books。每個集合中都包含了許多文檔,例如集合 books 中關于書籍《紅樓夢》的文檔,集合 player 中關于球員 James 的文檔。
在查詢方面,一個簡單的 MySQL 查詢語句為 SELECT * FROM tablename,對應的 MongoDB 查詢語句為 db.tablename.find()。在面對多步驟的查詢條件時,MongoDB 更游刃有余。例如:
“統計數據庫 artic 中 score 大于 70 且小于 90 的文檔數量”
這樣的需求,用 MongoDB 的聚合操作就可以輕松完成,對應示例如下:
>?db.artic.aggregate([?...?{$match:?{score:?{$gt:?70,?$lt:?90}}},?...?{$group:?{_id:?null,?number:?{$sum:?1}}}?...?])?復制代碼
這個例子或許簡單了些,在 MySQL 中我們可以用 count 和 where 完成,但如果復雜度再提高四五個等級呢?例如在此基礎上增加對某個字段的運算、替換、排序、分組計數、增刪字段,用 MySQL 來實現就會很頭疼,而 MongoDB 的聚合可以讓我們輕松地完成這類復雜需求。
我如何確定我需要學習 MongoDB
MongoDB 是近些年涌現的幾十種 NoSQL 中第一梯隊的成員,另外一個為人熟知的是 Redis。
你可能會有”我如何確定我需要學習 MongoDB 呢?“ 這樣的疑問,面對這個問題,我們可以通過 MongoDB 的特點和應用場景著手:
MongoDB 適合存儲結構確定或不確定的文檔。例如爬蟲爬取的信息常缺失字段的情況或字段參差不齊的情況;
對數據庫可用性要求較高的情況。MySQL 這類數據庫要做到負載均衡、自動容災和數據同步需要借助外部工具,而 MongoDB 的復制集可以讓我們輕松完成這一系列的工作。相對接借助第三方工具來說,復制集的穩定性更高。
分庫分表是 WEB 開發中常用到的數據庫優化手段,MySQL 的分庫分表要考慮的問題非常多,例如字段冗余、數據組裝跨節點分頁、排序和數據遷移等,而 MongoDB 的分片可以讓我們輕松完成“分庫分表”的工作。MongoDB 的分片機制使我們不必將心思放在由“分庫分表”帶來的問題,而是專注于具體需求。
同樣的,MySQL 的權限控制、定義數據模型、數據庫備份和恢復等功能在 MongoDB 上也有。
MongoDB 中支持地理位置的存儲和查詢,這意味著 MongoDB 可以用于共享單車、共享雨傘、汽車定位等業務中。
我們常用的關系型數據庫無法滿足 WEB2.0 時代的需求,在實際應用中暴露了很多難以克服的問題。NoSQL 的產生就是為了解決例如海量數據的存儲、彈性可伸縮和靈活性等方面的挑戰,所以作為一名合格的開發者,應該抽空學習 SQL 以外的數據庫知識。
開發者應該掌握 MongoDB 的哪些知識
學習前,我們需要明白自身定位:專業 DBA 或者日常開發使用。
MongoDB 有完善的體系和對應的認證考試,對于希望成為專業 DBA 的朋友我建議到 MongoDB 官方網站了解。
而對于僅需要滿足日常開發需求的朋友,我建議學習的內容如下:
MongoDB 在各個平臺的安裝方法
MongoDB 數據庫和集合的基本操作
MongoDB 文檔 CRUD 操作,包括能夠豐富 CRUD 的投影和修飾符等
MongoDB 流式聚合操作,這能夠在數據庫層面輕松完成復雜數據的處理,而不是用編程語言來處理
MongoDB 的數據模型,雖然 MongoDB 可以存儲不規則的文檔,但有些情況下定義數據模型可以提高查詢效率
下圖描述了一種聚合操作的完整過程:
當然,除了這些基本操作之外我們還可以學習更多的知識提高個人競爭力,這些知識是:
MongoDB 執行計劃和索引,執行計劃可以讓我們清楚的了解到查詢語句的效率,而索引則是優化查詢效率的常用手段
MongoDB 的復制集,這是提高 MongoDB 可用性,保證數據服務不停機的最佳手段
MongoDB 的分片,分片能夠在數據量變得龐大之后保證效率
MongoDB 的事物,如果你將 MongoDB 用于 WEB 網站,那么事物是你必須學習的知識
MongoDB 數據庫備份和還原,有了復制集后,備份就顯得不是那么重要了,但并不是沒有這個需求。而且 MongoDB 的備份可以精細到文檔,這就非常有意義了。
學習的選擇和困境
有一定工作經驗的開發者,大多數情況下都會選擇自學。有些在網上搜索對應的文章,有些則直接翻閱官方文檔。
我推薦的方式是翻閱官方文檔,在遇到難以理解的觀點時通過搜索引擎查找網友分享的文章。
自學的優點很多,缺點也很明顯。例如:
斷斷續續的學習,難以保持專注導致知識吸收不好
耗費時間很長,雖然知道應該學習哪些方面的知識,但文檔并不是按你所想而規劃的,所以翻閱文檔要費很多功夫
知識不成體系,東看看西看看,沒有歸納容易忘記
學習就需要記筆記,這又是一件很費時間的事情
官方文檔有些觀點難以理解,卡在半路很難受
零星學了一兩個月,也不確定學會了沒有,內心毫無把握
如果不自學,就得找一些成體系的教程來幫助自己快速進步,少走彎路。知識付費時代,在條件允許的情況下適當地投入也是很好的選擇。
但面對動輒幾百的費用,不少開發者還是感覺略有壓力,畢竟我們搬磚的經濟壓力也非常大。 考慮到這些問題,這里推薦韋世東的文章 《超高性價比的 MongoDB 零基礎快速入門實戰教程》,它售價不到 10 塊錢。
這篇文章的內容幾乎囊括了上面我們提到的所有知識點,看完這篇僅 5 萬詞的文章,你將收獲:
文檔的 CRUD 操作和 Cursor 對象
掌握流式聚合操作,輕松面對任何數據處理需求
了解 MongoDB 的查詢效率和優化
如何提高 MongoDB 的可用性
如何應對數據服務故障
理解 MongoDB 的訪問控制
學會用數據模型降低數據冗余,提高效率
掌握 mongodump 數據備份與還原方法
這樣就可以勝任日常開發中對數據庫操作能力的要求了。這篇文章適合對 MongoDB 感興趣的零基礎開發者或者有一定基礎,想要繼續鞏固和加深學習的開發者。
文章篇幅很長,內容詳盡,不乏優質配圖,例如描述復制集節點關系的圖:
描述節主點掉線,重新選舉主節點的圖
專家 開發者 MongoDB
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。