Performance 在MongoDB中删除是一项昂贵的操作吗?

Performance 在MongoDB中删除是一项昂贵的操作吗?,performance,mongodb,Performance,Mongodb,我的站点迁移到MongoDB的一部分是消息传递系统的迁移。我试图弄清楚,当用户想要删除消息时,我是应该从集合中删除记录,还是应该使用一些bool字段将它们标记为已删除-该站点的负载将很高,因此我关心的是性能(而不是磁盘空间) 有什么想法吗?tl;医生:移除 MongoDB将数据存储在一个双链接列表中,因此删除结果会调整两个链接,即上一个文档的下一个链接和下一个文档的上一个链接。没有自动比较。如果已经存储了一个值,则会在适当的位置进行更新,即更改一个值。现在。。。你认为,很好,更新一个int而不是

我的站点迁移到MongoDB的一部分是消息传递系统的迁移。我试图弄清楚,当用户想要删除消息时,我是应该从集合中删除记录,还是应该使用一些bool字段将它们标记为已删除-该站点的负载将很高,因此我关心的是性能(而不是磁盘空间)

有什么想法吗?

tl;医生:移除


MongoDB将数据存储在一个双链接列表中,因此删除结果会调整两个链接,即上一个文档的下一个链接和下一个文档的上一个链接。没有自动比较。如果已经存储了一个值,则会在适当的位置进行更新,即更改一个值。现在。。。你认为,很好,更新一个int而不是两个指针,肯定更快!并非如此——您现在需要在此标志上建立索引,而创建索引的速度“很慢”。

而且删除(无论其代价如何)将是一次性的,检查“已删除”标志将在每次查询中花费您的时间。>没有自动比较。为了澄清这一点,MongoDB可以重用空间,甚至可以从索引中重用空间。随着时间的推移(重建索引、压缩单个集合等),情况变得越来越好。添加“已删除”标志将导致更大的索引,并需要更多内存。如果您的大部分数据将在逻辑上被删除,那么通常最好是在物理上删除它。嗯,他可能已经有了索引,否则他不会询问性能。因此,在这两种情况下都会建立索引。不过,从长远来看,消除这一记录应该更好。