MongDB 是一款跨平臺,面向文檔的數據庫,能夠實現高性能,高可用性,而且可以輕鬆擴展,是一個基於分佈式文件存儲的開源數據庫系統。在高負載的狀況下,添加更多的節點,能夠保證服務器性能。
MongoDB 也是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。不採用關係模型主要是爲了得到更好的拓展性,MongoDB 再也不有「行」(row)的概念,其運行方式主要基於兩個概念:集合(collection)與文檔(document)。linux
- MongoDB 的特色包括面向集合存儲、模式自由、豐富的查詢語句和多級索引、複製集機制、易於水平拓展、可插入存儲引擎、跨平臺多語言支持等。
- MongoDB 安裝簡單,提供了面向文檔存儲功能,操做起來比較容易上手。
- MongoDB 提供了複製、高可用性和自動分片功能。若是負載增長(須要更多的存儲空間和更強的處理能力),它能夠分佈在計算機網絡中的其餘節點上,這就是所謂的分片。
- Mongo 支持豐富的查詢表達式。查詢指令使用 JSON 形式的標記,可輕易查詢文檔中內嵌的對象及數組。
- MongoDB 支持各類編程語言:Ruby、Python、Java、C++、PHP、C# 等各類語言。
MongoDB 能夠爲 Web 應用提供可拓展的高性能數據存儲解決方案。MongoDB 主要適用領域有網站數據、分佈式場景、數據緩存和 JSON 文檔格式存儲。適合大數據量、高併發、弱事務的互聯網應用,其內置的水平拓展機制提供了從幾百萬到十億級別的數據處理能力,能夠很好地知足 Web2.0 和移動互聯網應用數據存儲的要求。ios
MongoDB 提供了 Linux 平臺上的安裝包,能夠從官方網站 http://www.mongodb.org/downloads 下載。本次咱們選擇使用最新版 MongoDB4.0 來安裝並實驗。mongodb
下載 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 #數據存儲目錄 logpath=/data/logs/mongodb/mongodb1.log #日誌文件 port=27017 #默認服務器端口 logappend=true #使用追加方式寫日誌 fork=true #後臺運行 maxConns=5000 #最大同時鏈接數,默認2000 storageEngine=mmapv1 #指定存儲引擎爲內存映射文件
設置內核參數編程
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
設置系統環境變量,方便使用vim
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數據庫,如果不指定端口默認進27017端口
cd /usr/local/mongodb/ cp mongodb1.conf mongodb2.conf vim mongodb2.conf #修改以下 # dbpath=/data/mongodb2 #數據存儲目錄 # logpath=/data/logs/mongodb/mongodb2.log #日誌文件 # port=27018 #默認服務器端口 # logappend=true #使用追加方式寫日誌 # fork=true #後臺運行 # maxConns=5000 #最大同時鏈接數,默認2000 # storageEngine=mmapv1 #指定存儲引擎爲內存映射文件 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 的邏輯結構主要由文檔(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字段設置爲主鍵 |
登陸、退出安全
#本地登陸(默認實例端口號:--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()
選項:
1 : -h 指定Mongodb所在服務器的地址也能夠指定端口。(例:-h 127.0.0.1:27017)
2 : -d :須要備份的數據庫實例。
3 : -o :備份數據存放的目錄 該目錄需提早建立。
複製數據庫
> db.copyDatabase("db1","db2") //複製數據庫db1 到db2 中
# mongo --port 27018 # db.runCommand({"cloneCollection":"db1.info","from":"localhost:27017"})
MongoDB 安全管理主要包括 MongoDB 的安全訪問控制以及用戶權限分配。
限定監聽特定 IP 和端口
# vim /usr/local/mongodb/mongodb1.conf # 只綁定內網卡地址 bind_ip=localhost(ip) # 只監聽指定的端口 port=27017
超級用戶角色: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.conf auth=true //添加
> db.currentOp()
> db.killOp(opid)
> db.serverStatus()
> db.status()
> db.users.status()
> db.users.dataSize()
此外,咱們能夠經過 Web 界面查看系統監控信息,只須要修改配置文件
# vim /usr/local/mongodb/mongodb1.conf httpinterface=true //添加
經過 Web 頁面能夠看到:
1)當前 MongoDB 的全部鏈接
2)各個數據庫和集合的訪問統計,包括:Reads、Writes、Queries、GetMores、Inserts、Updates、Removes
3)寫鎖的狀態
4)日誌文件的最後幾百行
5)全部的 MongoDB 命令