我是node的新手,已经编写了一个可以开发的程序,但我很担心它的生产性能。
在下面的代码中,我使用自己的mysqlAsync.queryEach方法(如果你想让我分享,请告诉我)。它使用泛型池,mysql和async库。
我使用通用池共享最多10个mysql连接。
mysqlAsync.queryEach方法使用async.forEach方法,该方法由文档执行以下操作。
将迭代器函数并行应用于数组中的每个项目。
function doSomethingWithExercises(callback) {
mysqlAsync.queryEach("SELECT * FROM subjects ORDER BY id", function(subject, done) {
mysqlAsync.queryEach("SELECT * FROM exercises WHERE id = ? ORDER BY id",[subject.id] function(exercise, done) {
//do something with the exercises
},
//then...
function() {
done()
});
},
//then...
function() {
//done
callback()
});
}
因此,对queryEach的第一次调用会向另一个queryEach发出另外x次调用。它可以同时发出1000个同时查询。
在我的特定用例中,此过程用于构建不经常发生而不是在每个连接上发生的redis缓存。
我想知道我是否应该在节点上同步处理查询?
我应该限制查询吗?
mysql可以同时处理多少个查询?
人们通常会做所有异步以获得最佳节点,还是需要限制某些资源?
很抱歉,如果这个问题很广泛,我只是试着了解这个异步的事情。
答案 0 :(得分:1)
mysql可以同时处理多少个查询?
32 - 64.这是实际限制,你应该做很多优化才能达到这个水平。 Mysql可以处理更多,但性能将开始降低而不是增加。
这是奇怪的。 WHERE id =?订购ID?你真的是这个意思吗?SELECT * FROM练习WHERE id =? ORDER BY id
我认为你应该加入你的表并立即从mysql中获取所有数据,然后开始处理它。数据库很容易成为瓶颈,所以你应该尽可能地使用它。
我甚至不确定您是否需要在NodeJS中执行并行执行。尝试将数据(作为您希望拥有的数据)添加到数据库,并尝试运行查询并衡量性能。