MongoDB 是什麼web
我如何肯定我須要學習 MongoDB數據庫
開發者應該掌握 MongoDB 的哪些知識編程
學習的選擇和困境bash
咱們先來了解一下,MongoDB 爲什麼物。websocket
NoSQL 泛指非關係型數據庫,該詞是關係型數據庫(即 SQL)的相對稱呼。MongoDB 是非關係型數據庫(NoSQL)中較爲人熟知的一種。負載均衡
它擁有不少優秀特性,例如高性能、高可用、支持豐富的查詢語句、無需預約義數據模型和水平可伸縮等,適合存儲結構化、半結構化的文檔和特定格式的文檔,這些特性使它受到衆多開發者的青睞。socket
咱們經過幾個例子來看看 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 是近些年涌現的幾十種 NoSQL 中第一梯隊的成員,另一個爲人熟知的是 Redis。
你可能會有」我如何肯定我須要學習 MongoDB 呢?「 這樣的疑問,面對這個問題,咱們能夠經過 MongoDB 的特色和應用場景着手:
MongoDB 適合存儲結構肯定或不肯定的文檔。例如爬蟲爬取的信息常缺失字段的狀況或字段良莠不齊的狀況;
對數據庫可用性要求較高的狀況。MySQL 這類數據庫要作到負載均衡、自動容災和數據同步須要藉助外部工具,而 MongoDB 的複製集可讓咱們輕鬆完成這一系列的工做。相對接藉助第三方工具來講,複製集的穩定性更高。
分庫分表是 WEB 開發中經常使用到的數據庫優化手段,MySQL 的分庫分表要考慮的問題很是多,例如字段冗餘、數據組裝跨節點分頁、排序和數據遷移等,而 MongoDB 的分片可讓咱們輕鬆完成「分庫分表」的工做。MongoDB 的分片機制使咱們沒必要將心思放在由「分庫分表」帶來的問題,而是專一於具體需求。
一樣的,MySQL 的權限控制、定義數據模型、數據庫備份和恢復等功能在 MongoDB 上也有。
MongoDB 中支持地理位置的存儲和查詢,這意味着 MongoDB 能夠用於共享單車、共享雨傘、汽車定位等業務中。
咱們經常使用的關係型數據庫沒法知足 WEB2.0 時代的需求,在實際應用中暴露了不少難以克服的問題。NoSQL 的產生就是爲了解決例如海量數據的存儲、彈性可伸縮和靈活性等方面的挑戰,因此做爲一名合格的開發者,應該抽空學習 SQL 之外的數據庫知識。
學習前,咱們須要明白自身定位:專業 DBA 或者平常開發使用。
MongoDB 有完善的體系和對應的認證考試,對於但願成爲專業 DBA 的朋友我建議到 MongoDB 官方網站了解。
而對於僅須要知足平常開發需求的朋友,我建議學習的內容以下:
MongoDB 在各個平臺的安裝方法
MongoDB 數據庫和集合的基本操做
MongoDB 文檔 CRUD 操做,包括可以豐富 CRUD 的投影和修飾符等
MongoDB 流式聚合操做,這可以在數據庫層面輕鬆完成複雜數據的處理,而不是用編程語言來處理
MongoDB 的數據模型,雖然 MongoDB 能夠存儲不規則的文檔,但有些狀況下定義數據模型能夠提升查詢效率
下圖描述了一種聚合操做的完整過程:
固然,除了這些基本操做以外咱們還能夠學習更多的知識提升我的競爭力,這些知識是:
MongoDB 執行計劃和索引,執行計劃可讓咱們清楚的瞭解到查詢語句的效率,而索引則是優化查詢效率的經常使用手段
MongoDB 的複製集,這是提升 MongoDB 可用性,保證數據服務不停機的最佳手段
MongoDB 的分片,分片可以在數據量變得龐大以後保證效率
MongoDB 的事物,若是你將 MongoDB 用於 WEB 網站,那麼事物是你必須學習的知識
MongoDB 數據庫備份和還原,有了複製集後,備份就顯得不是那麼重要了,但並非沒有這個需求。並且 MongoDB 的備份能夠精細到文檔,這就很是有意義了。
有必定工做經驗的開發者,大多數狀況下都會選擇自學。有些在網上搜索對應的文章,有些則直接翻閱官方文檔。
我推薦的方式是翻閱官方文檔,在遇到難以理解的觀點時經過搜索引擎查找網友分享的文章。
自學的優勢不少,缺點也很明顯。例如:
斷斷續續的學習,難以保持專一致使知識吸取很差
耗費時間很長,雖然知道應該學習哪些方面的知識,但文檔並非按你所想而規劃的,因此翻閱文檔要費不少功夫
知識不成體系,東看看西看看,沒有概括容易忘記
學習就須要記筆記,這又是一件很費時間的事情
官方文檔有些觀點難以理解,卡在半路很難受
零星學了一兩個月,也不肯定學會了沒有,心裏毫無把握
若是不自學,就得找一些成體系的教程來幫助本身快速進步,少走彎路。知識付費時代,在條件容許的狀況下適當地投入也是很好的選擇。
但面對動輒幾百的費用,很多開發者仍是感受略有壓力,畢竟咱們搬磚的經濟壓力也很是大。 考慮到這些問題,這裏推薦韋世東的文章 《超高性價比的 MongoDB 零基礎快速入門實戰教程》,它售價不到 10 塊錢。
文章做者韋世東是:圖靈簽約做者、電子工業出版社簽約做者,華爲雲認證雲享專家、掘金社區優秀做者、開源項目 aiowebsocket 做者。因此在文章質量上,你們能夠放心。
這篇文章的內容幾乎囊括了上面咱們提到的全部知識點,看完這篇僅 5 萬詞的文章,你將收穫:
文檔的 CRUD 操做和 Cursor 對象
掌握流式聚合操做,輕鬆面對任何數據處理需求
瞭解 MongoDB 的查詢效率和優化
如何提升 MongoDB 的可用性
如何應對數據服務故障
理解 MongoDB 的訪問控制
學會用數據模型下降數據冗餘,提升效率
掌握 mongodump 數據備份與還原方法
這樣就能夠勝任平常開發中對數據庫操做能力的要求了。這篇文章適合對 MongoDB 感興趣的零基礎開發者或者有必定基礎,想要繼續鞏固和加深學習的開發者。
文章篇幅很長,內容詳盡,不乏優質配圖,例如描述複製集節點關係的圖:
描述節主點掉線,從新選舉主節點的圖
若是你以爲有學習 MongoDB 的須要,且這篇文章規劃的內容是你想要的內容,那麼請前往訂閱吧!