テーブル間に外部キー制約があるテーブルに接続されたキャッシュで後書きを使用しようとすると、問題が発生します。後書きメカニズムは、決定論的な順序で更新/挿入を実行していないように見えますが、各キャッシュごとに収集されたすべての変更を不明な順序で連続してプッシュしようとしています。ただし、テーブルに外部キーがあるため、操作の順序が重要であるため、最初に親オブジェクトを挿入/更新し、その後にのみ子を挿入/更新する必要があります (そうしないと、DB から外部キー違反がスローされます)。
現在の実装では、試行錯誤に基づいてこの問題を回避しようとしているようです ( org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore:888
)。これは、制約違反が発生した場合にキャッシュの変更を何度もフラッシュすることを定期的に再試行することを意味します。したがって、「親」キャッシュが最初にフラッシュされるまで、「子」キャッシュは定期的にフラッシュを再試行します。これにより、最終的にデータが DB に取り込まれますが、複雑な階層テーブルの場合、正しい順序が「見つかる」まで何度も失敗することになります。これにより、パフォーマンスが低下し、DB の不要なシェルが発生します。
この問題を回避する方法について何か提案はありますか?
(最初はライトスルーを試していましたが、CacheAbstractJdbcStore
挿入/更新操作ごとに新しい準備済みステートメントを開いているように見えるため、パフォーマンスが非常に低下しました。)