node.js - 如何优化nodejs中的mongodb插入查询?
问题描述
我们正在 mongo db 中操作和插入数据。因此,对于 mongo db 中的单次插入,它需要 28 毫秒。每个请求我必须插入 2 次。一次,如果我收到 6000 个请求,我必须单独插入每个数据,这需要更多时间。我该如何优化呢?请帮助我。
var obj = new gnModel({
id: data.EID,
val: data.MID,
});
let response = await insertIntoMongo(gnModel);
解决方案
如果立即存储数据并不重要,您可以实施某种形式的批处理。例如,您可以拥有一个服务,该服务将操作排队并每 X 秒将它们提交到数据库。在服务本身中,您可以使用mongo 的 Bulk并且更具体地用于插入:Bulk.insert()。它允许您将操作排队以作为单个查询(或至少最少数量的查询/往返)执行。
将此操作日志/缓存序列化并存储在某处也是一个好主意,因为如果它完全存储在内存中,服务器重新启动会将其清除。一个可能的解决方案是Redis,因为它既可以将数据持久化到磁盘,也可以分布式,从而使您能够对来自不同应用程序实例的操作进行排队。
如果操作不相关且不相互依赖,您将获得更好的性能。在这种情况下,您可以使用db.collection.initializeUnorderedBulkOp()
which 将允许 mongo 并行执行操作而不是顺序执行操作,并且单个操作失败不会影响集合其余部分的执行(与 相反OrderedBulkOp
)。
推荐阅读
- php - 执行 while 循环后无法重置查询行
- azure-sql-database - Azure SQL DW 中的 regexp_replace
- iframe - 添加多个时,iframe 视频不会播放
- excel - 打开excel文件时出现Hyperion问题
- javascript - 中间件接下来调用,但程序仍然挂起
- javascript - 更改图像src jquery动画
- android - 如何在android studio中打开没有webview的Pdf url
- javascript - 如何使用 Google action conv.ask 获取用户的响应并转移到流程
- php - 在 Mac High Sierra 中使用 Homebrew 为 php 安装 mcrypt 扩展
- acumatica - 库存属性值 DAC