MongoDB 安裝配置 及學(xué)習(xí)筆記

[TOC]
未完更新中...

1. MongoDB安裝及配置

  1. 官網(wǎng)下載地址
  2. 安裝msc文件,現(xiàn)在3.4的版本,有了msc,所以沒有選擇zip格式安裝包,安裝過程選擇customer,選擇安裝地址,安裝目錄盡量簡化,其他就是下一步,安裝很簡單
  3. 我的安裝目錄是 C:\MongoDB\Server,在目錄下新建名字為: "db" 的文件夾,在db目錄下,新建名為:"logs"的文件夾
  4. 在主目錄下,新建名為: "mongo.conf" 的文件,把下邊內(nèi)容黏貼并修改
  5. 修改系統(tǒng)環(huán)境變量,在"Path"系統(tǒng)環(huán)境變量里,添加 "C:\MongoDB\Server\bin",注意增加分號";"
  6. 添加為自啟動系統(tǒng)服務(wù) mongod --config C:\MongoDB\Server\mongo.conf --install --serviceName "MongoDB"
  7. win+r 打開運行 輸入 services.msc 可以查看 MongoDB服務(wù), net start MongoDB 可以開啟 net stop MongoDB 可以關(guān)閉

普通啟動 通過瀏覽器 localhost:27017 打開查看

mongod --config C:\MongoDB\Server\mongodb.conf

安裝為Windows服務(wù)
注:2.6版 這種方式在win7摆马、win8 64位版無法安裝成功涎跨,其他系統(tǒng)未測試

mongod --config C:\MongoDB\Server\mongodb.conf --install --serviceName "MongoDB"

使用SC安裝為Windows服務(wù)

sc create MongoDB binPath= "C:\MongoDB\Server\bin\mongod.exe --service --config=D:\MongoDB\etc\mongodb.conf"

查看端口占用 netstat -ano|findstr 27017

查看進程名 tasklist |finstr 14308

殺掉進程pid taskkill /pid 14308 -t -f

mongo.conf文件內(nèi)容:

dbpath=C:\MongoDB\Server\db #數(shù)據(jù)庫路徑
logpath=C:\MongoDB\Server\db\log\mongo.log #日志輸出文件路徑
logappend=true #錯誤日志采用追加模式剃斧,配置這個選項后mongodb的日志會追加到現(xiàn)有的日志文件,而不是從新創(chuàng)建一個新文件
journal=true #啟用日志文件,默認啟用
quiet=false #這個選項可以過濾掉一些無用的日志信息淤井,若需要調(diào)試使用請設(shè)置為false
port=27017 #端口號 默認為27017

2. 什么是MongoDB ?

  1. MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。
  2. 在高負載的情況下邓线,添加更多的節(jié)點,可以保證服務(wù)器性能煌恢。
  3. MongoDB 旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案褂痰。
  4. MongoDB 將數(shù)據(jù)存儲為一個文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成症虑。MongoDB 文檔類似于 JSON 對象缩歪。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組谍憔。

3. 主要特點

  1. MongoDB的提供了一個面向文檔存儲匪蝙,操作起來比較簡單和容易。
  2. 你可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現(xiàn)更快的排序习贫。
  3. 你可以通過本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像逛球,這使得MongoDB有更強的擴展性。
  4. 如果負載的增加(需要更多的存儲空間和更強的處理能力) 苫昌,它可以分布在計算機網(wǎng)絡(luò)中的其他節(jié)點上這就是所謂的分片颤绕。
  5. Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記祟身,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組奥务。
  6. MongoDb 使用update()命令可以實現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。
  7. Mongodb中的Map/reduce主要是用來對數(shù)據(jù)進行批量處理和聚合操作袜硫。
  8. Map和Reduce氯葬。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進行處理婉陷。
  9. Map函數(shù)和Reduce函數(shù)是使用Javascript編寫的帚称,并可以通過db.runCommand或mapreduce命令來執(zhí)行MapReduce操作。
  10. GridFS是MongoDB中的一個內(nèi)置功能秽澳,可以用于存放大量小文件闯睹。
  11. MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個函數(shù)担神,直接在服務(wù)端執(zhí)行楼吃,也可以把函數(shù)的定義存儲在服務(wù)端,下次直接調(diào)用即可。
  12. MongoDB支持各種編程語言:RUBY所刀,PYTHON衙荐,JAVA,C++浮创,PHP忧吟,C#等多種語言。
  13. MongoDB安裝簡單

4. 概念解析

sql database nosql 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字段設(shè)置為主鍵

5. 創(chuàng)建數(shù)據(jù)庫

  • 創(chuàng)建/使用 use info # info是數(shù)據(jù)庫名稱,以下凡是用到info的都是泛指數(shù)據(jù)庫的名稱
  • 查看 show dbs
  • 查看當(dāng)前使用 db

6. 刪除數(shù)據(jù)庫

  • 刪除數(shù)據(jù)庫 db.dropDatabase()
  • 刪除集合 db.info.drop()

6. 插入文檔

  • insert方式 db.info.insert({a:"a",b:1})
  • document方式
    • document=({a:"a",b:1})
    • db.info.insert(document)

7. 更新文檔

  • update方式 db.info.update({a:"a",b:1},{$set:{a:"b",b:1}})
  • update多條記錄方式 db.info.update({a:"a",b:1},{$set:{a:"b",b:1}},{multi:"true"})
  • save方式 db.info.save({"_id" : ObjectId("56064f89ade2f21f36b03136"), a:"b"})

更多實例

只更新第一條記錄:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

只添加第一條:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

全部添加加進去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

只更新第一條記錄:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

8. 刪除文檔

  • remove刪除多條 db.info.remove({a:1})
  • remove刪除1條 db.info.remove({a:1},1)

9. 查詢文檔

  • find方式 db.info.find()
  • find易讀方式 db.info.find().pretty()

MongoDB 與 RDBMS Where 語句比較

如果你熟悉常規(guī)的 SQL 數(shù)據(jù)斩披,通過下表可以更好的理解 MongoDB 的條件語句查詢:

操作 格式 范例 RDBMS中的類似語句
等于 {<key>:<value>} db.col.find({"by":"菜鳥教程"}).pretty() where by = '菜鳥教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
  • MongoDB AND 條件
    • db.col.find({"by":"菜鳥教程", "title":"MongoDB 教程"}).pretty()
  • MongoDB OR 條件
    • db.col.find({$or:[{"by":"菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty()
  • AND 和 OR 聯(lián)合使用
    • db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty()

10. 條件操作符

  • 先插入測試數(shù)據(jù)三條
    db.col.insert({title:"a",likes:200})
    db.col.insert({title:"a",likes:100})
    db.col.insert({title:"a",likes:300})
  • 使用find()查找
    db.col.find({likes:{$gt:200}}) 大于
    db.col.find({likes:{$gte:200}}) 大于等于
    db.col.find({likes:{$lt:200}}) 小于
    db.col.find({likes:{$lte:200}}) 小于等于

11. $type操作符

$type操作符是基于BSON類型來檢索集合中匹配的數(shù)據(jù)類型溜族,并返回結(jié)果。

MongoDB 中可以使用的類型如下表所示:

類型 數(shù)字 備注
Double 1
String 2
Object 3
Array 4
Binary data 5
Undefined 6 已廢棄垦沉。
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 13
Symbol 14
JavaScript (with scope) 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255 Query with -1.
Max key 127
  1. 先插入測試數(shù)據(jù)三條
db.col.remove({})  # 清空數(shù)據(jù)集合
db.col.insert({title:"a",likes:200})
db.col.insert({title:1,likes:100})
db.col.insert({title:[1,2],likes:300})
  1. 使用$type查找string數(shù)據(jù)
db.col.find({title:{$type:1}})  # 1標識tuple 結(jié)果 1, [1,2] 兩條
db.col.find({title:{$type:2}})  # 2標識字符串 "a" 一條
db.col.find({title:{$type:3}})  # 4標識Array 沒有結(jié)果

12. Limit與Skip方法

db.col.find({title:"a"}).limit(1)  # 顯示1條
db.col.find({title:"a"}).limit(1).skip(1)  # 顯示1條 跳過1條

補充說明:

  1. db.col.find({},{"title":1,_id:0}).limit(2)
    • 第一個 {} 放 where 條件煌抒,為空表示返回集合中所有文檔。
    • 第二個 {} 指定那些列顯示和不顯示 (0表示不顯示 1表示顯示)
  2. 想要讀取從 10 條記錄后 100 條記錄厕倍,相當(dāng)于 sql 中l(wèi)imit (10,100)寡壮。
    • db.COLLECTION_NAME.find().skip(10).limit(100)
    • 以上實例在集合中跳過前面 10 條返回 100 條數(shù)據(jù)。
    • skip 和 limit 結(jié)合就能實現(xiàn)分頁讹弯。
  3. 當(dāng)查詢時同時使用sort,skip,limit况既,無論位置先后,最先執(zhí)行順序 sort再skip再limit组民。

13. sort排序

db.col.find().sort({like:1})  # like字段正序
db.col.find().sort({like:-1})  # like字段倒序

14. ensureIndex()索引

db.col.ensureIndex({"title":1})  # 1正序 -1倒序
db.col.ensureIndex({"title":1,"description":-1})  # 多字段索引
db.values.ensureIndex({open: 1, close: 1}, {background: true})  # background后臺創(chuàng)建

ensureIndex() 接收可選參數(shù)棒仍,可選參數(shù)列表如下:

Parameter Type Description
background Boolean 建索引過程會阻塞其它數(shù)據(jù)庫操作,background可指定以后臺方式創(chuàng)建索引臭胜,即增加 "background" 可選參數(shù)莫其。 "background" 默認值為false。
unique Boolean 建立的索引是否唯一耸三。指定為true創(chuàng)建唯一索引乱陡。默認值為false.
name string 索引的名稱。如果未指定吕晌,MongoDB的通過連接索引的字段名和排序順序生成一個索引名稱蛋褥。
dropDups Boolean 在建立唯一索引時是否刪除重復(fù)記錄,指定 true 創(chuàng)建唯一索引。默認值為 false.
sparse Boolean 對文檔中不存在的字段數(shù)據(jù)不啟用索引睛驳;這個參數(shù)需要特別注意,如果設(shè)置為true的話膜廊,在索引字段中不會查詢出不包含對應(yīng)字段的文檔.乏沸。默認值為 false.
expireAfterSeconds integer 指定一個以秒為單位的數(shù)值,完成 TTL設(shè)定爪瓜,設(shè)定集合的生存時間蹬跃。
v index version 索引的版本號。默認的索引版本取決于mongod創(chuàng)建索引時運行的版本。
weights document 索引權(quán)重值蝶缀,數(shù)值在 1 到 99,999 之間丹喻,表示該索引相對于其他索引字段的得分權(quán)重。
default_language string 對于文本索引翁都,該參數(shù)決定了停用詞及詞干和詞器的規(guī)則的列表碍论。 默認為英語
language_override string 對于文本索引,該參數(shù)指定了包含在文檔中的字段名柄慰,語言覆蓋默認的language鳍悠,默認值為 language.

15. 聚合

1. 插入數(shù)據(jù)
db.mycol.insert({user_name:"wy",age:2})
db.mycol.insert({user_name:"wy",age:3})
db.mycol.insert({user_name:"sg",age:4})
db.mycol.insert({user_name:"sg",age:5})
2. aggregate()計算結(jié)果如下
db.mycol.aggregate([{$group:{_id:"$user_name",num_tutorial:{$sum:"$age"}}}])
# $group 是分組顯示, _id 是分組依據(jù)字段的key,"$user_name" 是分組的具體字段,$sum 是求和, "$age" 是具體求和的字段
# 類似于 mysql: select user_name,count(age) from mycol group by user_name;
表達式 描述 實例
$sum 計算總和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 計算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 獲取集合中所有文檔對應(yīng)值得最小值坐搔。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 獲取集合中所有文檔對應(yīng)值得最大值藏研。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在結(jié)果文檔中插入值到一個數(shù)組中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在結(jié)果文檔中插入值到一個數(shù)組中概行,但不創(chuàng)建副本蠢挡。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根據(jù)資源文檔的排序獲取第一個文檔數(shù)據(jù)。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根據(jù)資源文檔的排序獲取最后一個文檔數(shù)據(jù) db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道的概念

管道在Unix和Linux中一般用于將當(dāng)前命令的輸出結(jié)果作為下一個命令的參數(shù)凳忙。

MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢后將結(jié)果傳遞給下一個管道處理业踏。管道操作是可以重復(fù)的。

表達式:處理輸入文檔并輸出消略。表達式是無狀態(tài)的堡称,只能用于計算當(dāng)前聚合管道的文檔,不能處理其它的文檔艺演。

這里我們介紹一下聚合框架中常用的幾個操作:

$project:修改輸入文檔的結(jié)構(gòu)却紧。可以用來重命名胎撤、增加或刪除域晓殊,也可以用于創(chuàng)建計算結(jié)果以及嵌套文檔。
$match:用于過濾數(shù)據(jù)伤提,只輸出符合條件的文檔巫俺。$match使用MongoDB的標準查詢操作。
$limit:用來限制MongoDB聚合管道返回的文檔數(shù)肿男。
$skip:在聚合管道中跳過指定數(shù)量的文檔介汹,并返回余下的文檔。
$unwind:將文檔中的某一個數(shù)組類型字段拆分成多條舶沛,每條包含數(shù)組中的一個值嘹承。
$group:將集合中的文檔分組,可用于統(tǒng)計結(jié)果如庭。
$sort:將輸入文檔排序后輸出叹卷。
$geoNear:輸出接近某一地理位置的有序文檔。

管道操作符實例

1、$project實例

db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);

這樣的話結(jié)果中就只還有_id,tilte和author三個字段了骤竹,默認情況下_id字段是被包含的帝牡,如果要想不包含_id話可以這樣:

db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});

2.$match實例

db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );

$match用于獲取分數(shù)大于70小于或等于90記錄,然后將符合條件的記錄送到下一階段$group管道操作符進行處理蒙揣。

3.$skip實例

db.article.aggregate(
{ $skip : 5 });

經(jīng)過$skip管道操作符處理后靶溜,前五個文檔被"過濾"掉。

筆記列表

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

以上實例類似sql語句:

select by_user as _id, count(*) as num_tutorial from mycol group by by_user

db.articles.aggregate({
    $project : {
        title: 2,
        by_user: 1,
    }
})

這樣子也是可行的鸣奔。也就是說非0也可以進行表示顯示該字段,負數(shù)也可以表示顯示該字段墨技。

16. MongoDB復(fù)制原理

MongoDB復(fù)制原理

mongodb的復(fù)制至少需要兩個節(jié)點。其中一個是主節(jié)點挎狸,負責(zé)處理客戶端請求扣汪,其余的都是從節(jié)點,負責(zé)復(fù)制主節(jié)點上的數(shù)據(jù)锨匆。

mongodb各個節(jié)點常見的搭配方式為:一主一從崭别、一主多從。

主節(jié)點記錄在其上的所有操作oplog恐锣,從節(jié)點定期輪詢主節(jié)點獲取這些操作茅主,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致土榴。

副本集特征:

  • N 個節(jié)點的集群
  • 任何節(jié)點可作為主節(jié)點
  • 所有寫入操作都在主節(jié)點上
  • 自動故障轉(zhuǎn)移
  • 自動恢復(fù)

實例:

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0

以上實例會啟動一個名為rs0的MongoDB實例诀姚,其端口號為27017。
啟動后打開命令提示框并連接上mongoDB服務(wù)玷禽。
在Mongo客戶端使用命令rs.initiate()來啟動一個新的副本集赫段。
我們可以使用rs.conf()來查看副本集的配置
查看副本集狀態(tài)使用 rs.status() 命令

假設(shè)你已經(jīng)啟動了一個名為mongod1.net,端口號為27017的Mongo服務(wù)矢赁。 在客戶端命令窗口使用rs.add() 命令將其添加到副本集中糯笙,命令如下所示:

rs.add("mongod1.net:27017")

MongoDB中你只能通過主節(jié)點將Mongo服務(wù)添加到副本集中, 判斷當(dāng)前運行的Mongo服務(wù)是否為主節(jié)點可以使用命令db.isMaster() 撩银。
MongoDB的副本集與我們常見的主從有所不同给涕,主從在主機宕機后所有服務(wù)將停止,而副本集在主機宕機后额获,副本會接管主節(jié)點成為主節(jié)點够庙,不會出現(xiàn)宕機的情況。

17. MongoDB 分片

分片

在Mongodb里面存在另一種集群抄邀,就是分片技術(shù),可以滿足MongoDB數(shù)據(jù)量大量增長的需求首启。

當(dāng)MongoDB存儲海量的數(shù)據(jù)時,一臺機器可能不足以存儲數(shù)據(jù)撤摸,也可能不足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多臺機器上分割數(shù)據(jù)准夷,使得數(shù)據(jù)庫系統(tǒng)能存儲和處理更多的數(shù)據(jù)钥飞。
為什么使用分片

復(fù)制所有的寫入操作到主節(jié)點
延遲的敏感數(shù)據(jù)會在主節(jié)點查詢
單個副本集限制在12個節(jié)點
當(dāng)請求量巨大時會出現(xiàn)內(nèi)存不足。
本地磁盤不足
垂直擴展價格昂貴

MongoDB分片

下圖展示了在MongoDB中使用分片集群結(jié)構(gòu)分布:

上圖中主要有如下所述三個主要組件:

Shard:

用于存儲實際的數(shù)據(jù)塊衫嵌,實際生產(chǎn)環(huán)境中一個shard server角色可由幾臺機器組個一個replica set承擔(dān)读宙,防止主機單點故障

Config Server:

mongod實例,存儲了整個 ClusterMetadata楔绞,其中包括 chunk信息结闸。

Query Routers:

前端路由,客戶端由此接入酒朵,且讓整個集群看上去像單一數(shù)據(jù)庫桦锄,前端應(yīng)用可以透明使用。

分片實例

分片結(jié)構(gòu)端口分布如下:

Shard Server 1:27020
Shard Server 2:27021
Shard Server 3:27022
Shard Server 4:27023
Config Server :27100
Route Process:40000

步驟一:啟動Shard Server

[root@100 /]# mkdir -p /www/mongoDB/shard/s0
[root@100 /]# mkdir -p /www/mongoDB/shard/s1
[root@100 /]# mkdir -p /www/mongoDB/shard/s2
[root@100 /]# mkdir -p /www/mongoDB/shard/s3
[root@100 /]# mkdir -p /www/mongoDB/shard/log
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork
....
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork

步驟二: 啟動Config Server

[root@100 /]# mkdir -p /www/mongoDB/shard/config
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork

注意:這里我們完全可以像啟動普通mongodb服務(wù)一樣啟動蔫耽,不需要添加—shardsvr和configsvr參數(shù)结耀。因為這兩個參數(shù)的作用就是改變啟動端口的,所以我們自行指定了端口就可以匙铡。

步驟三: 啟動Route Process

/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500

mongos啟動參數(shù)中图甜,chunkSize這一項是用來指定chunk的大小的,單位是MB鳖眼,默認大小為200MB.

步驟四: 配置Sharding

接下來黑毅,我們使用MongoDB Shell登錄到mongos,添加Shard節(jié)點

[root@100 shard]# /usr/local/mongoDB/bin/mongo admin --port 40000
MongoDB shell version: 2.0.7
connecting to: 127.0.0.1:40000/admin
mongos> db.runCommand({ addshard:"localhost:27020" })
{ "shardAdded" : "shard0000", "ok" : 1 }
......
mongos> db.runCommand({ addshard:"localhost:27029" })
{ "shardAdded" : "shard0009", "ok" : 1 }
mongos> db.runCommand({ enablesharding:"test" }) #設(shè)置分片存儲的數(shù)據(jù)庫
{ "ok" : 1 }
mongos> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
{ "collectionsharded" : "test.log", "ok" : 1 }

步驟五: 程序代碼內(nèi)無需太大更改钦讳,直接按照連接普通的mongo數(shù)據(jù)庫那樣矿瘦,將數(shù)據(jù)庫連接接入接口40000

18. MongoDB 備份(mongodump)與恢復(fù)(mongorestore)

MongoDB數(shù)據(jù)備份

在Mongodb中我們使用mongodump命令來備份MongoDB數(shù)據(jù)。該命令可以導(dǎo)出所有數(shù)據(jù)到指定目錄中蜂厅。

mongodump命令可以通過參數(shù)指定導(dǎo)出的數(shù)據(jù)量級轉(zhuǎn)存的服務(wù)器匪凡。
語法

mongodump命令腳本語法如下:

mongodump -h dbhost -d dbname -o dbdirectory

-h:

MongDB所在服務(wù)器地址,例如:127.0.0.1掘猿,當(dāng)然也可以指定端口號:127.0.0.1:27017
-d:

需要備份的數(shù)據(jù)庫實例病游,例如:test
-o:

備份的數(shù)據(jù)存放位置,例如:c:\data\dump稠通,當(dāng)然該目錄需要提前建立衬衬,在備份完成后,系統(tǒng)自動在dump目錄下建立一個test目錄改橘,這個目錄里面存放該數(shù)據(jù)庫實例的備份數(shù)據(jù)滋尉。 

實例

在本地使用 27017 啟動你的mongod服務(wù)。打開命令提示符窗口飞主,進入MongoDB安裝目錄的bin目錄輸入命令mongodump:

>mongodump

執(zhí)行以上命令后狮惜,客戶端會連接到ip為 127.0.0.1 端口號為 27017 的MongoDB服務(wù)上高诺,并備份所有數(shù)據(jù)到 bin/dump/ 目錄中。命令輸出結(jié)果如下:

MongoDB數(shù)據(jù)備份

mongodump 命令可選參數(shù)列表如下所示:
語法  描述  實例
mongodump --host HOST_NAME --port PORT_NUMBER   該命令將備份所有MongoDB數(shù)據(jù)   mongodump --host w3cschool.cc --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY       mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME  該命令將備份指定數(shù)據(jù)庫的集合碾篡。 mongodump --collection mycol --db test
MongoDB數(shù)據(jù)恢復(fù)

mongodb使用 mongorestore 命令來恢復(fù)備份的數(shù)據(jù)虱而。
語法

mongorestore命令腳本語法如下:

mongorestore -h <hostname><:port> -d dbname <path>

--host <:port>, -h <:port>:

MongoDB所在服務(wù)器地址,默認為: localhost:27017
--db , -d :

需要恢復(fù)的數(shù)據(jù)庫實例开泽,例如:test牡拇,當(dāng)然這個名稱也可以和備份時候的不一樣,比如test2
--drop:

恢復(fù)的時候穆律,先刪除當(dāng)前數(shù)據(jù)惠呼,然后恢復(fù)備份的數(shù)據(jù)。就是說峦耘,恢復(fù)后剔蹋,備份后添加修改的數(shù)據(jù)都會被刪除,慎用哦贡歧!
<path>:

mongorestore 最后的一個參數(shù)滩租,設(shè)置備份數(shù)據(jù)所在位置,例如:c:\data\dump\test利朵。

你不能同時指定 <path> 和 --dir 選項律想,--dir也可以設(shè)置備份目錄。
--dir:

指定備份的目錄

你不能同時指定 <path> 和 --dir 選項绍弟。

接下來我們執(zhí)行以下命令:

>mongorestore

執(zhí)行以上命令輸出結(jié)果如下:

MongoDB數(shù)據(jù)恢復(fù)

19. MongoDB 監(jiān)控

在你已經(jīng)安裝部署并允許MongoDB服務(wù)后技即,你必須要了解MongoDB的運行情況,并查看MongoDB的性能樟遣。這樣在大流量得情況下可以很好的應(yīng)對并保證MongoDB正常運作而叼。

MongoDB中提供了mongostat 和 mongotop 兩個命令來監(jiān)控MongoDB的運行情況。
mongostat 命令

mongostat是mongodb自帶的狀態(tài)檢測工具豹悬,在命令行下使用葵陵。它會間隔固定時間獲取mongodb的當(dāng)前運行狀態(tài),并輸出瞻佛。如果你發(fā)現(xiàn)數(shù)據(jù)庫突然變慢或者有其他問題的話脱篙,你第一手的操作就考慮采用mongostat來查看mongo的狀態(tài)。

啟動你的Mongod服務(wù)伤柄,進入到你安裝的MongoDB目錄下的bin目錄绊困, 然后輸入mongostat命令,如下所示:

D:\set up\mongodb\bin>mongostat

以上命令輸出結(jié)果如下:
mongotop 命令

mongotop也是mongodb下的一個內(nèi)置工具适刀,mongotop提供了一個方法秤朗,用來跟蹤一個MongoDB的實例,查看哪些大量的時間花費在讀取和寫入數(shù)據(jù)笔喉。 mongotop提供每個集合的水平的統(tǒng)計數(shù)據(jù)取视。默認情況下硝皂,mongotop返回值的每一秒。

啟動你的Mongod服務(wù)贫途,進入到你安裝的MongoDB目錄下的bin目錄吧彪, 然后輸入mongotop命令,如下所示:

D:\set up\mongodb\bin>mongotop

以上命令執(zhí)行輸出結(jié)果如下:

帶參數(shù)實例

E:\mongodb-win32-x86_64-2.2.1\bin>mongotop 10

后面的10是<sleeptime>參數(shù) 丢早,可以不使用,等待的時間長度秧倾,以秒為單位怨酝,mongotop等待調(diào)用之間。通過的默認mongotop返回數(shù)據(jù)的每一秒那先。

E:\mongodb-win32-x86_64-2.2.1\bin>mongotop --locks

報告每個數(shù)據(jù)庫的鎖的使用中农猬,使用mongotop - 鎖,這將產(chǎn)生以下輸出:

輸出結(jié)果字段說明:

ns:

包含數(shù)據(jù)庫命名空間售淡,后者結(jié)合了數(shù)據(jù)庫名稱和集合斤葱。

db:

包含數(shù)據(jù)庫的名稱。名為 . 的數(shù)據(jù)庫針對全局鎖定揖闸,而非特定數(shù)據(jù)庫揍堕。

total:

mongod花費的時間工作在這個命名空間提供總額。

read:

提供了大量的時間汤纸,這mongod花費在執(zhí)行讀操作衩茸,在此命名空間。

write:

提供這個命名空間進行寫操作贮泞,這mongod花了大量的時間楞慈。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市啃擦,隨后出現(xiàn)的幾起案子囊蓝,更是在濱河造成了極大的恐慌,老刑警劉巖令蛉,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聚霜,死亡現(xiàn)場離奇詭異,居然都是意外死亡言询,警方通過查閱死者的電腦和手機俯萎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來运杭,“玉大人夫啊,你說我怎么就攤上這事×俱荆” “怎么了撇眯?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵报嵌,是天一觀的道長。 經(jīng)常有香客問我熊榛,道長锚国,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任玄坦,我火速辦了婚禮血筑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘煎楣。我一直安慰自己豺总,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布择懂。 她就那樣靜靜地躺著喻喳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪困曙。 梳的紋絲不亂的頭發(fā)上表伦,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音慷丽,去河邊找鬼蹦哼。 笑死,一個胖子當(dāng)著我的面吹牛盈魁,可吹牛的內(nèi)容都是我干的翔怎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼杨耙,長吁一口氣:“原來是場噩夢啊……” “哼赤套!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起珊膜,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤容握,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后车柠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剔氏,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年竹祷,在試婚紗的時候發(fā)現(xiàn)自己被綠了谈跛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡塑陵,死狀恐怖感憾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情令花,我是刑警寧澤阻桅,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布凉倚,位于F島的核電站,受9級特大地震影響嫂沉,放射性物質(zhì)發(fā)生泄漏稽寒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一趟章、第九天 我趴在偏房一處隱蔽的房頂上張望杏糙。 院中可真熱鬧,春花似錦尤揣、人聲如沸搔啊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至漫蛔,卻和暖如春嗜愈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背莽龟。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工蠕嫁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毯盈。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓剃毒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搂赋。 傳聞我的和親對象是個殘疾皇子们豌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一蚌堵、MongoDB簡介 1.概述 ? MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫,由C++語言編寫。旨在為WE...
    鄭元吉閱讀 978評論 0 2
  • 客戶端https://robomongo.org/ 連接mongodb://[username:password@...
    加勒比兔Z閱讀 329評論 0 0
  • MongoDB文檔 MongoDB 概念解析 不管我們學(xué)習(xí)什么數(shù)據(jù)庫都應(yīng)該學(xué)習(xí)其中的基礎(chǔ)概念轿亮,在mongodb中基...
    birdflying閱讀 1,993評論 0 27
  • MongoDB簡介 MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫蛤织。旨在為 WEB 應(yīng)用提...
    奮斗的小鳥GO閱讀 683評論 0 4
  • 從前 雪會沒過腳脖子 白花花 晃的睜不開眼 沙沙掃雪聲 驚醒了清晨 父親在院里院外 揮舞著掃帚 如翻弄著一堆堆棉花...
    一團菌閱讀 257評論 8 5