mongodb复制而不删除辅助中的数据

时间:2014-12-31 21:50:04

标签: mongodb replication

我在服务器中有一个mongod实例,并且每天都删除旧数据(我将数据保留30天)。在其他方面,我想在我的客户端中拥有一个数据库的镜像副本,包含整个数据,并且不想在我的客户端中应用任何删除指令(我需要将所有旧数据保存在客户端中,并在服务器中删除)。

哪种类型的复制可以帮助我?

1 个答案:

答案 0 :(得分:0)

如果数据是您唯一需要的(与bonafide数据库镜像相比),那么请考虑根据automysql backup auto mongobackup来查看此备份脚本,它可以轮换每日,每周,每月备份。在删除数据之前运行它(假设它是一个批处理过程)。它简单而且愿意适应。 如果您需要镜像,可以根据导出编写mongo导入脚本。

------编辑----

给定注释考虑定期执行的mongo shell script(使用crontab)。

// mirror every 10 seconds
db.collection.find({"is_mirrored" : { $exists: false }  }).forEach(function(doc) {  
   db.mirror.insert(doc);
   db.collection.update({doc._id}, {"is_mirrored": true}, {upsert: false});
}

创建一个'镜像表'不是镜像数据库。镜像数据库需要连接,因此按

行添加
  

var mirrordb = connect(" localhost:27020 / mirrored_db"); //或任何其他有效的conn字符串   mirrordb.collection.insert(doc)//替换上面的插入

和另一个删除30天的东西。

var now = ISODate();
var ago = now - (30 * 86400 seconds); //some javascript to subtract 30 days

// find all date that is less (or older) than 30 days old
db.collection.find({"created_date" : {$lt : ago }}).forEach(function(doc) {  
   db.collection.remove(doc._id);        // remove the 30 day old data
}