第二天,首先我打算先把Mongo DB環境建起來
為了方便,就用docker在local部屬 Mongo DB的image來省去實機安裝的工
首先是安裝Docker,
(到docker的官方網站下載Docker ,因為我以前就裝好了,所以安裝過程略過)
Docker對現在的程式開發者、電腦潔癖幾乎已經是離不開的工具了,
他最大的優點是部屬非常方便、確保環境的一致
只要有一台有安裝docker的PC或Server,
那麼不論這台電腦是Linux或是Windows,只要系統資源足夠,
那就只需要把Docker image run起來就能把想要的服務建起來了,
微服務架構的系統也幾乎都是以這類docker容器化技術來實現,
雖然我自己對Docker其實也只是會用而已,談不上精通
但對於軟體工程師來說,不論專精前端還是後端,
我覺得Docker已經是除了git之外的第二個必備技能了
在學Docker首先會遇到的兩個名詞:Image 跟 Container
Image(映像檔),可以把它想像成一份設計圖
Container(容器),就像是設計圖建立起來的建築物,
docker運行環境建置完成後,就是用這兩樣東西來建立Mongo DB
首先 在cmd下指令,將最新版Mongo DB 的image取下來:
docker pull mongo:latest
接著執行
docker run --name mongo -v /d/tmp/mongo/data:/data/db -d -p 27017:27017 mongo:latest
將Mongo 運行起來
用docker run
指令 以指定的image為基準,建立一個container
--name 指定建起來的container名字
-v 連結local端目錄與container目錄 (像Linux中mount共用空間的概念)
-d 背景執行
-p 指定將docker內的某port與本地端的某port連結在一起 ,透過這樣的設定就可以透過本地直接連container了
進入container中 可以看看這是什麼版本的Mongo
mongo -version
MongoDB shell version v5.0.2
當下的latest版本是5.0.2
這邊為了方便測試,我安裝了Studio 3T這個Mongo DB專用的圖形化介面工具,方便我們測試與查看資料庫內容
它本身是付費工具,不過有30天的免費試用,30天不用白不用,到期後可以改為使用免費的Robo 3T
安裝完成後先建立連線
建立連線後 選擇IntelliShell
use [DB Name]
↑是切換DB的指令,如果沒有這個DB,就會直接新增它
use testDB;
↑建立testDB這個資料庫
show dbs;
↑可以看到目前存有哪些資料庫
輸入指令建立新的User 作為後端連接資料庫時使用
use admin
db.createUser({
user:"iron30",
pwd:"123456",
roles:[
{role:"readWrite",db:"testDB"},
]
})
也建一個root
db.createUser(
{
user:"root",
pwd:"root",
roles:["root"]
}
)
因為暫時還沒找到讓登入驗證立即生效的做法,
所以我目前是這樣做:
在cmd下docker指令
#停止mogo這個container
docker stop mongo
#移除mongo這個container
docker rm mongo
加上--auth以需要驗證的方式重建mongo的container
docker run --name mongo -v /d/tmp/mongo/data -d -p 27017:27017 mongo:latest mongod --auth
因為我們把data都bind在/d/tmp/mongo/data:/data/db ,所以先前的設定都還保留著
看看一下是否成功
測試連線ok
在testDB試著insert一筆資料試試看
use testDB;
try {
db.products.insertOne( { item: "card2", qty: 150 } );
} catch (e) {
print (e);
};
再查詢看看有沒有insert進去
db.getCollection("products").find({});
看來是有的
NOSQL除了在處理大量資料效能優異之外,使用上也非常有彈性,
在Mongo DB 沒有table,取而代之的是collection,collection中所存的資料是一筆筆的document,
在insert document時,不像在傳統的RDMS上會受限於TABLE的欄位設計,
然而,這不代表我們就不用規劃資料的儲存格式與架構,
畢竟在沒有規範的情況下,隨著時間拉長,維運的成本會變得很可怕
在MongoDB的文件裡還有很多方法使用,大家可以去試試看
MongoDB的準備就到這裡差不多告一個段落
明天就來準備後端吧