首页 > 解决方案 > 如何优化nodejs中的mongodb插入查询?

问题描述

我们正在 mongo db 中操作和插入数据。因此,对于 mongo db 中的单次插入,它需要 28 毫秒。每个请求我必须插入 2 次。一次,如果我收到 6000 个请求,我必须单独插入每个数据,这需要更多时间。我该如何优化呢?请帮助我。

var obj = new gnModel({
    id: data.EID,
    val: data.MID,
}); 
let response = await insertIntoMongo(gnModel);

标签: node.jsmongodb

解决方案


如果立即存储数据并不重要,您可以实施某种形式的批处理。例如,您可以拥有一个服务,该服务将操作排队并每 X 秒将它们提交到数据库。在服务本身中,您可以使用mongo 的 Bulk并且更具体地用于插入:Bulk.insert()。它允许您将操作排队以作为单个查询(或至少最少数量的查询/往返)执行。

将此操作日志/缓存序列化并存储在某处也是一个好主意,因为如果它完全存储在内存中,服务器重新启动会将其清除。一个可能的解决方案是Redis,因为它既可以将数据持久化到磁盘,也可以分布式,从而使您能够对来自不同应用程序实例的操作进行排队。

如果操作不相关且不相互依赖,您将获得更好的性能。在这种情况下,您可以使用db.collection.initializeUnorderedBulkOp()which 将允许 mongo 并行执行操作而不是顺序执行操作,并且单个操作失败不会影响集合其余部分的执行(与 相反OrderedBulkOp)。


推荐阅读