node.js - 我在锤击我的数据库吗?

时间:2012-02-15 01:17:26

标签: mysql node.js

我是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可以同时处理多少个查询?

人们通常会做所有异步以获得最佳节点,还是需要限制某些资源?

很抱歉,如果这个问题很广泛,我只是试着了解这个异步的事情。

1 个答案:

答案 0 :(得分:1)

  

mysql可以同时处理多少个查询?

32 - 64.这是实际限制,你应该做很多优化才能达到这个水平。 Mysql可以处理更多,但性能将开始降低而不是增加。

  

SELECT * FROM练习WHERE id =? ORDER BY id

这是奇怪的。 WHERE id =?订购ID?你真的是这个意思吗?

我认为你应该加入你的表并立即从mysql中获取所有数据,然后开始处理它。数据库很容易成为瓶颈,所以你应该尽可能地使用它。

我甚至不确定您是否需要在NodeJS中执行并行执行。尝试将数据(作为您希望拥有的数据)添加到数据库,并尝试运行查询并衡量性能。