我可以使用一个到postgresql的连接并在多个线程中使用它吗?

jfewjypa  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(271)

我用knex在nodejs中编写,我想更新数据库中的多行,我想知道是否可以并行执行多个更新查询,
这样地:

const updatesPromises = books.map((book) =>
    transaction('books')
      .where({ id: book.id })
      .update({ title: book.name }, ['id', 'title'])    

await Promise.all(updatesPromises)

而是同步执行每个更新查询,如下所示:

books.forEach(async (book) =>
    await transaction('books')
      .where({ id: 42 })
      .update({ title: "The Hitchhiker's Guide to the Galaxy" }, ['id', 'title'])
``` `transaction` 是我之前创建的连接,在所有更新之后提交
这是最佳实践吗?
它会导致大规模的问题吗?
ki0zmccv

ki0zmccv1#

我想知道是否可以并行执行多个更新查询
不支持。单个连接只支持顺序执行查询。 node-postgres 不会阻止您一次发出多个呼叫,但它会在内部对它们进行排队,因此您不会从一次创建所有承诺和呼叫中获得任何好处 Promise.all 在他们身上。
(也就是说,我不知道该怎么做 transaction 如果它使用连接池,它实际上可能不会将您限制为单个连接。但是,如果您为多个http客户机提供服务,那么这不是最佳做法,您应该只对每个http请求使用连接。)

相关问题