24

删除 MongoDB 集合与删除其所有文档(假设将立即重新创建集合)的权衡是什么?

4

4 回答 4

27

简单地删除一个集合的一个好处是它比删除一个集合的所有文档要快得多。如果您的收藏无论如何都会“立即重新创建”(假设包括重新创建索引),那么这可能是最有吸引力的选择。

MongoDB: The Definitive Guide一书的作者(Kristina Chodorow 和 Michael Dirolf)进行了一项实验,他们提供了一个 Python 脚本,该脚本对 1000000 条记录的 adrop与 a进行计时。remove结果是 0.01 秒drop和 46.08 秒remove。现在,虽然确切的时间可能会因硬件和其他因素而有所不同,但它仍然说明了这一点,即drop速度明显更快。

参考:Chodorow K.、Dirolf M. (2010)。“MongoDB:权威指南。” O'Reilly Media, Inc. 加利福尼亚州塞巴斯塔波尔,第 25 页

于 2012-08-27T21:18:44.093 回答
24

如果您从集合中删除所有文档,那么您将做更多的工作(释放文档的存储空间,清除指向文档的索引条目,等等)。如果您只是删除集合,它只会回收集合及其索引使用的范围。

另一个区别是删除集合也会删除集合的索引。

于 2012-08-27T19:12:31.040 回答
2

删除和删除集合主要是实现细节。

删除集合需要对集合中恰好存在的内部状态进行一一更新。

删除集合需要 释放数据文件数据库中的一些大型数据结构。

删除集合比一个一个删除直到集合为空要快得多。

如果删除集合而不是删除集合,则将存在诸如索引之类的元数据

来源:MongDB大学课程

于 2014-08-25T14:14:31.733 回答
0

一旦我们将文档存储在我们的集合中,我们可以通过两种方式从中删除所有文档。现在选择一个完全取决于您的要求。

1.使用 drop(): 通过调用drop()一个集合,它会从中删除所有文档,它会删除它上面的所有索引,最后它会删除集合本身。

2.使用 remove(): remove 有两个重载版本,其中一个我们将通过条件以删除所有符合我们通过条件的文档,第二个是默认的,我们不会通过任何条件(在 2.6 之前)或传递一个空文档(2.6 或更高版本),它将从集合中删除所有文档。在这里,当我们的意图是清除集合中的所有文档时,我们对第二版更感兴趣。

备注: 要从集合中删除所有文档,使用drop()删除整个集合(包括索引)的方法可能更有效,然后重新创建集合并重建索引。

于 2020-05-11T22:36:10.513 回答