java - mongodb阻塞中的多线程删除吗?
问题描述
我正在处理一项需要从 mongodb 中删除一些非常大的记录的任务。有时记录在 2M 和 3M 之间。我正试图尽可能快地做到这一点。
我的想法是使用某种线程池并将这个数字分成大约 20 个线程,每个线程删除集合的一部分。在我进一步采用这种方法之前,我想知道这是否是一种好的(有希望的)方法。我主要担心的是,如果这在 mongo 中是不可能的,我将在 db 中出现阻塞行为,基本上线程将等待对方完成删除。
如果建议任何其他方法/解决方案,我也会很高兴。
项目语言是 Java/Spring。
解决方案
在“尽可能快地”做任何事情之前,您需要了解瓶颈在哪里(通常是 CPU、内存或磁盘),以便您的更改真正产生影响。
当涉及到删除时,删除操作有一些开销(客户端必须将命令发送到服务器,服务器必须对其进行解析等)。
假设您有大量的删除,使用 2 个应用程序线程进行删除可能是一个好主意,可以在测量挂钟时间时减少这种开销。
被删除文档的大小无关紧要。
如果您假设服务器将因文档大小而受到 I/O 限制,那么同时向其发送更多请求根本无济于事(实际上这会适得其反)。
推荐阅读
- c++ - 有谁知道如何在 OMNeT++/INET 中更改比特率(数据率)?
- javascript - 5 个文件字段,1 个验证
- apache - httpd 不会在 RHEL 7 上升级:“包 httpd 可用,但未安装。”
- reactjs - 动作有效负载未分派给减速器
- javascript - 为什么显示.bs.modal 没有被解雇?
- javascript - 在获取请求中、在参数中、在邮递员中发送对象
- pip - 如何在 Apple M1 Silicon 笔记本电脑上安装 GRPCIO?
- chart.js - Chartjs 错误的自动 y 轴刻度
- excel - Office URI 方案忽略内容处置
- spacy - 如何在 spacy 版本 3 中将多个 ner 模型组合到单个管道