Node.js 猫鼬比猫鼬快吗?

Node.js 猫鼬比猫鼬快吗?,node.js,mongodb,mongoose,mongojs,Node.js,Mongodb,Mongoose,Mongojs,我有一个在NodeJS上运行的应用程序,它使用MongoDB作为信息数据库 目前,我通过该模块连接到MongoDB,该模块旨在“尽可能模拟官方的MongoDB API” 该应用程序获得大约20000个对象,并将每个对象保存到MongoDB。首先,它查找数据库以查看对象是否已经存在,然后更新现有条目或添加新条目 这可能相当缓慢。我不确定这是否是因为MongoJS是同步/单流的(如果是-我不确定!),或者这只是一个向数据库写入大量条目的现实,但完成所有这些需要45分钟到1小时,我显然希望尽可能地减少

我有一个在NodeJS上运行的应用程序,它使用MongoDB作为信息数据库

目前,我通过该模块连接到MongoDB,该模块旨在“尽可能模拟官方的MongoDB API”

该应用程序获得大约20000个对象,并将每个对象保存到MongoDB。首先,它查找数据库以查看对象是否已经存在,然后更新现有条目或添加新条目

这可能相当缓慢。我不确定这是否是因为
MongoJS
是同步/单流的(如果是-我不确定!),或者这只是一个向数据库写入大量条目的现实,但完成所有这些需要45分钟到1小时,我显然希望尽可能地减少这一点

我想知道这是否是一个更好/更快的选择。显然这是异步的,我不知道这是否会对性能产生影响

首先,它查找数据库以查看对象是否已经存在,然后更新现有条目或添加新条目

您可以使用单个更新命令和“upsert”(更新/插入)选项集让mongodb为您完成此操作:


首先尝试一下,看看你的速度是否加快。

我猜瓶颈在于你的应用程序获取对象。如果你要在RAM中合成假对象,然后在mongo中合成假对象,那么每秒的DB中可能会有几百个对象(粗略猜测,但至少比你声称的1/s多2个数量级)。在这两种情况下,MongoJ和Mongoose都是异步的,几乎每个节点数据库API都是异步的。事实上,AFAIK节点中根本没有同步网络API,所以虽然可以将节点转换为同步文件系统I/O,但节点中的所有网络可能本质上都是异步的


在任何一种情况下,mongoose都会增加少量开销,因此它在技术上可能比mongojs慢,但没有任何意义(比如插入20K条记录需要5.1秒,而插入5.0秒)。

哦,非常有趣!如果结果存在,我会
update
,但我没有意识到可以立即完成。是的,它非常方便:)现在,如果这不能显著提高性能,那么您应该查看一下传递给mongo的查询。请确保您正在搜索索引字段。我检查的条件是:
{“name”:item.name,designer:“item.designer”,imgs:“item.imgs[0],“store”:item.store}
。这些字段都不使用通配符,所以我假设它们都被索引了?每秒只会有1到5个条目(大约1小时才能完成20000次升级)。回答得很好。不管怎么说,我都认为这是正确的答案,但是你能详细说明一下瓶颈以及我可能采取哪些步骤来解决它吗?mongo函数是在一个
for
循环中调用的,该循环遍历了我的所有产品/对象,我有
进程。setMaxListeners(0)我不知道还有什么可以尝试的。在哪里我的数据是从哪里来的?这就是我怀疑瓶颈的地方。但是你也可以考虑你蒙大神可以处理多少个并发插入操作,并且可能相应地节流你的插入物。如果没有更多关于你的具体数据的话,很难进一步推测。我明白了。数据来自一个网络刮板,所以这很可能是瓶颈!我只是想看看实际的数据库写入是否可以改进,但看起来Mongo是我能做到的最快的。为你的帮助干杯。