NoSQL | MongoDB入門實(shí)戰(zhàn)教程(1)

對(duì)于后端開(kāi)發(fā)工程師,NoSQL是一個(gè)需要掌握的技術(shù)點(diǎn),而NoSQL中比較火熱的技術(shù)當(dāng)屬M(fèi)ongoDB。歡迎入門MongoDB,進(jìn)入無(wú)模式的文檔數(shù)據(jù)庫(kù)世界。
通過(guò)下面幾個(gè)問(wèn)題,我們來(lái)快速地認(rèn)識(shí)一下MongoDB吧。

什么是MongoDB?
一個(gè)以JSON為數(shù)據(jù)模型的文檔數(shù)據(jù)庫(kù)。
為什么叫文檔數(shù)據(jù)庫(kù)?
這里的文檔來(lái)自于“JSON Document”,而不是我們一般理解的PDF、WORD等文檔。
是誰(shuí)開(kāi)發(fā)的MongoDB?
一個(gè)名叫 MongoDB Inc 的科技公司,總部在美國(guó)紐約。
MongoDB的主要用途是什么?
應(yīng)用數(shù)據(jù)庫(kù),類似于MySQL、Oracle、MSSQL等。
海量數(shù)據(jù)處理,數(shù)據(jù)平臺(tái)等。
MongoDB的主要特點(diǎn)是什么?
建模不再是必選,而是可選;
JSON數(shù)據(jù)模型比較適合開(kāi)發(fā)者快速迭代;
橫向擴(kuò)展可以支撐很大的數(shù)據(jù)量和并發(fā)量;
MongoDB是免費(fèi)的么?
MongoDB有兩個(gè)發(fā)布版本:社區(qū)版 和 企業(yè)版;
社區(qū)版是基于SSPL協(xié)議,這是一種和AGPL協(xié)議類似的開(kāi)源協(xié)議,對(duì)于云廠商封裝云產(chǎn)品有一定限制,其他場(chǎng)景均無(wú)限制,免費(fèi)使用;
企業(yè)版則是基于商業(yè)協(xié)議,需要付費(fèi)使用;
MongoDB各版本有什么變遷?
一圖勝前言:

值得一提的是,4.x 版本開(kāi)始支持事務(wù)了。
MongoDB和關(guān)系型DB有什么異同點(diǎn)?
一表勝前言:


特色:靈活的文檔模型
在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中,我們往往需要建立錯(cuò)綜復(fù)雜的關(guān)系模型。

而在MongoDB中,我們只需要簡(jiǎn)單快速的創(chuàng)建一個(gè)對(duì)象模型即可。

這個(gè)對(duì)象模型就是我們常說(shuō)的JSON文檔文檔模型,它具有以下幾個(gè)特性:
(1)數(shù)據(jù)庫(kù)引擎只需要在一個(gè)存儲(chǔ)區(qū)讀寫(xiě);
(2)反范式、無(wú)關(guān)聯(lián)的組織極大優(yōu)化查詢速度;
(3)動(dòng)態(tài)數(shù)據(jù)模式,支持應(yīng)用開(kāi)發(fā)快速迭代;
優(yōu)勢(shì):原生的高可用和橫向擴(kuò)展能力
在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中,我們往往需要借助一些組件花費(fèi)很多功夫才能做到高可用和橫向擴(kuò)展,而這些在MongoDB中就是與生俱來(lái)的,你不需要花費(fèi)很多功夫就可以實(shí)現(xiàn)。
例如,可以直接借助MongoDB提供的復(fù)制集的能力實(shí)現(xiàn)高可用,最大可支持50個(gè)復(fù)制集,完全可以實(shí)現(xiàn)多中心的容災(zāi)能力。

此外,還可以直接借助MongoDB提供的分片集的能力實(shí)現(xiàn)橫向擴(kuò)展,我們要做的只是在需要的時(shí)候無(wú)縫擴(kuò)展,它支持多種數(shù)據(jù)分布策略(Hash、范圍等),可以較為輕松地支持TB到PB級(jí)的數(shù)據(jù)量。

MongoDB支持多種安裝方式和多平臺(tái)(Windows/Linux),還支持Docker部署。這里為了快速演示,我們來(lái)在Linux下安裝一個(gè)適用于開(kāi)發(fā)測(cè)試環(huán)境的MongoDB社區(qū)版實(shí)例。
此外,你也可以通過(guò)官方提供的云托管服務(wù)來(lái)創(chuàng)建一個(gè)免費(fèi)的MongoDB集群用于學(xué)習(xí),這也是一個(gè)快速學(xué)習(xí)MongoDB的方式,限制是免費(fèi)集群的存儲(chǔ)大小只有512MB。 當(dāng)然,你還可以通過(guò)Docker來(lái)部署一個(gè)MongoDB社區(qū)版實(shí)例,不過(guò)我的習(xí)慣一般是數(shù)據(jù)庫(kù)類有狀態(tài)服務(wù)的運(yùn)行環(huán)境都不用Docker來(lái)部署,開(kāi)發(fā)環(huán)境和測(cè)試環(huán)境可以考慮采用Docker來(lái)部署。
前置條件
一臺(tái)Linux主機(jī) 或 虛擬機(jī) 或 云主機(jī),建議 CentOS 7.x 版本。
配置好靜態(tài)IP、關(guān)閉防火墻、主機(jī)名等基本操作,不再贅述。
下載安裝包
從官網(wǎng)(https://www.mongodb.com/try/download/community)下載MongoDB 4.4.5的tgz包:

下載完成后將其拷貝到Linux中,這里我們暫且將其拷貝到 /usr/local/mongodb/source 目錄下。
當(dāng)然,你要先創(chuàng)建這個(gè)目錄:
mkdir /usr/local/mongodbmkdir /usr/local/mongodb/source
然后,進(jìn)入 source 目錄下解壓,并將壓縮后的所有文件移動(dòng)到 /usr/local/mongodb 目錄下
mv mongodb-linux-x86_64-rhel70-4.4.5 /usr/local/mongodb準(zhǔn)備Mongo目錄與配置文件
首先,在 /usr/local/mongodb 目錄下分別創(chuàng)建db目錄 和 log目錄:
mkdir /usr/local/mongodb/data/dbmkdir /usr/local/mongodb/logs/mkdir /usr/local/mongodb/logs/mongodb.log
然后,創(chuàng)建最核心的mongo配置文件:
vi /usr/local/mongodb/mongodb.conf配置文件內(nèi)容如下:
systemLog:destination: filepath: /usr/local/mongodb/logs/mongodb.log # log pathlogAppend: truestorage:dbPath: /usr/local/mongodb/data/db # data directorynet:bindIp: 0.0.0.0port: 27017 # portprocessManagement:fork: true
修改環(huán)境變量
執(zhí)行以下命令修改環(huán)境變量:
export PATH=$PATH:/usr/local/mongodb/binsource /etc/profile
驗(yàn)證一下:
mongo -version
設(shè)置開(kāi)機(jī)啟動(dòng)項(xiàng)
首先,進(jìn)入 /lib/systemd/system 目錄下,執(zhí)行以下命令:
cd /lib/systemd/systemcat >>mongodb.service<<"EOF"在>提示下拷貝以下內(nèi)容:[Unit]Description=mongodbAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.confPrivateTmp=true[Install]WantedBy=multi-user.targetEOF
設(shè)置mongodb.service執(zhí)行權(quán)限
chmod +x mongodb.service設(shè)置mongodb.service開(kāi)機(jī)自啟動(dòng)
systemctl enable mongodb.service這時(shí)開(kāi)機(jī)自啟動(dòng)配置完成,reboot一下驗(yàn)證看看。
試玩MongoDB
首先,執(zhí)行以下命令進(jìn)入Mongo Shell:
mongo然后,執(zhí)行以下命令可以看到目前已有的數(shù)據(jù)庫(kù):
show dbs
> use studentsswitched 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"}
使用Compass客戶端
MongoDB除了提供了shell命令供我們使用,還提供了一個(gè)免費(fèi)的圖形化客戶端工具Compass。
下載地址:https://www.mongodb.com/products/compass
安裝完成后,配置一下連接參數(shù):

即可看到所有的數(shù)據(jù)庫(kù)和集合了:

通過(guò)Compass查看剛剛把玩的students數(shù)據(jù)庫(kù):

當(dāng)然,除了Compass之外呢,可以選擇的可視化工具還有Robo 3T 以及 Navicat,如果你已經(jīng)安裝了Navicat,那就直接使用Navicat連接也是一個(gè)不錯(cuò)的選擇。
OK,到此試玩結(jié)束。
本文總結(jié)了MongoDB的基本概念、文檔模型 及 技術(shù)優(yōu)勢(shì),并介紹了如何在Linux下快速部署安裝一個(gè)MongoDB實(shí)例 以及 使用Compass客戶端工具連接MongoDB。
下一篇,我們會(huì)學(xué)習(xí)如何在Linux下安裝部署一個(gè)三節(jié)點(diǎn)MongoDB的高可用復(fù)制集集群,有興趣的童鞋可以繼續(xù)關(guān)注。
參考資料
唐建法,《MongoDB高手課》(極客時(shí)間)
郭遠(yuǎn)威,《MongoDB實(shí)戰(zhàn)指南》(圖書(shū))
