0

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

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

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

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

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

4

2 回答 2

4

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

您可以让 mongodb 使用单个更新命令和 'upsert' (update/insert) 选项集为您执行此操作:

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

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

于 2013-07-17T02:45:40.007 回答
3

我的猜测是瓶颈是您的应用程序getting对象。如果您要在 RAM 中合成假对象并猛击然后进入 mongo,那么您每秒可能会将数百个对象放入数据库中(粗略猜测,但至少比您声称的 1/s 高 2 个数量级) . 无论哪种情况,仅供参考,MongoJS 和 Mongoose 都是异步的,几乎每个节点数据库 API 也是如此。事实上,AFAIK 节点中根本没有同步网络 API,因此虽然可以将节点争取到同步文件系统 I/O,但节点中的所有网络可能本质上是异步的。

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

于 2013-07-17T04:11:02.967 回答