mongoDB入門
一、 基礎信息
1. 相關網(wǎng)站
1) www.mongodb.org
2) www.mongoing.com
3) docs.mongoing.com/manual-zh/
4) www.github.com/mongodb
5) jira.mongodb.org
2. mangoDb的概念
1) MangoDB
A. 特點
a) 無數(shù)據(jù)結構限制
b) 完全的索引支持
c) 方便的冗余與擴展
i. 復制集保證數(shù)據(jù)安全
ii. 分片擴展數(shù)據(jù)規(guī)模
d) 完善的文檔支持和驅動支持
B. 相關工具:
a) 環(huán)境:64位linux
b) 版本:
c) ssh工具:xshell
d) 文本編輯器:vim與notepad++
C. 編譯mongodb文件
a) 解壓后執(zhí)行scons all -j 12
2) mongo
3) 索引
4) 集合
5) 復制集
6) 分片
7) 數(shù)據(jù)均衡
3. MongoDB數(shù)據(jù)庫搭建
1) 部署數(shù)據(jù)庫
A. 搭建簡單的單機服務
B. 搭建具有冗余容錯功能的復制集
C. 搭建大規(guī)模數(shù)據(jù)集群
D. 完成集群的自動部署
4. mongoDB的使用
1) 最基本的文檔的讀寫更新刪除
2) 不同類型索引的創(chuàng)建與使用
3) 復雜的聚合查詢
4) 對數(shù)據(jù)集合進行分片,在不同分片間維持數(shù)據(jù)均衡
5) 數(shù)據(jù)備份與恢復
6) 數(shù)據(jù)遷移
5. 簡單運維
1) 部署MongoDB集群
2) 處理多種常見的故障
A. 單節(jié)點失效,如何恢復工作
B. 數(shù)據(jù)庫意外被殺死如何進行數(shù)據(jù)恢復
C. 數(shù)據(jù)庫發(fā)生拒絕服務時如何排查原因
D. 數(shù)據(jù)庫磁盤快滿時如何處理
二、 安裝與配置
1. mkdir mongodb_simple
2. cd mongodb_simple
3. mkdir data
4. mkdir log
5. mkdir conf
6. mkdir bin
7. 配置文件
1) port=12345
2) dbpath=data
3) logpath=log/mongod.log
4) fork=true
8. 啟動:./bin/mongod -fconf/mongod.conf
9. 連接數(shù)據(jù)庫
1) ./bin/mango 127.0.0.1:1234
10. 關閉數(shù)據(jù)庫
1) db.shutdownServer()
11. 查看日志
1) tail -f log/mongod.log
三、 數(shù)據(jù)庫操作
1. 連接數(shù)據(jù)庫
1) .bin/mango 127.0.0.1:12345
2. 顯示數(shù)據(jù)庫
1) show dbs
3. 使用數(shù)據(jù)庫,沒有則自動創(chuàng)建
1) use imooc
4. 刪除數(shù)據(jù)庫
1) db.dropDatabase()
5. 插入數(shù)據(jù)
1) db.imooc_collection.insert({x:1})
2) for(i=3;i<100,i++)db.imooc_collection.insert({x:i})
6. 顯示表
1) show collection
7. 查詢
1) db.imooc_collection.find()
2) db.imooc_collection.find({x:1})
3) db.imooc_collection.find().count()
4) db.imooc_collection.find().skip(3).limit(2)sort({x:1})
8. 更新
1) db.imooc_collectio.update({x:1},{x:999})
2) db.imooc_collectio.update({z:100},{$set:{y:999}})$set部分更新符
3) db.imooc_collectio.update({z:100},{z:999},true)改數(shù)據(jù)不存在則新增
4) db.imooc_collectio.update({z:100},{$set{z:999}},false,true)默認更新一條,這樣之后更新多條
9. 刪除remove
1) db.imooc_collectio.remove({x:1})
10. 索引
1) 查看索引
A. db.imooc_collectio.getIndexes()
2) 創(chuàng)建索引
A. db.imooc_collectio.ensureIndex({x:1})
四、 常見索引
1. 索引的種類
1) _id索引
A. 自動生成唯一_id索引
2) 單鍵索引
A. 不會自動創(chuàng)建
B. {x:1,y:2,z:3}
3) 多鍵索引
A. 與單鍵索引創(chuàng)建形式相同,區(qū)別在于字段的值
a) 單鍵索引:值為一個單一的值,如字符串,數(shù)字或日期
b) 多鍵索引:具有多個值,例如數(shù)組
4) 復合索引
A. db.imooc_collectio.ensureIndex({x:1},{y:1})
5) 過期索引
A. 說明
a) 在一段時間后會過期的索引
b) 索引過期后相應數(shù)據(jù)會刪除
c) 登錄信息、存儲的日志等
B. 創(chuàng)建
a) db.imooc_collection.ensureIndex({x:1},{expreAfterSeconds:10})
C. 限制
a) 存儲在過期索引字段的值必須為制定的時間類型
b) 如果制定了ISODate數(shù)組,則按照最小的時間進行刪除
c) 過期索引不能是符合索引
d) 刪除時間不精確
6) 全文索引
A. 說明:
a) 對字符串與字符串數(shù)組創(chuàng)建全文可搜索索引
B. 使用情況:
a) {author:"",title:""}
C. 創(chuàng)建方法
a) db.imooc_collectio.ensureIndex({k:"text"})
b) db.imooc_collectio.ensureIndex({k_1:"text",k_2:"text"})
c) db.imooc_collectio.ensureIndex({"$**":"text"})
D. 查詢:
a) db.imooc_collectio.find({$test:{$serch:'aa'}})
b) db.imooc_collectio.find({$test:{$serch:'aabb cc'}})空格代表或
c) db.imooc_collectio.find({$test:{$serch:'aabb -cc'}})-代表不包含cc
d) db.imooc_collectio.find({$test:{$serch:"\"aa\",\"bb\""}})\代表或
E. 相似度
a) {score:{$meta:"textScore"}}
b) 寫在查詢條件后面可以返回結果的相似度
c) 與sort一起使用,可達到很好的使用效果
F. 使用限制
a) 每次查詢,只能指定一個$text查詢
b) $text查詢不能出現(xiàn)在$nor查詢中
c) 查詢中包含$text,hint不再起作用
d) 不支持中文
G. 索引屬性
a) 名字 name
i. db.imooc_collectio.ensureIndex({},{name:"text"})
b) 唯一性 unique
i. db.imooc_collectio.ensureIndex({},{unique:true/false})
c) 稀疏性 sparse
i. db.imooc_collectio.ensureIndex({},{sparse:true/false})
ii. db.imooc_collectio.ensureIndex({m,{$exists:true}})
d) 是否定時刪除:expreAfterSeconds
7) 地理位置索引
A. 概念:將一些點的位置存儲在mongodb中,創(chuàng)建索引后,可以按照位置來查找其他點
B. 子分類:
a) 2D索引,用于存儲和查找平面上的點
b) 2dsphere索引,用于存儲和查找球面上的點
C. 查找方式
a) 查找距離某個點一定距離內(nèi)的點
b) 查找包含在某區(qū)域內(nèi)的點
D. 2d索引:
a) 創(chuàng)建:
i. db.imooc_collectio.ensureIndex({w:"2d"})
b) 位置表示方式:經(jīng)緯度
c) 取值范圍:精度[-180,180],維度[-90,90]
E. 2dsphere索引
a) 創(chuàng)建:
i. db.imooc_collectio.ensureIndex({w:"2dsphere"})
b) 位置表示方式:
i. GeoJson:描述一個點,一條直線,多邊形等
c) 格式:
i. {type:"",coorddinates:[<coorddinates>]}
F. 查詢方式
a) $near:查詢距離某個點最近的點,用$maxDistanse表示最遠距離(2d索引不支持)
b) $geoWithin:查詢某個形狀內(nèi)的點
c) geoNear查詢:
i. 使用runCommand命令進行使用
d) 形狀的表示
i. 矩形{$box:[[<x1>,<y1>],[<x2>,<y2>]}
ii. 圓形{$center:[[<x1>,<y1>],r]}
iii. 多邊形{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x2>,<y2>]}
五、 索引構建情況分析
1. 優(yōu)點
1) 加快索引相關查詢
2. 缺點
1) 增加磁盤空間消耗,降低寫入性能
3. 評判當前索引構建情況
1) mongostat工具
A. 查看運行狀態(tài)的程序
B. 使用說明:
a) mongostat -h 127.0.0.1:12345
2) profile工具
A. db.getProfilingStatus()
B. db.getProfilingLevel()
C. db.setProfilingLevel()
D. ...
E. db.system.profile.find().sort({$natural:-1}).limit(1)
3) 日志
A. 配置verbose=vvvvv
4) explain分析
A. db.find({x:1}).explain()
六、 mongoDB安全
1. 安全概覽
1) 最安全的是物理隔離:不現(xiàn)實
2) 網(wǎng)絡隔離
3) 防護墻隔離
4) 用戶名密碼
A. auth=true開啟權限
a) 創(chuàng)建用戶|角色 User|Role
i. createUser createRole
ii. 用戶角色詳解
a) 數(shù)據(jù)庫角色read,readWrite,dbAdmin.dbOwner,userAdmin
b) 集群角色clusterAdmin,clusterManager
c) 備份角色 backup,restore
d) 特殊權限 DBAdminAnyDatabase
聯(lián)系客服