mongodb 后台大量删除归档数据

在不干扰线上流程的情况下,针对mongo数据库matrix_db,需归档并删除超过三个月的数据。首先进行数据备份,然后通过创建索引优化删除操作,使用deleteMany配合索引删除大量数据,最后通过BulkWrite优化进一步减少删除压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求如下

我们有些生产mongo数据库的大表需要做归档,数据库为matrix_db,只保留最近三个月的数据,将三个月之前的数据删除,注意要先备份,过几天验证期以后再删备用表(我会通知),注意删除的时候不能影响线上流程,需要后台执行,具体的执行语句如下所示:

 

db.getCollection('neo.riskengine.PolicyExecutionTracking').deleteMany({createTime:{$lt:ISODate("2018-08-28 00:00:00")}})

 

解决办法

先备份

mongodump -ureader -p'Password$1' --port 27127 -d bos_braavos -c events -q '{"timeStamp" : {"$lte":"2017-11-28T00:00:23.870+08:00"}}' -o /u01/

 

再查看要删除数据大小

rep01:PRIMARY> db.neo.riskengine.PolicyExecutionTracking.find({"createTime":{"$lt":ISODate("2018-08-28 00:00:00")}}).count()

1976824

查看很慢,发现此collection没有索引

删除优化1:

建相关索引

rep01:PRIMARY> db.neo.riskengine.PolicyExecutionTracking.ensureIndex({"createTime":1},{background:true})

删除优化2:

mongos> var bulk = db.infos.initializeUnorderedBulkOp()

mongos> bulk.find({u:"www.baidu.com"}).remove()

mongos> bul

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值