1、複製collection
1)複製遠程colletion,使用cloneCollection命令完成將遠端collection複製到本地。
命令格式:db.runCommand({cloneCollection:"集合",from:"原機器",copyIndexes:false}),copyIndexes:是否複製索引
例子:132.42.33.175上test庫t1表上有一條資料
> db.t1.find()
{ "_id" : ObjectId("4fd9a4bf186cb1b6ac95907d"), "name" : "liangzhangping", "addr" : "beijing" }
132.42.33.190上test庫上t1表有兩條條資料
> db.t1.find()
{ "_id" : ObjectId("4fd9c517dcde2d0e33d08c76"), "name" : "liangzhangping", "age" : 28 }
{ "_id" : ObjectId("4fda1795a3d56c6a40f2bc26"), "name" : "liangzhangping", "addr" : "jiangxi" }
現在將132.42.33.175上test庫t1表的資料複製到132.42.33.190上test庫上t1表上,操作如下:
a、登入132.42.33.190機器上執行:
> db.runCommand({cloneCollection:"test.t1",from:"132.42.33.175:28010"})
{ "ok" : 1 }
b、查看驗證
> db.t1.find()
{ "_id" : ObjectId("4fd9c517dcde2d0e33d08c76"), "name" : "liangzhangping", "age" : 28 }
{ "_id" : ObjectId("4fda1795a3d56c6a40f2bc26"), "name" : "liangzhangping", "addr" : "jiangxi" }
{ "_id" : ObjectId("4fd9a4bf186cb1b6ac95907d"), "name" : "liangzhangping", "addr" : "beijing" }
2)複製本地collection,mongodb沒有提供命令進行本地複製,但我們可以寫一個迴圈插入的方法完成,
例如:將source_collection中的資料複製一份到target_collection,代碼如下:
db.source_collection.find().forEach(function(x){db.target_collection.insert(x)})
2、複製資料庫,使用copyDatabase命令完成複製資料庫,
格式:copyDatabase(fromdb,todb,fromhost[,username,password])
fromdb:來源資料庫名稱
todb:目標資料庫名稱
fromhost:來源資料庫地址,本地和遠程都可以
username:遠端資料庫使用者名稱
password:遠端資料密碼
例子:將本地db2庫複製本地,並重新命名db1
> db.copyDatabase("db2","db1","localhost")
3、重新整理磁碟:將記憶體中尚未寫入磁碟的資訊寫入磁碟,並鎖住對資料庫更新的操作,但讀操作可以使用,使用runCommand命令,這個命令只能在admin庫上執行
格式:db.runCommand({fsync:1,async:true})
async:是否非同步執行
lock:1 鎖定資料庫
4、資料壓縮:mongodb的儲存結構採用了預分配的機制,長期不斷的操作,會留下太多的的片段,從而導致資料庫系統越來越慢。
repairDatabase命令是mongodb內建的一個方法,它會掃描資料庫中的所有資料,並將通過匯入/匯出來重新整理資料集合,將片段清理乾淨
現在看壓縮前和壓縮後的對比資料,如下所示:
PRIMARY> db.t1.storageSize()
65232896
PRIMARY> db.t1.totalSize()
81470432
PRIMARY> db.repairDatabase()
{ "ok" : 1 }
PRIMARY> db.t1.storageSize()
65232896
PRIMARY> db.t1.totalSize()
79851584