日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

支持海量数据的 MongoDB NoSQL

發(fā)布時(shí)間:2023/12/19 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 支持海量数据的 MongoDB NoSQL 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于這個(gè)速查卡

MongoDB是一個(gè)文檔型數(shù)據(jù)庫,它可以方便的應(yīng)用于大多數(shù)語言。這個(gè)小清單列出了MongoDB經(jīng)常使用和容易忘記的一些操作,命令和技術(shù)。

配置選項(xiàng)

安裝選項(xiàng)

啟動(dòng)MongoDB的選項(xiàng)可以通過命令行或者配置文件設(shè)置,兩者的語法稍微有點(diǎn)不同,這里有一個(gè)三種選項(xiàng)的設(shè)置例子:

命令行配置文件
--dbpath /path/to/dbdbpath=/path/to/db
--authauth=true
-vvvvvv=true

在mongod下運(yùn)行--help可以列出所有的操作選項(xiàng),但是這里我們列出了一些最常用的:

操作選項(xiàng)描述
--config /path/to/config指定其他配置選項(xiàng)的配置文件.
--dbpath /path/to/data數(shù)據(jù)存儲目錄.
--port 27017監(jiān)聽端口號.
--logpath /path/to/file.log日志輸出文件,這是個(gè)明確的文件路徑,不是目錄.
--logappend重啟后,以追加的方式創(chuàng)建日志防止把之前的日志刪除了。在使用--logpath時(shí)總是開啟.
--fork把mongod配置為守護(hù)進(jìn)程.
--auth單個(gè)服務(wù)器的安全驗(yàn)證.
--keyFile /path/to/key.txt副本集和分片時(shí)安全驗(yàn)證,需要使用一個(gè)路徑共享密鑰。
--nohttpinterface關(guān)閉http訪問接口
--bind_ip address只允許指定的網(wǎng)絡(luò)ip訪問.

如果想安全的啟動(dòng)mongod,就要使用nohttpinterface和bind_ip操作選項(xiàng),確定外網(wǎng)不能直接訪問。尤其確保你沒有其余的選項(xiàng)啟動(dòng),MongoDB需要以下網(wǎng)絡(luò)環(huán)境可以訪問:

  • 單個(gè)服務(wù)器?- 客戶端程序可以獲取訪問連接
  • 副本集?- 任何成員集能夠訪問,包括自己;客戶端能夠訪問任何一個(gè)成員集,并且可訪問的成員集都能夠成為主節(jié)點(diǎn)(活躍節(jié)點(diǎn)).
  • 分片- mongos進(jìn)程必須能夠連接到配置的服務(wù)器和分片,分片必須能夠彼此連接??蛻舳顺绦虮仨毮軌蜻B接到mongos進(jìn)程。配置服務(wù)器沒必要彼此提供訪問連接的支持。

所有的連接都是通過tcp建立的.

繆斯的情人
翻譯于 2天前

6人頂

頂?翻譯的不錯(cuò)哦!

其它翻譯版本(2)

查看配置

如果你6個(gè)月前啟動(dòng)mongod時(shí)做了一堆配置,那么現(xiàn)在你如何知道做了什么配置呢?這里提供了一個(gè)shell小助手:

> db.serverCmdLineOpts() { "argv" : [ "./mongod", "--port", "30000" ], "parsed" : { }, "ok" : 1 }

解析后的字段是從配置文件讀取的一些參數(shù)列表.

使用shell

Shell幫助

當(dāng)你忘記一個(gè)命令時(shí),mongodb提供了許多功能幫助你:

> // basic help > helpdb.help() help on db methodsdb.mycoll.help() help on collection methodssh.help() sharding helpersrs.help() replica set helpershelp admin administrative helphelp connect connecting to a db help...

注意對于數(shù)據(jù)庫,集合,副本集,分片,管理員等提供了單獨(dú)了幫助功能。這里沒有一一列出,像游標(biāo)的幫助功能如下:

> // list common cursor functions > db.foo.find().help()

你可以使用這個(gè)功能和小助手作為一個(gè)內(nèi)置的備忘清單。

繆斯的情人
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

查看方法的定義

如果你不知道一個(gè)方法是干什么用的,你可以在shell中通過去除括號的方式運(yùn)行它,查看它的源碼:

> // run the function > db.serverCmdLineOpts() { "argv" : [ "./mongod" ], "parsed" : { }, "ok" : 1 } > // see its source > db.serverCmdLineOpts function () {return this._adminCommand("getCmdLineOpts"); }

這可以幫助我們獲悉這個(gè)方法需要什么參數(shù)和拋出什么錯(cuò)誤,以及如何在其他語言中使用。

繆斯的情人
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

使用編輯功能

shell命令限制多行的支持,因此在里面編寫程序很費(fèi)勁,shell編輯小助手讓它更加簡單,打開一個(gè)文本編輯器,編輯一個(gè)變量,例如:

> x = function() { /* some function we're going to fill in */ } > edit x

在編輯器修改一個(gè)變量保存退出。這個(gè)變量就在shell里面被設(shè)定好了。

不管是編輯器的環(huán)境變量或者M(jìn)ongoDB shell的變量編輯環(huán)境,都必須設(shè)置使用edit模式。你可以在MongoDB shell中通過如下命令配置:

> EDITOR="/usr/bin/emacs"

編輯模式在JavaScript腳本下是無法使用的,只能在交互的shell中使用。

繆斯的情人
翻譯于 2天前

1人頂

頂?翻譯的不錯(cuò)哦!

.mongorc.js

如果你的主目錄下有個(gè).mongorc.js文件,那么當(dāng)你啟動(dòng)shell時(shí)他就會自動(dòng)運(yùn)行。使用它可以初始化任何你經(jīng)常使用的helper方法和你不想意外操作的刪除方法.

比如,你不想使用默認(rèn)的dropDatabase()方法了,你可以在.mongorc.js文件中添加下面的命令:

DB.prototype.dropDatabase = function() {print("No dropping DBs!"); } db.dropDatabase = DB.prototype.dropDatabase;

上面的例子改變了dropDatabase() helper方法,使他只打印出一行信息,而沒有真正的刪除數(shù)據(jù)庫.

注意這個(gè)技巧不是一個(gè)安全手段,固執(zhí)的用戶仍然可以在不使用helper前提下刪除數(shù)據(jù)庫。然而,移除危險(xiǎn)的admin權(quán)限命令也可以幫助阻止“大堤的奔潰”.

幾個(gè)建議在.mongorc.js中使用helper命令時(shí)移除的:

  • DB.prototype.shutdownServer
  • DBCollection.prototype.drop
  • DBCollection.prototype.ensureIndex
  • DBCollection.prototype.reIndex
  • DBCollection.prototype.dropIndexes

?

繆斯的情人
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

改變提示

shell的提示可以通過一個(gè)方法設(shè)置提示變量的方式來改變:

prompt = function() {try {db.getLastError();}catch (e) {print(e);}return (new Date())+"$ "; }

如果你設(shè)置了提示,每次執(zhí)行時(shí)都會重新返回提示信息(上面的例子將返回最后執(zhí)行的信息)。
嘗試在你的提示里面調(diào)用db.getLastError()方法,這將包含默認(rèn)的提示和服務(wù)器重新連接以及返回的錯(cuò)誤信息.

同時(shí),把任何可能出現(xiàn)異常的用try/catch包裹起來,那是非常惱人的,當(dāng)你的提示變成了一個(gè)異常信息!

繆斯的情人
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

操作診斷

查看和終止操作

你可以通過currentOp查看當(dāng)前操作狀態(tài):

> db.currentOp() {"inprog" : [{"opid" : 123,"active" : false,"locktype" : "write","waitingForLock" : false,"secs_running" : 200,"op" : "query","ns" : "foo.bar","query" : {}...},...] }

使用上面的opid字段,你可以終止這個(gè)操作:

> db.killOp(123)

不是所有的操作都能被終止或者立刻終止,通常,操作不會被終止,直到他們獲取到鎖.

active字段表明操作當(dāng)前是否在運(yùn)行,如果一個(gè)操作沒有運(yùn)行,通常是要么沒啟動(dòng),要么在等待鎖,要么執(zhí)行了其他操作。通過numYields你可以查看操作執(zhí)行的時(shí)間.

繆斯的情人
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

索引使用

使用explain()來查看當(dāng)前查詢操作使用了哪個(gè)索引.

> db.foo.find(criteria).explain() {"cursor" : "BasicCursor","isMultiKey" : false,"n" : 2,"nscannedObjects" : 2,"nscanned" : 2,"nscannedObjectsAllPlans" : 2,"nscannedAllPlans" : 2,"scanAndOrder" : false,"indexOnly" : false,"nYields" : 0,"nChunkSkips" : 0,"millis" : 0,"indexBounds" : {},"server" : "ubuntu:27017" }

explain()輸出中有幾個(gè)重要的字段:

  • n: 返回記錄行數(shù).
  • nscanned: 使用索引讀取的記錄數(shù)量.
  • nscannedObjects: 被掃描的文檔數(shù)量.
  • indexOnly: 如果查詢沒有使用集合本身.
  • nYields: 查詢讀取鎖的釋放時(shí)間和等待下次操作時(shí)間.
  • indexBounds: 當(dāng)使用索引時(shí),顯示的索引掃描范圍.

?

繆斯的情人
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

游標(biāo)類型
一個(gè)遍歷游標(biāo)(BasicCursor)意味著沒有使用索引;一個(gè)B樹游標(biāo)(BtreeCursor)意味著使用了一個(gè)常用的索引;平行游標(biāo)被用于分片;二維空間索引(geospatial indexes)使用他們自己特殊的游標(biāo)。

一旦一個(gè)數(shù)組被索引,那么索引上就會設(shè)定一個(gè)“multikey”標(biāo)記,這就是對上面isMultiKey字段的解釋。這個(gè)標(biāo)記在索引生命周期內(nèi)一直保存,除非你去掉了數(shù)組的索引。

如果應(yīng)用索引做查詢的話,explain輸出的信息里將包含索引范圍字段,它描述了索引遍歷到的那部分記錄。比如,如果你知道你的文檔里面有個(gè)age字 段,并且年齡在0-120之間均勻分布,索引范圍從3-5,你可以看到索引只需掃描一小部分?jǐn)?shù)據(jù)就能滿足你的查詢需要。

?

繆斯的情人
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

暗示(Hinting)

使用hint()能讓查詢強(qiáng)制使用一個(gè)特殊的索引:

> db.foo.find().hint({x:1})

這個(gè)暗示必須和你想使用的的索引key相匹配,你可以通過運(yùn)行下面命令查看可用的索引:

> db.foo.getIndexes()

一般來說,你可以創(chuàng)建一個(gè)索引用于查詢。如果你有一個(gè)查詢和排序,建索引最合適的字段取決于你的查詢。如果查詢一個(gè)單一的值(如:{x:y}),索引應(yīng)該 這樣建{queryField: 1, sortField: 1}。如果查詢的是一個(gè)范圍或者集合,采用這樣的方式建索引可能更高效:{sortField: 1, queryField: 1}。如果你是用這個(gè)索引,MongoDB必須掃描所有的索引查找結(jié)果集,但是它可以在不使用內(nèi)存排序的情況下返回有序的結(jié)果。

繆斯的情人
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

系統(tǒng)性能分析

你可以打開系統(tǒng)分析,看看數(shù)據(jù)庫的操作信息。雖然性能上會有損失,但可以幫助我們避免慢查詢。

> db.setProfilingLevel(2) // profile all operations > db.setProfilingLevel(1) // profile operations that take longer than 100ms > db.setProfilingLevel(1, 500) // profile operations that take longer than 500ms > db.setProfilingLevel(0) // turn off profiling > db.getProfilingLevel(1) // see current profiling setting

性能條目保存在開啟性能分析的數(shù)據(jù)庫中名為 system.profile 的集合??梢葬槍蝹€(gè)數(shù)據(jù)庫開啟和關(guān)閉性能分析。

Khiyuan
翻譯于 2天前

1人頂

頂?翻譯的不錯(cuò)哦!

副本集

要找到延遲的復(fù)制,連接到一個(gè)備節(jié)點(diǎn)并運(yùn)行這個(gè)函數(shù):

> db.printReplicationStatus() configured oplog size: 2000MB log length start to end: 23091secs (6.4hrs) oplog first event time: Fri Aug 10 2012 04:33:03 GMT+0200 (CEST) oplog last event time: Mon Aug 20 2012 10:56:51 GMT+0200 (CEST) now: Mon Aug 20 2012 10:56:51 GMT+0200 (CEST)

要查看某個(gè)成員對集合的性能狀況,連接到這個(gè)成員,并運(yùn)行:

> rs.status()

此命令會告訴你其他成員之于它的狀態(tài)和地位。

在一個(gè)備節(jié)點(diǎn)上運(yùn)行 rs.status() 將告訴你備節(jié)點(diǎn)是從 syncingTo字段中哪個(gè)中同步數(shù)據(jù)的。

Khiyuan
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

分片

要查看群集的元數(shù)據(jù)(分片,數(shù)據(jù)庫,文件,數(shù)據(jù)等),請運(yùn)行下面的函數(shù):

> db.printShardingStatus() > db.printShardingStatus(true) // show all chunks

您也可以連接到 Mongos ,使用“use config”查看分片,數(shù)據(jù)庫,集合,或塊的數(shù)據(jù),然后查詢相關(guān)的集合。

> use config switched to db config > show collections chunks databases lockpings locks mongos settings shards system.indexes version

永遠(yuǎn)都連接到 mongos 獲取分片信息。永遠(yuǎn)不要直接連接配置服務(wù)器。永遠(yuǎn)不要直接寫入配置服務(wù)器。。永遠(yuǎn)使用分片命令和幫助。
在維護(hù)之后,有時(shí)實(shí)際上沒有實(shí)施維護(hù)的 mongos 進(jìn)程的配置版本號將不會更新。無論是回彈服務(wù)還是運(yùn)行 flushRouterConfig 命令都能快速解決問題。

> use admin > db.runCommand({flushRouterConfig:1})

通常這個(gè)問題將表現(xiàn)為 setShardVersion 失敗的錯(cuò)誤。
無需擔(dān)心日志中的 setShardVersion 錯(cuò)誤,但它們不應(yīng)該出現(xiàn)在您的應(yīng)用程序中(除非 mongos 無法連接到任何配置服務(wù)器,否則你不應(yīng)該得到錯(cuò)誤)。D
要添加新的分片,運(yùn)行:

> db.addShard("rsName/seed1,seed2,seed3")

要在數(shù)據(jù)庫上運(yùn)用分片,運(yùn)行:

> db.adminCommand({enableSharding: true})

要在集合上運(yùn)用分片,運(yùn)行:

> db.adminCommand({shardCollection: "dbName.collName", unique: true, key: {fieldName: 1}})

既不應(yīng)該已經(jīng)存在 dbName.collName,也不應(yīng)該已經(jīng)索引fieldName(分片關(guān)鍵字)。如果你在使用唯一分片關(guān)鍵字,它必須是唯一索引的。

Khiyuan
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

在集群中,如果你不是在 _id 上分片,_id 無需唯一。不管怎樣,它們都在獨(dú)立的分片上(就是說,你可以在 shard1 上有一個(gè)_id:123,在 shard2 生也有一個(gè)_id:123,但它們不能同時(shí)存在于 shard1中)。文件往往在分片間移動(dòng),如果是自己生成的_id,你需要確保你的_id唯一。如果你用的是Object_Id 就不會出問題。
要關(guān)閉均衡器,通過的 mongos 更新 config.settings 集合:

> sh.setBalancerState(false)

要恢復(fù),則使用同樣的命令,傳遞一個(gè) True。

Khiyuan
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

Mongo監(jiān)控服務(wù) (MMS)

MMS 是一種免費(fèi)的、易操作的監(jiān)控 MongoDB 的方式。要使用它,先在 http://mms.10gen.com. 創(chuàng)建一個(gè)賬號。

查看 http://mms.10gen.com/help 以獲得更多的文檔。

簡單規(guī)則

數(shù)據(jù)庫

數(shù)據(jù)庫的名稱不能包含 ".","$","\0"(空字符)。名稱只能包含在你的文件系統(tǒng)中可以用做文件名的字符。Admin,config,local是數(shù)據(jù)庫的保留名(你可以在其中保存數(shù)據(jù),單永遠(yuǎn)不要?jiǎng)h除它們)。

另一個(gè)強(qiáng)大的選項(xiàng)是 post-commit 鉤子。鉤子將在提交到庫時(shí)被觸發(fā)。這是比周期構(gòu)建或 Poll SCM 選項(xiàng)更高效的方法。

Khiyuan
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

集合

集合名不能含有 "$" 或 "\0"。前綴為 "system." 的名字為 MongoDB 的保留集合,不能刪除(哪怕是你創(chuàng)建的)?!包c(diǎn)”經(jīng)常被用于集合名稱的組織,但它們沒有語義。名為“che.se”的集合跟名為“che”的集合以及名為“cheese”的集合沒有任何關(guān)聯(lián)。

字段名

字段名不能含有 "." 或 "\0"。當(dāng)字段為數(shù)據(jù)庫引用時(shí),它應(yīng)當(dāng)只含有"$"。

索引選項(xiàng)

background 在后臺建立索引,同時(shí)可數(shù)據(jù)庫可讀寫
unique 每個(gè)鍵的值都是唯一的。
sparse 不索引不存在的值。輕松索引文檔中的唯一字段,而沒有該字段的文檔不參與索引。
expireAfterSeconds 設(shè)定集合的生存時(shí)間。
dropDups 當(dāng)創(chuàng)建唯一索引時(shí),遭遇重復(fù)則刪除,而非報(bào)錯(cuò)。注意,這個(gè)選項(xiàng)將刪除有重復(fù)值的文檔。

查詢格式

查詢語句通常為一下格式:

{key : {$op : value}}

例如:

{age : {$gte : 18}}

有三個(gè)例外的規(guī)則: $and, $or, 和 $nor,此三者優(yōu)先級最高:

{$or : [{age: {$gte : 18}}, {age : {$lt : 18}, parentalConsent:true}}]}

更新格式

更新語句總是如下格式:

{key : {$mod : value}}

例如:

{age : {$inc : 1}}

?

Khiyuan
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

查詢操作符

  • √: 匹配
  • x: 不匹配
操作符 查詢示例 文檔示例
$gt, $gte, $lt, $lte, $ne {numSold : {$lt:3}} √ {numSold: 1}
x {numSold: "hello"}
x {x : 1}
$in, $nin {age : {$in : [10, 14,
21]}}
√ {age: 21}
√ {age: [9, 10, 11]}
x {age: 9}
$all {hand : {$all :
["10","J","Q","K","A"]}}
√ {hand: ["7", "8", "9",
"10", "J", "Q", "K", "A"]}
x {hand:["J","Q","K"]}
$not {name : {$not : /jon/i}} √ {name: "Jon"}
x {name: "John"}
$mod {age : {$mod : [10, 0]}} √ {age: 50}
x {age: 42}
$exists {phone: {$exists: true}} √ {phone: "555-555-
5555"}
x {phones: ["555-555-
5555", "1-800-555-
5555"]}
$type* {age : {$type : 2}} √ {age : "42"}
x {age : 42}
$size {"top-three":{$size:3}} √ {"top-three":["gold","s
ilver","bronze"]}
x {"top-three":["blue
ribbon"]}

*參見 http://www.mongodb.org/display/DOCS/Advanced+Queries 獲取全部類型。

更新修飾符

修飾符 初始文檔 修改示例 最終文檔
$set {x:"foo"} {$set:{x:[1,2,3]}} {x:[1,2,3]}
$unset {x:"foo"} {$unset:{x:true}} {}
$inc {countdown:5} {$inc:{countdown:-1}} {countdown:4}
$push, $pushAll {votes:[-1,-1,1]} {$push:{votes:-1}} {votes:[-1,-1,1,-1}}
$pull, $pullAll {blacklist:["ip1","ip2","ip3"]} {$pull:{blacklist:"ip2"}} {blacklist:"ip1",
"ip3"} {blacklist:
"ip1","ip3"}
$pop {queue:["1pm","3pm","8pm"]} {$pop:{queue:-‐1}} {queue:["3pm","8pm"]}
$addToSet,$each {ints:[0,1,3,4]} {$addToSet:{ints:{
$each:[1,2,3]}}}
{ints:[0,1,2,3,4]}
$rename {nmae:"sam"} {$rename:{nmae:"name"}} {name:"sam"}
$bit {permission:6} {$bit:{permissions:{or:1}}} {permission:7}

聚合管道操作符

聚合框架可以用來做任何事情,從簡單的查詢語句到復(fù)雜的聚合查詢。

使用聚合框架,將聚合操作符通過管道傳遞給 aggregate() 函數(shù):

> db.collection.aggregate({$match:{x:1}}, ... {$limit:10}, ... {$group:{_id : "$age"}})

下面是可用操作符的列表:

操作符簡述
{$project : projection}包含、排除、重命名和顯示字段。
{$match : match}查詢,需要同 find() 一樣的參數(shù)。
{$limit : num}限制結(jié)果數(shù)量
{$skip : skip}忽略結(jié)果的數(shù)量。
{$sort : sort}按照給定字段排序結(jié)果。
{$group : group}按照給定表達(dá)式(見下)組合結(jié)果。
{$unwind : field}分割的嵌入數(shù)組到其自己頂層文件。

要引用一個(gè)字段,使用 $fieldName 語句。例如,下面的映射將返回一個(gè)重新命名為“time since epoch ” 的原存在的“$time”字段:

{$project: {"time since epoch": "$time"}}

$project 和 $group 不能同時(shí)表達(dá),你可以用 $fieldName 語句,如下:

表達(dá)操作符示例簡述
$add : ["$age", 1]age 字段加1.
$divide : ["$sum", "$count"]使用 sum 字段 除以 count 字段
$mod : ["$sum", "$count"]sum 字段除以 count 字段后的余數(shù)。
$multiply : ["$mph", 24, 365]mph 字段乘以 24*365.
$subtract : ["$price","$discount"]price 字段減去 discount 字段。
$strcasecmp : ["ZZ", "$name"]如果 name 字段小于 “ZZ” 則為 1,如果 name 字段大于 “ZZ” 則為 0。 -1 if name is greater than ZZ.
$substr : ["$phone", 0, 3]獲取的電話區(qū)號(前三個(gè)字符)。
$toLower : "$str"Converts str to all lowercase.
$toUpper : "$str"str 字段全部大寫。
$ifNull : ["$mightExist",
$add : ["$doesExist", 1]]
若 mightExist 不為空,則返回 mightExist 的值,否則返回第二個(gè)表達(dá)式的結(jié)果。
$cond : [exp1, exp2, exp3] 如果 exp1 結(jié)果為真,返回 exp2的結(jié)果,否則返回 exp2的結(jié)果。
Khiyuan
翻譯于 2天前

0人頂

頂?翻譯的不錯(cuò)哦!

備份

當(dāng)狀態(tài)一致時(shí)(備份時(shí)沒有發(fā)生讀寫操作),最好的備份方式就是把數(shù)據(jù)庫文件拷貝一份。

  • 使用fsync+lock命令。這個(gè)命令將所有的寫操作強(qiáng)制寫入磁盤,并且阻止了新的寫入。> db.fsyncLock()
  • 把數(shù)據(jù)庫文件拷貝到本地一個(gè)新路徑下
  • 使用unlock命令解鎖數(shù)據(jù)庫。> db.fsyncUnlock()
  • 恢復(fù)備份的方法是拷貝文件到正確的服務(wù)器路徑下,重啟。

    如果你有一個(gè)文件系統(tǒng)來做文件系統(tǒng)快照,你的日志在同樣的卷標(biāo)下,并且做了RAID共享存儲,你可以使用一個(gè)無鎖的快照做處理。既然這樣,當(dāng)你重啟時(shí),日志就能同步來保持始終一致性。

    在特殊情況下可以使用Mongodump做備份。如果你決定使用它,首先不要使用fsync+lock。

    繆斯的情人
    翻譯于 2天前

    0人頂

    頂?翻譯的不錯(cuò)哦!

    其它翻譯版本(1)

    副本集維護(hù)

    活躍節(jié)點(diǎn)成員的保持

    停止一個(gè)活躍節(jié)點(diǎn)的方法是把他的優(yōu)先級調(diào)為0:

    > var config = rs.config() > config.members[2].priority = 0 > rs.reconfig(config)

    阻止從節(jié)點(diǎn)成為臨時(shí)活躍節(jié)點(diǎn)的方法是連接到它發(fā)送一條凍結(jié)命令:

    > rs.freeze(10*60) // # of seconds to not become primary

    如果你不想永久的改變優(yōu)先級只是暫時(shí)做維護(hù)工作,這個(gè)方法是非常方便的.

    成員的降級

    如果一個(gè)成員當(dāng)前是活躍節(jié)點(diǎn),你可以通過下面的方式對它降級:

    > rs.stepDown(10*60) // # of seconds to not try to become primary again

    ?

    繆斯的情人
    翻譯于 2天前

    0人頂

    頂?翻譯的不錯(cuò)哦!

    以獨(dú)立服務(wù)器的方式啟動(dòng)一個(gè)成員
    為了維護(hù),你通常需要啟動(dòng)一個(gè)從節(jié)點(diǎn)并且確保它可寫(比如,建索引),為了達(dá)到這個(gè)目的你需要把從節(jié)點(diǎn)作為一個(gè)臨時(shí)獨(dú)立的mongod.

    如果從節(jié)點(diǎn)初始啟動(dòng)使用下面的參數(shù):

    $ mongod --dbpath /data/db --replSet setName --port 30000

    關(guān)閉清除后使用下面配置重啟:

    $ mongod --dbpath /data/db --port 30001

    注意dbpath沒有改變,但是端口改變了,replSet設(shè)置也被移除了。這個(gè)mongod將作為一個(gè)單獨(dú)的服務(wù)啟動(dòng),其余的副本集將通過30000端口查找成員,而不是30001,因此看起來他只是把其余的副本集降級了.

    當(dāng)你維護(hù)完成了,使用初始的參數(shù)設(shè)置并重啟就ok了.

    更多資源

    • MongoDB 下載http://www.mongodb.org/downloads
    • 文檔?http://docs.mongodb.org
    • 里程碑、修改的問題、添加功能http://jira.mongodb.org
    • 問題: http://groups.google.com/group/mongodb-user
    • IRC chat聊天,能及時(shí)得到問題答案:irc.freenode.net/#mongodb

    轉(zhuǎn)載于:https://www.cnblogs.com/shihao/archive/2013/01/25/2876727.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的支持海量数据的 MongoDB NoSQL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。