Node.js和MongoDB性能问题

Node.js和MongoDB性能问题,node.js,mongodb,Node.js,Mongodb,我在MongoDB上遇到了一些奇怪的性能问题。首先,我试图通过驱动程序获取约1000个文档,但该驱动程序确实有效,但在大约60多秒钟内完成了查询。请注意,文档在任何方面都不是大的 然后,我尝试执行相同的查询,但对mongo shell运行了一个解释,以检查是否真的只是查询速度太慢。经检查,查询只需4分钟即可完成!我不知道是什么原因造成的。有什么想法吗 更多详情: 小文件 MongoDB服务器位于我通过VPN连接到的另一台服务器上 索引放置在必要的地方 编辑: 我运行wireshark并注意到以下

我在MongoDB上遇到了一些奇怪的性能问题。首先,我试图通过驱动程序获取约1000个文档,但该驱动程序确实有效,但在大约60多秒钟内完成了查询。请注意,文档在任何方面都不是大的

然后,我尝试执行相同的查询,但对mongo shell运行了一个解释,以检查是否真的只是查询速度太慢。经检查,查询只需4分钟即可完成!我不知道是什么原因造成的。有什么想法吗

更多详情:

小文件 MongoDB服务器位于我通过VPN连接到的另一台服务器上 索引放置在必要的地方 编辑:

我运行wireshark并注意到以下几点:

查询将被发送到服务器

服务器在1ms内响应101个文档,并且始终保持相同的编号

客户端执行“获取更多”请求

服务器响应其余文档大约需要一两分钟

“使用文档获取更多请求和服务器响应”将继续,直到发送完所有内容。这可能需要。。。即使是1000个左右的最小文档集,也会永远存在

下面是我在node CLI中运行的一段代码:

/* Get all the documents (about 1000) */
var db = require('mongojs').connect("myIpAddress", ["myCollection"]);
db.myCollection.find({}).forEach(function(err, doc) {
    console.log(doc);
});
编辑2:

我不确定它是否相关,但我不时从wireshark收到一个TCP故障数据包

编辑3:

我试图调整批量大小,但这不起作用。我还试图确保它没有做错什么,但这也解决不了任何问题。

其他一些想法:

Mongoose在我看来工作得很好,你能用Mongoose替换Mongojs吗

使用find查询的参数,并使用高值链接a.batch\u size

运行Wireshark并监视连接,查看哪个交互正在等待60秒。可能是一些特殊的Nodejs-VPN网络交互问题

你能把你的密码寄出去吗

…编辑-尝试此操作-尚未测试它,因此可能有一些语法怪癖-请检查您的程序

/* Get all the documents (about 1000) */
var db = require('mongojs').connect("myIpAddress", ["myCollection"]);
db.myCollection.find({}).forEach(function(err, doc) {
    console.log(doc);
}).batch_size(2000);

我通过将MongoDB服务器复制到运行节点服务器的同一个位置来修复它。我认为这与我连接的VPN有关,尽管我不能肯定地说。

我试过了,但一点帮助都没有。我还尝试了MongoSkin的另一个库,但没关系,同样的问题发生了。如果您尝试Sachin答案中的代码,但将批大小调用放在forEach之前,会发生什么情况?我也尝试过,但没关系。有关更多信息,请参阅我自己的答案,并感谢您的帮助!:很高兴你找到了解决办法。我仍然对远程数据库的问题感到好奇。我必须通过Cisco软件连接到VPN,我猜这就是问题所在。一旦我设法通过Windows界面手动设置VPN连接,它就开始工作了!