这个问题主要是关于在nodejs中编写查询的最佳实践。我们引用了一些教程,但未能得出结论。
我们有一个 Node js API 层,主要用于读写数据库。这是示例代码:
pool.query("update node SET changed = " + params.updationTime + " where nid = " + params.nid);
pool.query("update node_revision SET timestamp = " + params.updationTime +" where nid = " + params.nid);
pool.end();
这是编写代码的正确方法吗?还是我们应该以异步格式本身编写 SQL 查询。
最佳答案
如果您的池配置允许多个连接,则两个查询可能会并行执行。调用类型本身并不重要。此示例需要 2 秒才能完成:
connection.query('select sleep(1)');
connection.query('select sleep(1)', function() { console.log('done!') });
还有这个:
connection.query('select sleep(1)', function() {
connection.query('select sleep(1)', function() {
console.log('done!')
});
});
因为mysql协议(protocol)本身是“顺序的”(也就是说,只有在完全接收到前一个查询的结果后,客户端才允许发送下一个查询)。大多数异步客户端通过在内部对命令进行排队来隐藏此限制。如果有两个连接,查询实际上是并行进行的:
connection1.query('select sleep(1)', function() { console.log('done1') });
connection2.query('select sleep(1)', function() { console.log('done2') });
“done1”和“done2”将在大约 1 秒后出现在屏幕上
pool.query
是 pool.getConnection()
+ connection.query()
+ connection.release( )
- 参见readme
关于mysql - 在nodejs中编写SQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26628111/