mongodb delete很多,如何节省磁盘使用量?

时间:2018-11-30 11:17:13

标签: mongodb mongodb-query

我有一个非常大的收藏集,请参见db.action_traces.stats()的屏幕截图:

action_traces stats

我运行db.action_traces.deleteMany({ "block_time": { "$lt": "2018-08-15T00:00:00.000Z" } })db.action_traces.deleteMany({ "block_time": { "$lt": "2018-09-01T00:00:00.000Z" } })

并得到以下结果: { "acknowledged" : true, "deletedCount" : 5151786 } { "acknowledged" : true, "deletedCount" : 16261351 }

但是当我再次运行db.action_traces.stats()时,我得到以下结果"storageSize" : 630196023296。因此,基本上,我删除了一大笔数据,但没有保存一点……这怎么可能?

我该怎么做以节省空间?

2 个答案:

答案 0 :(得分:1)

MongoDB存储文件不会收缩-而是随着您继续添加更多数据而被重用的“漏洞”-至少,这就是它们在购买另一家公司之前与原始mongodb db引擎一起使用的方式/发动机。 无论如何,缩小文件的唯一方法是从头开始重新创建它们。如果您以副本集的形式运行,则可以关闭节点,删除文件并备份该节点-文件将被重新写入而没有存储漏洞。自从我完成这件事已经有几年了-在走这条路之前请先阅读文档。无论哪种方式,mongodb的存储都不会“缩小”,我记得那么多。

((我刚刚再次查看了您的屏幕截图,发现您正在使用新的有线Tiger db引擎?我的回答是指“原始”的wiredtiger之前的行为-但也许与新引擎中的行为相同)也是

答案 1 :(得分:1)

https://docs.mongodb.com/manual/reference/command/compact/

  

在WiredTiger上,紧凑尝试减少集合中数据和索引所需的存储空间,从而将不必要的磁盘空间释放给操作系统。此操作的有效性取决于工作负载,并且无法恢复任何磁盘空间。如果您已从集合中删除了大量数据并且不打算替换它,则此命令很有用。

     

紧凑型可能需要更多磁盘空间才能在WiredTiger数据库上运行。

因此对于您的收藏,它必须是

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