Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb deleteMany,如何节省磁盘使用率?_Mongodb_Mongodb Query - Fatal编程技术网

Mongodb deleteMany,如何节省磁盘使用率?

Mongodb deleteMany,如何节省磁盘使用率?,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个相当大的集合,请参见db.action\u traces.stats()的屏幕截图。: 我运行db.action\u traces.deleteMany({“block\u time”:{“$lt”:“2018-08-15T00:00:00.000Z”})和db.action\u traces.deleteMany({“block\u time”:{“$lt”:“2018-09-01T00:00:00.000Z”}) 并得到以下结果: {“已确认”:true,“删除帐户”:515178

我有一个相当大的集合,请参见
db.action\u traces.stats()的屏幕截图。

我运行
db.action\u traces.deleteMany({“block\u time”:{“$lt”:“2018-08-15T00:00:00.000Z”})
db.action\u traces.deleteMany({“block\u time”:{“$lt”:“2018-09-01T00:00:00.000Z”})

并得到以下结果:
{“已确认”:true,“删除帐户”:5151786}
{“已确认”:true,“删除帐户”:16261351}

但是当我再次运行
db.action\u traces.stats()
时,我得到了以下结果
“storageSize”:630196023296
。所以基本上,我删除了一大块数据,但没有保存一点。。。这怎么可能


我该怎么做才能节省一些空间?

MongoDB存储文件不会缩小--相反,它们有“漏洞”,可以在您继续添加更多数据时重新使用--至少,在他们购买另一家公司/引擎之前,原始MongoDB引擎就是这样。 在任何情况下,收缩文件的唯一方法是从头开始重新创建它们。如果您以副本集的形式运行,则可以关闭节点、删除文件并恢复节点—文件将重新写入,而不会出现存储漏洞。我已经做了几年了--在走这条路之前先阅读文档。无论哪种方式,mongodb存储都不会“收缩”——我记得很多


(我刚刚再次查看了您的屏幕截图,并注意到您正在使用新的wired tiger db引擎?我的回答是指“原始”的预连线触发器行为——但在新引擎中可能也是相同的行为)

MongoDB存储文件不会收缩,而是有“洞”随着您继续添加更多数据,这些数据将被重新使用——至少,在他们购买另一家公司/引擎之前,原始mongodb引擎就是这样使用的。 在任何情况下,收缩文件的唯一方法是从头开始重新创建它们。如果您以副本集的形式运行,则可以关闭节点、删除文件并恢复节点—文件将重新写入,而不会出现存储漏洞。我已经做了几年了--在走这条路之前先阅读文档。无论哪种方式,mongodb存储都不会“收缩”——我记得很多

(我刚刚再次查看了您的屏幕截图,注意到您正在使用新的wired tiger db引擎?我的回答是指“原始”的预连线触发器行为——但在新引擎中可能也是相同的行为)

在WiredTiger上,compact试图减少集合中数据和索引所需的存储空间,从而向操作系统释放不需要的磁盘空间。此操作的有效性取决于工作负载,无法恢复磁盘空间。如果已从集合中删除了大量数据,并且不打算替换该数据,则此命令非常有用

compact可能需要额外的磁盘空间才能在WiredTiger数据库上运行

所以你的收藏一定是

db.runCommand ( { compact: 'action_traces' } )
:

在WiredTiger上,compact试图减少集合中数据和索引所需的存储空间,从而向操作系统释放不需要的磁盘空间。此操作的有效性取决于工作负载,无法恢复磁盘空间。如果已从集合中删除了大量数据,并且不打算替换该数据,则此命令非常有用

compact可能需要额外的磁盘空间才能在WiredTiger数据库上运行

所以你的收藏一定是

db.runCommand ( { compact: 'action_traces' } )

非常感谢你的评论,所以你告诉我的是,任何新数据都应该填补漏洞,而不是扩展磁盘存储?我问这个问题是因为我的资源不足,需要谨慎(我计划迁移到另一台服务器,但为了成本效益,越晚越好。)。非常感谢你的评论,所以你告诉我的是,任何新数据都应该填补漏洞,而不是扩展磁盘存储?我这样问是因为我的资源不足,需要谨慎(我计划迁移到另一台服务器,但为了节省成本,越晚越好。)。太好了,我没有意识到这个命令非常感谢。。。我已经运行了它,但没有节省太多空间。很遗憾:(我删除了2/3的文档,但保存了5%…我想我无能为力了?对不起,我看不出在180亿个文档中删除2100万个文档的比例是2/3。对我来说只是略高于1%。太好了,我没有意识到这个命令非常感谢…我运行了它,但不幸的是,它没有节省太多空间:(我已经删除了2/3的文档,但在保存了5%之后……我想我无能为力了?对不起,我看不出在180亿个文档中删除2100万个文档的比例是2/3。这对我来说只是略高于1%。