|
mongoDB入門 一、
基礎(chǔ)信息 1. 相關(guān)網(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. 特點(diǎn) a) 無數(shù)據(jù)結(jié)構(gòu)限制 b) 完全的索引支持 c) 方便的冗余與擴(kuò)展
i.
復(fù)制集保證數(shù)據(jù)安全
ii.
分片擴(kuò)展數(shù)據(jù)規(guī)模 d) 完善的文檔支持和驅(qū)動(dòng)支持 B. 相關(guān)工具: 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) 復(fù)制集 6) 分片 7) 數(shù)據(jù)均衡 3. MongoDB數(shù)據(jù)庫搭建 1) 部署數(shù)據(jù)庫 A. 搭建簡(jiǎn)單的單機(jī)服務(wù) B. 搭建具有冗余容錯(cuò)功能的復(fù)制集 C. 搭建大規(guī)模數(shù)據(jù)集群 D. 完成集群的自動(dòng)部署 4. mongoDB的使用 1) 最基本的文檔的讀寫更新刪除 2) 不同類型索引的創(chuàng)建與使用 3) 復(fù)雜的聚合查詢 4) 對(duì)數(shù)據(jù)集合進(jìn)行分片,在不同分片間維持?jǐn)?shù)據(jù)均衡 5) 數(shù)據(jù)備份與恢復(fù) 6) 數(shù)據(jù)遷移 5. 簡(jiǎn)單運(yùn)維 1) 部署MongoDB集群 2) 處理多種常見的故障 A. 單節(jié)點(diǎn)失效,如何恢復(fù)工作 B. 數(shù)據(jù)庫意外被殺死如何進(jìn)行數(shù)據(jù)恢復(fù) C. 數(shù)據(jù)庫發(fā)生拒絕服務(wù)時(shí)如何排查原因 D. 數(shù)據(jù)庫磁盤快滿時(shí)如何處理 二、
安裝與配置 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. 啟動(dòng):./bin/mongod -f
conf/mongod.conf 9. 連接數(shù)據(jù)庫 1) ./bin/mango 127.0.0.1:1234 10. 關(guān)閉數(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ù)庫,沒有則自動(dòng)創(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)
默認(rèn)更新一條,這樣之后更新多條 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. 自動(dòng)生成唯一_id索引 2) 單鍵索引 A. 不會(huì)自動(dòng)創(chuàng)建 B. {x:1,y:2,z:3} 3) 多鍵索引 A. 與單鍵索引創(chuàng)建形式相同,區(qū)別在于字段的值 a) 單鍵索引:值為一個(gè)單一的值,如字符串,數(shù)字或日期 b) 多鍵索引:具有多個(gè)值,例如數(shù)組 4) 復(fù)合索引 A. db.imooc_collectio.ensureIndex({x:1},{y:1}) 5) 過期索引 A. 說明 a) 在一段時(shí)間后會(huì)過期的索引 b) 索引過期后相應(yīng)數(shù)據(jù)會(huì)刪除 c) 登錄信息、存儲(chǔ)的日志等 B. 創(chuàng)建 a) db.imooc_collection.ensureIndex({x:1},{expreAfterSeconds:10}) C. 限制 a) 存儲(chǔ)在過期索引字段的值必須為制定的時(shí)間類型 b) 如果制定了ISODate數(shù)組,則按照最小的時(shí)間進(jìn)行刪除 c) 過期索引不能是符合索引 d) 刪除時(shí)間不精確 6) 全文索引 A. 說明: a) 對(duì)字符串與字符串?dāng)?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:'aa
bb cc'}})空格代表或 c) db.imooc_collectio.find({$test:{$serch:'aa
bb -cc'}})-代表不包含cc d) db.imooc_collectio.find({$test:{$serch:"\"aa\",\"bb\""}})\代表或 E. 相似度 a) {score:{$meta:"textScore"}} b) 寫在查詢條件后面可以返回結(jié)果的相似度 c) 與sort一起使用,可達(dá)到很好的使用效果 F. 使用限制 a) 每次查詢,只能指定一個(gè)$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) 是否定時(shí)刪除:expreAfterSeconds 7) 地理位置索引 A. 概念:將一些點(diǎn)的位置存儲(chǔ)在mongodb中,創(chuàng)建索引后,可以按照位置來查找其他點(diǎn) B. 子分類: a) 2D索引,用于存儲(chǔ)和查找平面上的點(diǎn) b) 2dsphere索引,用于存儲(chǔ)和查找球面上的點(diǎn) C. 查找方式 a) 查找距離某個(gè)點(diǎn)一定距離內(nèi)的點(diǎn) b) 查找包含在某區(qū)域內(nèi)的點(diǎn) 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:描述一個(gè)點(diǎn),一條直線,多邊形等 c) 格式:
i.
{type:"",coorddinates:[<coorddinates>]} F. 查詢方式 a) $near:查詢距離某個(gè)點(diǎn)最近的點(diǎn),用$maxDistanse表示最遠(yuǎn)距離(2d索引不支持) b) $geoWithin:查詢某個(gè)形狀內(nèi)的點(diǎn) c) geoNear查詢:
i.
使用runCommand命令進(jìn)行使用 d) 形狀的表示
i.
矩形{$box:[[<x1>,<y1>],[<x2>,<y2>]}
ii.
圓形{$center:[[<x1>,<y1>],r]}
iii.
多邊形{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x2>,<y2>]} 五、
索引構(gòu)建情況分析 1. 優(yōu)點(diǎn) 1) 加快索引相關(guān)查詢 2. 缺點(diǎn) 1) 增加磁盤空間消耗,降低寫入性能 3. 評(píng)判當(dāng)前索引構(gòu)建情況 1) mongostat工具 A. 查看運(yùn)行狀態(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)實(shí) 2) 網(wǎng)絡(luò)隔離 3) 防護(hù)墻隔離 4) 用戶名密碼 A. auth=true開啟權(quán)限 a) 創(chuàng)建用戶|角色 User|Role
i.
createUser createRole
ii.
用戶角色詳解 a) 數(shù)據(jù)庫角色
read,readWrite,dbAdmin.dbOwner,userAdmin b) 集群角色
clusterAdmin,clusterManager c) 備份角色 backup,restore d) 特殊權(quán)限 DBAdminAnyDatabase |
|
|