这个问题是为了进行延迟优化。
在pg-promise中,使用事务时何时/如何发送BEGIN和COMMIT命令?
例如,如果有代码:
db.tx(t => {
const query1 = t.none(...);
const query2 = t.none(...);
})
BEGIN
命令是否会与第一个查询一起或更早地在单独的数据包中发送?同样,COMMIT
命令会与第二个查询一起发送还是在第二个查询之后发送?
换句话说,此交易需要2、3或4次往返吗?
答案 0 :(得分:1)
我是图书馆的作者。
将BEGIN命令与第一个查询一起或更早地在单独的数据包中发送吗?
之前。
将COMMIT命令与第二个查询一起发送还是在第二个查询之后发送?
之后。
此交易需要2、3或4次往返吗?
4
您是说存在优化的空间,还是使用较低级别的库可能会有所益处(对于延迟)?
根据您要实现的目标,可能会有一些。默认实现使处理事务逻辑和记录正在发生的一切变得容易/标准(请参见pg-monitor)。一切都在方法tx
中进行了优化,这使得在逻辑上以安全的方式轻松处理任何情况变得容易。
如果您需要执行大量的微交易,那是唯一需要对其进行优化的情况,因为否则,就性能而言,这样做是不值得的。
在一种非常特殊的情况下,您可能希望通过将所有查询串联为一个查询来执行整个事务。为此,提供了一种方法helpers.concat,它可以帮助您动态地构建这样的串联查询。
值得注意的是,如果您需要嵌套事务,那么就无法对其进行优化,因为嵌套事务的逻辑深深地依赖于被转换为Promise并随后以与PostgreSQL事务逻辑。如果您尝试解决此问题,则可能会崩溃,因为嵌套事务通常太复杂而无法手动处理。