MongDB 是一款跨平臺,面向文檔的數(shù)據(jù)庫,可以實現(xiàn)高性能,高可用性,并且能夠輕松擴展,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。在高負載的情況下,添加更多的節(jié)點,可以保證服務器性能。
MongoDB 也是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產(chǎn)品,是非關系數(shù)據(jù)庫當中功能最豐富,最像關系數(shù)據(jù)庫的。不采用關系模型主要是為了獲得更好的拓展性,MongoDB 不再有“行”(row)的概念,其運行方式主要基于兩個概念:集合(collection)與文檔(document)。讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、虛擬主機、營銷軟件、網(wǎng)站建設、溧水網(wǎng)站維護、網(wǎng)站推廣。
- MongoDB 的特點包括面向集合存儲、模式自由、豐富的查詢語句和多級索引、復制集機制、易于水平拓展、可插入存儲引擎、跨平臺多語言支持等。
- MongoDB 安裝簡單,提供了面向文檔存儲功能,操作起來比較容易上手。
- MongoDB 提供了復制、高可用性和自動分片功能。如果負載增加(需要更多的存儲空間和更強的處理能力),它可以分布在計算機網(wǎng)絡中的其他節(jié)點上,這就是所謂的分片。
- Mongo 支持豐富的查詢表達式。查詢指令使用 JSON 形式的標記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組。
- MongoDB 支持各種編程語言:Ruby、Python、Java、C++、PHP、C# 等各種語言。
MongoDB 可以為 Web 應用提供可拓展的高性能數(shù)據(jù)存儲解決方案。MongoDB 主要適用領域有網(wǎng)站數(shù)據(jù)、分布式場景、數(shù)據(jù)緩存和 JSON 文檔格式存儲。適合大數(shù)據(jù)量、高并發(fā)、弱事務的互聯(lián)網(wǎng)應用,其內(nèi)置的水平拓展機制提供了從幾百萬到十億級別的數(shù)據(jù)處理能力,可以很好地滿足 Web2.0 和移動互聯(lián)網(wǎng)應用數(shù)據(jù)存儲的要求。
MongoDB 提供了 Linux 平臺上的安裝包,可以從官方網(wǎng)站 http://www.mongodb.org/downloads 下載。本次我們選擇使用最新版 MongoDB4.0 來安裝并實驗。
下載 MongoDB4.0 軟件包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
tar zxvf mongodb-linux-x86_64-4.0.0.tgz -C /opt
mv /opt/mongodb-linux-x86_64-4.0.0/ /usr/local/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 #數(shù)據(jù)存儲目錄
logpath=/data/logs/mongodb/mongodb1.log #日志文件
port=27017 #默認服務器端口
logappend=true #使用追加方式寫日志
fork=true #后臺運行
maxConns=5000 #最大同時連接數(shù),默認2000
storageEngine=mmapv1 #指定存儲引擎為內(nèi)存映射文件
設置內(nèi)核參數(shù)
echo 0 > /proc/sys/vm/zone_reclaim_mode
sysctl -w vm.zone_reclaim_mode=0 #永久設置
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
設置系統(tǒng)環(huán)境變量,方便使用
echo 'export MONGODB_HOME=/usr/local/mongodb' >> /etc/profile
echo 'export PATH=$PATH:$MONGODB_HOME/bin' >> /etc/profile
source /etc/profile
啟動 mongodb 服務進程,查看端口(默認27017)
mongod --config /usr/local/mongodb/mongodb1.conf #開啟MongoDB
mongod --config /usrlocal/mongodb/mongodb1.conf --shutdown #停止MongoDB
netstat -ntap | grep mongod
mongo --port 27017
# 進入mongo數(shù)據(jù)庫,若是不指定端口默認進27017端口
cd /usr/local/mongodb/
cp mongodb1.conf mongodb2.conf
vim mongodb2.conf #修改如下
# dbpath=/data/mongodb2 #數(shù)據(jù)存儲目錄
# logpath=/data/logs/mongodb/mongodb2.log #日志文件
# port=27018 #默認服務器端口
# logappend=true #使用追加方式寫日志
# fork=true #后臺運行
# maxConns=5000 #最大同時連接數(shù),默認2000
# storageEngine=mmapv1 #指定存儲引擎為內(nèi)存映射文件
mkdir /data/mongodb2
touch /data/logs/mongodb/mongodb2.log
chmod -R 777 /data/logs/mongodb/mongodb2.log
mongod --config /usr/local/mongodb/mongodb2.conf #開啟多實例
MongoDB 的邏輯結(jié)構主要由文檔(document)、集合(collection)和數(shù)據(jù)庫(database)三部分組成。其中文檔是 MongoDB 的核心概念,它是 MongoDB 邏輯存儲的最小單元,相當于關系型數(shù)據(jù)庫中的一行記錄,多個文檔組成集合,集合相當于關系型數(shù)據(jù)庫中的表的概念,多個幾個組成數(shù)據(jù)庫。
SQL 術語/概念 | MongoDB 術語/概念 | 解釋/說明 |
---|---|---|
database | database | 數(shù)據(jù)庫 |
table | collection | 數(shù)據(jù)庫表/集合 |
row | document | 數(shù)據(jù)記錄行/文檔 |
column | field | 數(shù)據(jù)字段/域 |
index | index | 索引 |
table joins | 表連接,MongoDB不支持 | |
primary key | primary key | 主鍵,MongoDB自動將 _id字段設置為主鍵 |
登錄、退出
#本地登錄(默認實例端口號:--port=27017,可以不寫)
> mongo
#登錄遠程主機的實例
> mongo --host 192.168.1.2 --port =27017
#退出MongoDB
> exit
數(shù)據(jù)庫操作
#創(chuàng)建數(shù)據(jù)庫(如果數(shù)據(jù)庫不存在,則創(chuàng)建數(shù)據(jù)庫,否則切換到指定數(shù)據(jù)庫)
> use school
#查看所有數(shù)據(jù)庫
> show dbs
#刪除school數(shù)據(jù)庫
> use school
> db.dropDatabase()
#顯示數(shù)據(jù)庫操作命令
> db.help()
集合
MongoDB 的數(shù)據(jù)保存在集合中,所有存儲在集合中的數(shù)據(jù)都是 Binary JSON 格式,簡稱 BSON。BSON 是一種類似于 JSON 的二進制形式的存儲格式。
#創(chuàng)建info集合
> db.createcollection('info')
#查看集合
方法一:
> show tabels
方法二:
> show colletctions
#顯示info集合操作命令
> db.info.help()
#插入一條記錄
> db.info.insert({"id":1,"name":"jack","hobby":["game","talk","sport"]})
#向指定集合中插入一條文檔數(shù)據(jù)
> db.collection.insertOne()
#向指定集合中插入多條文檔數(shù)據(jù)
> db.collection.insertMany()
#通過循環(huán)批量插入數(shù)據(jù)
> 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})
#統(tǒng)計記錄數(shù)
> db.info.count()
選項:
1 : -h 指定Mongodb所在服務器的地址也可以指定端口。(例:-h 127.0.0.1:27017)
2 : -d :需要備份的數(shù)據(jù)庫實例。
3 : -o :備份數(shù)據(jù)存放的目錄 該目錄需提前創(chuàng)建。
復制數(shù)據(jù)庫
> db.copyDatabase("db1","db2") //復制數(shù)據(jù)庫db1 到db2 中
# mongo --port 27018
# db.runCommand({"cloneCollection":"db1.info","from":"localhost:27017"})
MongoDB 安全管理主要包括 MongoDB 的安全訪問控制以及用戶權限分配。
限定監(jiān)聽特定 IP 和端口
# vim /usr/local/mongodb/mongodb1.conf
# 只綁定內(nèi)網(wǎng)卡地址
bind_ip=localhost(ip)
# 只監(jiān)聽指定的端口
port=27017
超級用戶角色:root
#在db1數(shù)據(jù)庫創(chuàng)建超級用戶root,密碼:123123
> use db1
> db.createUser({"user":"root","pwd":"123123","roles":["root"]})
> exit
#
#關閉 mongodb 服務
mongod -f /usr/local/mongodb/mongodb1.conf --shutdown
#
# 使用帶認證參數(shù)的方式啟動 mongodb 服務
mongod -f /usr/local/mongodb/mongodb1.conf --auth
#
# 此時查詢數(shù)據(jù)不顯示內(nèi)容,需要進行授權認證
> use db1
> db.auth("root":"123123")
#
# 當然,實際情況中,我們可以修改配置文件,
#這樣別人在訪問我們的 MongoDB 時,我們可以指定一個有相應權限的用戶給他進行登錄并操作
vim /usr/local/mongodb/mongodb1.conf
auth=true //添加
> db.currentOp()
> db.killOp(opid)
> db.serverStatus()
> db.status()
> db.users.status()
> db.users.dataSize()
此外,我們可以通過 Web 界面查看系統(tǒng)監(jiān)控信息,只需要修改配置文件
# vim /usr/local/mongodb/mongodb1.conf
httpinterface=true //添加
通過 Web 頁面可以看到:
1)當前 MongoDB 的所有連接
2)各個數(shù)據(jù)庫和集合的訪問統(tǒng)計,包括:Reads、Writes、Queries、GetMores、Inserts、Updates、Removes
3)寫鎖的狀態(tài)
4)日志文件的最后幾百行
5)所有的 MongoDB 命令