1

据我所见,Flyway 在给定带有一些语句的 SQL 文件时,会使用 ; 一个一个地执行它们。作为分隔符(这是我从 SqlScript.execute() 中理解的)。因此,在远程服务器上应用补丁需要大量时间,因为文件的每个语句都是单独发送的。

我想知道是否可以通过将整个文件一次性发送然后立即应用来进行“批量更新”。或者也许是我们在这里遇到的一些 JDBC 约束?

4

1 回答 1

3

你的观察是正确的。

Flyway 当前将文件拆分为单个语句,然后使用 JDBC 将其发送到 DBMS。

一些 DBMS 的 Jdbc 驱动程序,例如来自 H2 和 PostgreSQL 的驱动程序,实际上本机支持每个 jdbc 调用发送多个语句。

我选择不使用它的原因是你用错误报告质量换取潜在的性能提升。最重要的是,此解决方案仅适用于少数用户。

批量更新确实可以成为解决此问题的跨 DBMS 解决方案。由于潜在的大小爆炸和收益递减规律,批处理整个文件可能不是理想的选择。批量处理一些语句(比如 20、50 或任何最佳位置)可能会被证明是有价值的。这不应该对代码产生太大影响。如果错误报告质量(哪个语句失败)没有受到明显影响并且性能改进是可见的,那么添加它应该是不费吹灰之力。

如果您希望看到此支持,请在问题跟踪器中提出问题。

于 2012-06-05T20:34:16.910 回答