1

私が見たところ、Flywayは、いくつかのステートメントを含むSQLファイルが与えられると、;を使用してそれらを1つずつ実行します。区切り文字として(これは、SqlScript.execute()から理解したものです)。このため、リモートサーバーにパッチを適用するには、ファイルの各ステートメントが個別に送信されるため、多くの時間がかかります。

ファイル全体をまとめて送信し、一度に適用することで「バッチ更新」ができるのではないかと思います。それとも、ここで苦労しているのはJDBCの制約ですか?

4

1 に答える 1

3

あなたの観察は正しいです。

Flywayは現在、ファイルを1つのステートメントに分割し、JDBCを使用してDBMSに送信します。

H2やPostgreSQLのDBMSJdbcドライバーなど、一部のDBMS Jdbcドライバーは、実際には、jdbc呼び出しごとに複数のステートメントを送信することをネイティブにサポートしています。

これを使用しないことを選択した理由は、エラーレポートの品質を潜在的なパフォーマンスの向上と交換するためです。その上、このソリューションは少数のユーザーしか利用できません。

バッチ更新は、実際、この問題に対するクロスDBMSソリューションになる可能性があります。サイズが急増する可能性があり、収穫逓減の法則があるため、ファイル全体をバッチ処理することはおそらく理想的ではありません。いくつかのステートメント(たとえば、20、50、またはスイートスポットであることが判明したもの)をバッチ処理すると、価値があることがわかります。これはコードにあまり影響を与えないはずです。エラー報告の品質(どのステートメントが失敗したか)に測定可能な影響がなく、パフォーマンスの向上が見られる場合は、これを追加するのは簡単です。

これがサポートされていることを確認したい場合は、課題追跡システムで課題を提起してください。

于 2012-06-05T20:34:16.910 に答える