MongoDB入門實戰教程(1)

對於後端開發工程師,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實戰指南》(圖書)

△推薦訂閱學習

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章