NodeJS - Mongoose比MongoJS快吗?

时间:2013-07-17 01:53:19

标签: node.js mongodb mongoose mongojs

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

目前我通过MongoJS模块挂钩到MongoDB,该模块旨在“尽可能模仿官方的mongodb API”。

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

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

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

2 个答案:

答案 0 :(得分:4)

  

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

您可以让mongodb使用单个更新命令为您执行此操作并设置'upsert'(更新/插入)选项:

http://docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update

首先尝试一下,看看事情是否会加速。

答案 1 :(得分:3)

我的猜测是瓶颈是你的应用程序getting。如果你要在RAM中合成虚假对象然后猛击到mongo,那么你每秒可能会有更多的数百个对象进入数据库(粗略猜测,但比你声称的1 / s多至少2个数量级) 。在任何一种情况下,FYI MongoJS和Mongoose都是异步的,几乎每个节点数据库API都是异步的。实际上,AFAIK节点中根本没有同步网络API,因此虽然可以将节点与同步文件系统I / O搏斗,但节点中的所有网络本身都可能是异步的。

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