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