我熟悉MongoDB repairDatabase和compact命令,但这些命令似乎都锁定了数据库和/或集合。是否有另一种方法来回收已删除的磁盘空间而不必实际关闭数据库?这方面的最佳做法是什么?谢谢!
答案 0 :(得分:2)
最佳做法可能取决于您的架构以及您的应用程序的功能。这是我的用例,也许你可以学到一些东西......我的应用程序存储了大量带时间戳的数据样本。从非常大的商店中删除数据是一项非常昂贵的操作,当您尝试在实时系统上执行此操作时,这会变得更加复杂。 MongoDB过去有几个问题,将磁盘空间回收到操作系统,我们不得不围绕这个问题跳舞,不知道现在有多好。但是我们所做的一切都是好的解决了 - 我们以这种方式对数据进行分区,以便我们可以通过简单地转储整个数据库来处理旧的东西。删除mongodb数据库是一种非常便宜和高效的操作,即使你放弃TB也几乎是即时的。请注意,删除集合不如删除数据库有效,这实际上是解决方案的关键。为此,我们不得不重新设计架构。当然,您的情况可能会有所不同,但所吸取的教训是,从大型存储中删除数据非常昂贵。
答案 1 :(得分:0)
目前最好的方法是运行Master Slave Setup。 关闭1个mongod实例并让它重新同步。