標籤:結構 資料庫 存取控制 對象 多級 應用 tap 分配 資料
MongoDB 簡介
MongDB 是一款跨平台,面向文檔的資料庫,可以實現高效能,高可用性,並且能夠輕鬆擴充,是一個基於分布式檔案儲存體的開來源資料庫系統。在高負載的情況下,添加更多的節點,可以保證伺服器效能。
MongoDB 也是一個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。不採用關聯式模式主要是為了獲得更好的拓展性,MongoDB 不再有“行”(row)的概念,其運行方式主要基於兩個概念:集合(collection)與文檔(document)。
MongoDB 的特點
- MongoDB 的特點包括面向集合儲存、模式自由、豐富的查詢語句和多級索引、複製集機制、易於水平拓展、可插入儲存引擎、跨平台多語言支援等。
- MongoDB 安裝簡單,提供了面向文檔儲存功能,操作起來比較容易上手。
- MongoDB 提供了複製、高可用性和自動分區功能。如果負載增加(需要更多的儲存空間和更強的處理能力),它可以分布在電腦網路中的其他節點上,這就是所謂的分區。
- Mongo 支援豐富的查詢運算式。查詢指令使用 JSON 形式的標記,可輕易查詢文檔中內嵌的對象及數組。
- MongoDB 支援各種程式設計語言:Ruby、Python、Java、C++、PHP、C# 等各種語言。
MongoDB 適用領域
MongoDB 可以為 Web 應用程式提供可拓展的高效能資料儲存解決方案。MongoDB 主要適用領域有網站資料、分布式情境、資料緩衝和 JSON 文檔格式儲存。適合大資料量、高並發、弱事務的互連網應用,其內建的水平拓展機制提供了從幾百萬到十億層級的資料處理能力,可以很好地滿足 Web2.0 和移動互連網應用資料存放區的要求。
MongoDB 4.0 的安裝
MongoDB 提供了 Linux 平台上的安裝包,可以從官方網站 http://www.mongodb.org/downloads 下載。本次我們選擇使用最新版 MongoDB4.0 來安裝並實驗。
下載 MongoDB4.0 軟體包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgztar zxvf mongodb-linux-x86_64-4.0.0.tgz -C /optmv /opt/mongodb-linux-x86_64-4.0.0/ /usr/local/mongodb
- 建立MongoDB 的資料存放區目錄,日誌儲存目錄,設定檔
# mkdir /data/mongodb1# mkdir /data/logs/mongodb# touch /data/logs/mongodb/mongodb1.log# chmod -R 777 /data/logs/mongodb/mongodb1.log# vim /usr/local/mongodb/mongodb1.conf //添加下面的行dbpath=/data/mongodb1 #資料存放區目錄logpath=/data/logs/mongodb/mongodb1.log #記錄檔port=27017 #預設伺服器連接埠logappend=true #使用追加方式寫日誌fork=true #後台運行maxConns=5000 #最大同時串連數,預設2000storageEngine=mmapv1 #指定儲存引擎為記憶體對應檔
設定核心參數
echo 0 > /proc/sys/vm/zone_reclaim_modesysctl -w vm.zone_reclaim_mode=0 #永久設定echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag
設定系統內容變數,方便使用
echo ‘export MONGODB_HOME=/usr/local/mongodb‘ >> /etc/profileecho ‘export PATH=$PATH:$MONGODB_HOME/bin‘ >> /etc/profilesource /etc/profile
啟動 mongodb 服務進程,查看連接埠(預設27017)
mongod --config /usr/local/mongodb/mongodb1.conf #開啟MongoDBmongod --config /usrlocal/mongodb/mongodb1.conf --shutdown #停止MongoDBnetstat -ntap | grep mongodmongo --port 27017# 進入mongo資料庫,若是不指定連接埠預設進27017連接埠
- 建立多執行個體
在單台伺服器資源充分的情況下,可以使用多執行個體,以便充分使用伺服器資源(只需要修改資料存放區目錄、記錄檔及連接埠號碼並建立相應目錄即可)cd /usr/local/mongodb/cp mongodb1.conf mongodb2.confvim mongodb2.conf #修改如下# dbpath=/data/mongodb2 #資料存放區目錄# logpath=/data/logs/mongodb/mongodb2.log #記錄檔# port=27018 #預設伺服器連接埠# logappend=true #使用追加方式寫日誌# fork=true #後台運行# maxConns=5000 #最大同時串連數,預設2000# storageEngine=mmapv1 #指定儲存引擎為記憶體對應檔mkdir /data/mongodb2touch /data/logs/mongodb/mongodb2.logchmod -R 777 /data/logs/mongodb/mongodb2.logmongod --config /usr/local/mongodb/mongodb2.conf #開啟多執行個體
MongoDB 邏輯儲存結構
MongoDB 的邏輯結構主要由文檔(document)、集合(collection)和資料庫(database)三部分組成。其中文檔是 MongoDB 的核心概念,它是 MongoDB 邏輯儲存的最小單元,相當於關係型資料庫中的一行記錄,多個文檔組成集合,集合相當於關係型資料庫中的表的概念,多個幾個組成資料庫。
SQL 術語/概念 |
MongoDB 術語/概念 |
解釋/說明 |
database |
database |
資料庫 |
table |
collection |
資料庫表/集合 |
row |
document |
資料記錄行/文檔 |
column |
field |
資料欄位/域 |
index |
index |
索引 |
table joins |
|
表串連,MongoDB不支援 |
primary key |
primary key |
主鍵,MongoDB自動將 _id欄位設定為主鍵 |
MongoDB 基本操作
登入、退出
#本地登入(預設執行個體連接埠號碼:--port=27017,可以不寫)> mongo#登入遠程主機的執行個體> mongo --host 192.168.1.2 --port =27017#退出MongoDB> exit
資料庫操作
#建立資料庫(如果資料庫不存在,則建立資料庫,否則切換到指定資料庫)> use school#查看所有資料庫> show dbs#刪除school資料庫> use school> db.dropDatabase()#顯示資料庫操作命令> db.help()
集合
MongoDB 的資料儲存在集合中,所有儲存在集合中的資料都是 Binary JSON 格式,簡稱 BSON。BSON 是一種類似於 JSON 的二進位形式的儲存格式。
#建立info集合> db.createcollection(‘info‘)#查看集合方法一:> show tabels方法二:> show colletctions#顯示info集合操作命令> db.info.help()
- 文檔(增、刪、改、查)
插入#插入一條記錄> db.info.insert({"id":1,"name":"jack","hobby":["game","talk","sport"]})#向指定集合中插入一條文檔資料> db.collection.insertOne()#向指定集合中插入多條文檔資料> db.collection.insertMany()#通過迴圈批量插入資料> for(var i=1;i<100;i++)db.info.insert({"id":i,"name":"jack"+i})
刪除
#刪除info集合中id=1的文檔> db.info.remove({"id":"1"})
修改
#修改info集合id=1的name值為"zhangsan"文檔db.info.update({"id":"1"},{$set:{"name":"wzn"}})
查詢
#查詢info集合所有文檔> db.info.find()#查詢info集合id為1的文檔> db.info.findOne({id:1})#統計記錄數> db.info.count()
備份、恢複資料庫
- 匯入匯出
- 匯出:mongoexport
- 匯入:mongoimport
- 選項: -d 指定資料庫名稱;-c 指定集合名稱;-f 指定匯出哪些列;-o 指定要匯出的檔案名稱;-q:指定匯出資料的過濾條件。具體命令通過 --help 查看。
- 備份與恢複
- 備份:mongodump
- 恢複:mongorestore
選項:
1 : -h 指定Mongodb所在伺服器的地址也可以指定連接埠。(例:-h 127.0.0.1:27017)
2 : -d :需要備份的資料庫執行個體。
3 : -o :備份資料存放的目錄 該目錄需提前建立。
複製資料庫
> db.copyDatabase("db1","db2") //複製資料庫db1 到db2 中
- 複製集合
- 把資料庫 db1 的 info 集合複製到執行個體連接埠:27018
# mongo --port 27018# db.runCommand({"cloneCollection":"db1.info","from":"localhost:27017"})
MongoDB 安全管理
MongoDB 安全管理主要包括 MongoDB 的安全存取控制以及使用者權限分配。
限定監聽特定 IP 和連接埠
# vim /usr/local/mongodb/mongodb1.conf# 只綁定內網卡地址bind_ip=localhost(ip)# 只監聽指定的連接埠port=27017
- 授權啟動
- 內建資料庫使用者:read、readWrite
- 資料庫管理角色:dbAdmin、dbOwner、userAdmin
超級使用者角色:root
#在db1資料庫建立超級使用者root,密碼:123123> use db1> db.createUser({"user":"root","pwd":"123123","roles":["root"]})> exit##關閉 mongodb 服務mongod -f /usr/local/mongodb/mongodb1.conf --shutdown## 使用帶認證參數的方式啟動 mongodb 服務mongod -f /usr/local/mongodb/mongodb1.conf --auth## 此時查詢資料不顯示內容,需要進行授權認證> use db1> db.auth("root":"123123")## 當然,實際情況中,我們可以修改設定檔,#這樣別人在訪問我們的 MongoDB 時,我們可以指定一個有相應許可權的使用者給他進行登入並操作vim /usr/local/mongodb/mongodb1.confauth=true //添加
- 進程管理
- 查看當前正在啟動並執行進程(擷取高消耗資源的進程opid)
> db.currentOp()
- 終止正在啟動並執行高消耗資源的進程(括弧內跟上面擷取到的opid值)
> db.killOp(opid)
MongoDB 監控
MongoDB 資料庫詳解,以及 MongoDB4.0版本的安裝