这个问题主要是关于在nodejs中编写查询的最佳实践。我们已经推荐了几个教程,但未能得出结论。
我们有一个节点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查询。
答案 0 :(得分:0)
如果您的池配置允许多个连接,则可能两个查询并行执行。通话类型本身无关紧要。此示例需要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协议本身是"顺序" (即,只有在完全接收到之前的结果后,才允许客户端发送下一个查询)。大多数异步客户端通过在内部排队命令来隐藏此限制。如果有两个连接,查询实际上是并行的:
connection1.query('select sleep(1)', function() { console.log('done1') });
connection2.query('select sleep(1)', function() { console.log('done2') });
" DONE1"和"完成2"两者都将在大约1秒内出现在屏幕上
pool.query
是pool.getConnection()
+ connection.query()
+ connection.release()
的shorlcut - 请参阅readme
答案 1 :(得分:0)
在NodeJS中编写SQL查询时,我无法提升Knex.js!
对于您的具体问题,您只需进行查询并执行它们(使用回调或Promises),Knex连接池将处理所有池,并且通常情况下只适合您。
你会喜欢它,试一试:)
答案 2 :(得分:0)
我建议你使用sails.js(http://sailsjs.org/#/)框架,它使用水线查询语言(http://sailsjs.org/#/documentation/concepts/ORM/Querylanguage.html)从mySQL / mongodb / Redis数据库中检索数据。