转到其他问题
这是关于此主题的final question。我从方程式中移除了Express并且通常清除了问题。
在你说出“傻瓜”这样的话之前,先将它们串联起来"或类似的东西,我想提一下,这段代码永远不会用于制作。我用谷歌搜索了几天并进行了测试,依此类推,现在我需要一些帮助。
如果您希望看到一些更高级别的问题 - 这里it就是。
测试台:
问题:
我有100000个元素,我想用find / findOne / whatever检查一些集合。
我正在这样做:
Mongo很好 - 用日志,mongostat检查并简单地连接到它并查询某些东西。
节点部分正常 - 检查一些延迟的console.log工作正常,但如果我尝试使用浏览器打开我的应用程序(这就是为什么我在标签部分中包含快速框架)它&#39 ; s加载,直到我遇到服务器超时。
页面设置最简单,没有任何数据库连接或类似的东西:
router.get('/',function(req, res) {
res.send({result:"OK"});
});
它挂了。我甚至手动抓住server timeout来检查这个。
P.S。 Mongostats显示有趣的东西 - 首先它显示每行添加2000-3000个查询,然后0,0,0 ...再次几千个然后再次0。 这是paste
这是我的代码,如果你想要像我一样进行测试
var t = setTimeout(function () {
console.log("Timeout fired in 30 seconds");
}, 30 * 1000);
var testArtists = [];
for (i = 0; i < 100000; i++) {
testArtists[i] = Math.floor(Math.random() * 16777215).toString(16);
}
async.map(testArtists, function (artist, callback) {
db.get().collection('someCollection').
findOne(
{ "unimportant": testArtists[0] },
function (err, discogsArtist) {
if (err) return callback(err);
return callback(null, "OK");
}
);
}, function (err, results) {
if (err) return console.log(err);
return console.log("somehow finished");
});
以下是我曾经遇到的一些错误,也许他们可以提供帮助,不知何故:
{ MongoError: connection 4 to localhost:27017 timed out
at Function.MongoError.create (E:\blablabla\node_modules\mongodb-core\lib\error.js:29:11)
at Socket.<anonymous> (E:\blablabla\node_modules\mongodb-core\lib\connection\connection.js:198:20)
at Socket.g (events.js:292:16)
at emitNone (events.js:86:13)
at Socket.emit (events.js:185:7)
at Socket._onTimeout (net.js:338:8)
at ontimeout (timers.js:386:11)
at tryOnTimeout (timers.js:250:5)
at Timer.listOnTimeout (timers.js:214:5)
name: 'MongoError',
message: 'connection 4 to localhost:27017 timed out' }
Something went wrong when retrieving an access token read ECONNRESET
{ Error: read ECONNRESET
at exports._errnoException (util.js:1020:11)
at TLSWrap.onread (net.js:568:26) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' }
{ Error: read ECONNRESET
at exports._errnoException (util.js:1020:11)
at TLSWrap.onread (net.js:568:26) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' }
提前致谢!
更新1
更新了我的代码以插入对象 - 现在我们可以看到插入了一些随机数量的对象(60000-80000),然后一切都变得沉默。
更新2
更新3
在pool到1000个连接之后,现在一切都能很快地完成,并及时完成。但这只是扩展解决方案,例如&#34;购买更多RAM&#34;。我想知道为什么异步使用数据库会阻止从浏览器提供页面。 MongoClient池大小和节点服务页面之间存在明显的连接。当mongo驱动程序获取所有已分配的池时,Node停止提供页面。为什么?怎么打呢?