mongodb - 可能的大错误。 "db.repairDatabase()"到底是做什么的?数据库

标签 mongodb mongodb-query

我有一个拥有数百万用户的 mongodb 数据库。 我想释放空间并创建了一个机器人来删除超过 6 个月的不活跃用户。

我已经看了几分钟磁盘 我已经看到它有所不同,但不会释放大空间,甚至 1 MB 也不会。这很奇怪。

我读过,如果“remove” 没有简单地标记它可以被删除或覆盖,它实际上并没有删除光盘。这是真的吗?

这对我来说似乎很有意义。所以,我一直在寻找能够真正释放空间的东西......

我应用了 repairDatabase(),但我认为我做错了。 一切都被阻止了!

我试过运气,我已经重启了服务器。 有一个 MongoDB 服务在工作,但其状态保持在“正在启动”(而不是正在运行)。

我从其他网站了解到,repairDatabase() 需要的空间是数据库原始大小的两倍,但它没有。

我不知道,这是在做什么,这可能在几个小时、几天...

数据库丢失了吗?我想我会停止所有服务并删除数据库。

最佳答案

repairDatabase 类似于fsck。也就是说,它会尝试清除数据库中任何损坏的文档,这可能会阻止 MongoDB 启动。具体工作方式因存储引擎而异,但 repairDatabase 可能会从数据库中删除文档

MongoDB 文档页面中非常清楚地概述了该命令的详细信息(包括所有警告):https://docs.mongodb.com/manual/reference/command/repairDatabase/

我建议下次最好先阅读官方文档,而不是阅读人们在论坛上所说的内容。这些二手信息可能已经过时,或者完全错误。

话虽如此,您应该让进程一直运行直到完成,如果数据库无法启动,则执行任何故障排除。它可能需要 2 倍的数据磁盘空间,但也有可能该命令只需要时间来完成。

关于mongodb - 可能的大错误。 "db.repairDatabase()"到底是做什么的?数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46893813/

相关文章:

java - 无法使用 log4mongo-java-0.7.4 jar 登录 mongodb 3.0

javascript - 如何在 MongoDB 聚合中进行 $match 然后在 $group 阶段进行累加

mongodb - 从嵌入式数组中获取元素数作为响应 mongoDB

javascript - 运算符 $arrayElemAt 与 Mongo < 3.2 聚合

python - 使用 Pymongo 插入文档 - InvalidDocument : Cannot encode object

c# - 如何使用官方 MongoDB C# 驱动程序将 BsonDocument 转换为强类型对象?

mongodb - 如何在响应式 mongo 中使用 '$in' 查询 '_id' 并 Play

node.js - 如何从 Mongoose 模式的数组中选择一个值

c++ - 具有独特元素和最大值(value)的 MongoDb 查询

node.js - 如何使用 $setUnion 和 $group 从 mongoose 获得独特的结果?