mongodb如何删除数据并释放空间

mongodb删除数据后不会直接释放内存空间,是因为使用了一种称为"延迟删除"的策略。这意味着当一个文档被删除时,它仍然会占用一定的内存空间,直到这个空间被垃圾回收器(Garbage Collector)回收。

删除数据操作前建议先评估你的操作会有什么样的影响。在生产上操作的时候,需要评估你删除的数据有多大,需要用多长时间,从而可以制定相应的实施和回退方案。

举个例子,db是busi,我要删除createDate小于2023-07-01的数据,根据这个字段查询数据量大概有多少,或者可以根据主键_id来查询。

-- 查询数据

db.busi.find({createDate:{$gt : '2023-07-01'}}).count();

db.busi.find({_id:{$gt: 123456}}).count()

db.busi.find({_id:{$lt: 123456}}).count()

如果符合预期的操作方案,则进行后面的删除;

注意:删除数据只能在主节点进行操作

-- 根据日期删除数据(时间较长)

db.busi.remove({createDate:{$gt : '2023-07-01'}})

删除过程中也可以直接查询当前的数据量

-- 根据条件查询当前的数据总量

db.busi.find({_id: {$gt: 123456}}).count();

db.busi.find({_id: {$lt: 123456}}).count();

-- 该语句执行较长

db.busi.find({createDate: {$lt: '2023-07-01'}}).count();

删除完成后,我们可以观察服务器对应的数据目录,磁盘空间是没有任何变化的,则需要执行下面的命令

注意:释放空间只是释放了当前节点的空间,如果有多个节点,还需要在多个节点进行操作

-- 释放空间(需要几分钟)

db.runCommand({compact: "busi", force:true});

-- 实时查询当前空间大小

db.busi.stats().storageSize;

相关推荐
2301_773553623 分钟前
Redis怎样优化复制缓冲池大小_调大repl-backlog-size减少频繁的全量同步触发
jvm·数据库·python
wangyangyangcumt4 分钟前
银河麒麟V10 SP3离线安装Nginx1.21.5全记录
linux·运维·数据库
tongyiixiaohuang5 分钟前
基于轻易云的数据集成,实现企业系统间灵活对接
java·前端·数据库
weixin_381288187 分钟前
HTML lang 属性的正确取值规范:BCP 47 格式详解与最佳实践
jvm·数据库·python
阿丰资源10 分钟前
基于SpringBoot智能化体育馆管理系统(附源码+文档+数据库,一键运行)
数据库·spring boot·后端
u01091476013 分钟前
如何正确对 JavaScript 对象的键进行字母序排序
jvm·数据库·python
maqr_11015 分钟前
MySQL在事务中如何实现串行化_使用select lock in share mode查询
jvm·数据库·python
是Yu欸17 分钟前
SGLang 推理服务基础性能评测
android·数据库·大模型·github·昇腾·sglang·qwen3
TechWayfarer26 分钟前
离线IP数据库内网部署:场景选型与热更新落地实践
网络·数据库·python·网络协议·tcp/ip
科技牛牛26 分钟前
离线IP数据库推荐:风控合规场景怎么选
网络·数据库·tcp/ip·离线ip数据库·.数据安全