對於后端開發工程師,NoSQL是一個需要掌握的技術點,而NoSQL中比較火熱的技術當屬MongoDB。歡迎入門MongoDB,進入無模式的文檔數據庫世界。
1 關於MongoDB
通過下面幾個問題,我們來快速地認識一下MongoDB吧。
什么是MongoDB?
一個以JSON為數據模型的文檔數據庫。
為什么叫文檔數據庫?
這里的文檔來自於“JSON Document”,而不是我們一般理解的PDF、WORD等文檔。
是誰開發的MongoDB?
一個名叫 MongoDB Inc 的科技公司,總部在美國紐約。
MongoDB的主要用途是什么?
應用數據庫,類似於MySQL、Oracle、MSSQL等。
海量數據處理,數據平台等。
MongoDB的主要特點是什么?
建模不再是必選,而是可選;
JSON數據模型比較適合開發者快速迭代;
橫向擴展可以支撐很大的數據量和並發量;
MongoDB是免費的么?
MongoDB有兩個發布版本:社區版 和 企業版;
社區版是基於SSPL協議,這是一種和AGPL協議類似的開源協議,對於雲廠商封裝雲產品有一定限制,其他場景均無限制,免費使用;
企業版則是基於商業協議,需要付費使用;
MongoDB各版本有什么變遷?
一圖勝前言:
值得一提的是,4.x 版本開始支持事務了。
MongoDB和關系型DB有什么異同點?
一表勝前言:
對於基本概念術語,MongoDB與關系型數據庫的區別如下表:
可以看到,在MongoDB中每一行被稱做一個文檔,這也是MongoDB被稱為文檔型數據庫的最大特點。
2 MongoDB的特色和優勢
特色:靈活的文檔模型
在傳統的關系型數據庫中,我們往往需要建立錯綜復雜的關系模型。
而在MongoDB中,我們只需要簡單快速的創建一個對象模型即可。
這個對象模型就是我們常說的JSON文檔文檔模型,它具有以下幾個特性:
(1)數據庫引擎只需要在一個存儲區讀寫;
(2)反范式、無關聯的組織極大優化查詢速度;
(3)動態數據模式,支持應用開發快速迭代;
優勢:原生的高可用和橫向擴展能力
在傳統的關系型數據庫中,我們往往需要借助一些組件花費很多功夫才能做到高可用和橫向擴展,而這些在MongoDB中就是與生俱來的,你不需要花費很多功夫就可以實現。
例如,可以直接借助MongoDB提供的復制集的能力實現高可用,最大可支持50個復制集,完全可以實現多中心的容災能力。
此外,還可以直接借助MongoDB提供的分片集的能力實現橫向擴展,我們要做的只是在需要的時候無縫擴展,它支持多種數據分布策略(Hash、范圍等),可以較為輕松地支持TB到PB級的數據量。
3 快速安裝MongoDB
MongoDB支持多種安裝方式和多平台(Windows/Linux),還支持Docker部署。這里為了快速演示,我們來在Linux下安裝一個適用於開發測試環境的MongoDB社區版實例。
此外,你也可以通過官方提供的雲托管服務來創建一個免費的MongoDB集群用於學習,這也是一個快速學習MongoDB的方式,限制是免費集群的存儲大小只有512MB。當然,你還可以通過Docker來部署一個MongoDB社區版實例,不過我的習慣一般是數據庫類有狀態服務的運行環境都不用Docker來部署,開發環境和測試環境可以考慮采用Docker來部署。
前置條件
一台Linux主機 或 虛擬機 或 雲主機,建議 CentOS 7.x 版本。
配置好靜態IP、關閉防火牆、主機名等基本操作,不再贅述。
下載安裝包
從官網(https://www.mongodb.com/try/download/community)下載MongoDB 4.4.5的tgz包:
下載完成后將其拷貝到Linux中,這里我們暫且將其拷貝到 /usr/local/mongodb/source 目錄下。
當然,你要先創建這個目錄:
mkdir /usr/local/mongodb mkdir /usr/local/mongodb/source
然后,進入 source 目錄下解壓,並將壓縮后的所有文件移動到 /usr/local/mongodb 目錄下
mv mongodb-linux-x86_64-rhel70-4.4.5 /usr/local/mongodb
准備Mongo目錄與配置文件
首先,在 /usr/local/mongodb 目錄下分別創建db目錄 和 log目錄:
mkdir /usr/local/mongodb/data/db mkdir /usr/local/mongodb/logs/ mkdir /usr/local/mongodb/logs/mongodb.log
然后,創建最核心的mongo配置文件:
vi /usr/local/mongodb/mongodb.conf
配置文件內容如下:
systemLog: destination: file path: /usr/local/mongodb/logs/mongodb.log # log path logAppend: true storage: dbPath: /usr/local/mongodb/data/db # data directory net: bindIp: 0.0.0.0 port: 27017 # port processManagement: fork: true
修改環境變量
執行以下命令修改環境變量:
export PATH=$PATH:/usr/local/mongodb/bin
source /etc/profile
驗證一下:
mongo -version
設置開機啟動項
首先,進入 /lib/systemd/system 目錄下,執行以下命令:
cd /lib/systemd/system cat >>mongodb.service<<"EOF" 在>提示下拷貝以下內容: [Unit] Description=mongodb After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf PrivateTmp=true [Install] WantedBy=multi-user.target EOF
設置mongodb.service執行權限
chmod +x mongodb.service
設置mongodb.service開機自啟動
systemctl enable mongodb.service
這時開機自啟動配置完成,reboot一下驗證看看。
試玩MongoDB
首先,執行以下命令進入Mongo Shell:
mongo
然后,執行以下命令可以看到目前已有的數據庫:
show dbs
接下來,我們來創建一個 students 數據庫並新增一個文檔 用於把玩:
> use students switched to db students > db.records.insertOne({name:"Edison", gender:"Male"}) { "acknowledged" : true, "insertedId" : ObjectId("6092aa664e88a1d766523bc4") } > db.records.find().pretty() { "_id" : ObjectId("6092aa664e88a1d766523bc4"), "name" : "Edison", "gender" : "Male" }
暫且先不用管這個語法,你只需要知道它向test數據庫的students集合中新增了一行記錄 並 通過find查詢到了這一行記錄 即可。
使用Compass客戶端
MongoDB除了提供了shell命令供我們使用,還提供了一個免費的圖形化客戶端工具Compass。
下載地址:https://www.mongodb.com/products/compass
安裝完成后,配置一下連接參數:
即可看到所有的數據庫和集合了:
通過Compass查看剛剛把玩的students數據庫:
當然,除了Compass之外呢,可以選擇的可視化工具還有Robo 3T 以及 Navicat,如果你已經安裝了Navicat,那就直接使用Navicat連接也是一個不錯的選擇。
OK,到此試玩結束。
4 總結
本文總結了MongoDB的基本概念、文檔模型 及 技術優勢,並介紹了如何在Linux下快速部署安裝一個MongoDB實例 以及 使用Compass客戶端工具連接MongoDB。
下一篇,我們會學習如何在Linux下安裝部署一個三節點MongoDB的高可用復制集集群,有興趣的童鞋可以繼續關注。
參考資料
唐建法,《MongoDB高手課》(極客時間)
郭遠威,《MongoDB實戰指南》(圖書)
△推薦訂閱學習