首页 > 解决方案 > mongodb阻塞中的多线程删除吗?

问题描述

我正在处理一项需要从 mongodb 中删除一些非常大的记录的任务。有时记录在 2M 和 3M 之间。我正试图尽可能快地做到这一点。

我的想法是使用某种线程池并将这个数字分成大约 20 个线程,每个线程删除集合的一部分。在我进一步采用这种方法之前,我想知道这是否是一种好的(有希望的)方法。我主要担心的是,如果这在 mongo 中是不可能的,我将在 db 中出现阻塞行为,基本上线程将等待对方完成删除。

如果建议任何其他方法/解决方案,我也会很高兴。

项目语言是 Java/Spring。

标签: javamongodbspring-bootspring-mongodb

解决方案


在“尽可能快地”做任何事情之前,您需要了解瓶颈在哪里(通常是 CPU、内存或磁盘),以便您的更改真正产生影响。

当涉及到删除时,删除操作有一些开销(客户端必须将命令发送到服务器,服务器必须对其进行解析等)。

假设您有大量的删除,使用 2 个应用程序线程进行删除可能是一个好主意,可以在测量挂钟时间时减少这种开销。

被删除文档的大小无关紧要。

如果您假设服务器将因文档大小而受到 I/O 限制,那么同时向其发送更多请求根本无济于事(实际上这会适得其反)。


推荐阅读