在我看来,Flyway在给出一个包含一些语句的SQL文件时,使用;作为分隔符(这就是我从SqlScript.execute()中理解的),逐个执行它们。因此,在远程服务器上应用补丁需要花费大量时间,因为文件的每条语句都是单独发送的。
我想知道是否有可能通过将整个文件完整发送并立即应用它来进行“批量更新”。或者可能是我们在这里遇到的一些JDBC约束?
发布于 2012-06-06 04:34:17
你的观察是正确的。
Flyway目前在单个语句中拆分文件,然后使用JDBC将这些文件发送到DBMS。
一些DBMSs驱动程序,例如来自H2和PostgreSQL的驱动程序,实际上本机支持每个Jdbc调用发送多个语句。
我选择不使用它的原因是,您可以用错误报告质量来换取潜在的性能收益。最重要的是,这个解决方案只对一小部分用户可用。
批量更新确实可以成为解决此问题的跨DBMS解决方案。由于潜在的大小爆炸和回报递减规律,批处理整个文件可能不是理想的。批量处理几个语句(比如20、50或任何最佳点)可能会被证明是有价值的。这应该不会对代码产生太大影响。如果错误报告质量(哪条语句失败)没有受到可测量的影响,性能改进是明显的,添加这一点应该是显而易见的。
如果您希望看到此功能受支持,请在问题跟踪器中提出问题。
https://stackoverflow.com/questions/10899727
复制相似问题