【发布时间】:2016-08-15 16:24:00
【问题描述】:
我在尝试对连接到在它们之间具有外键约束的表的缓存上使用 write-behind 时遇到问题。看起来后写机制不是以确定的顺序执行更新/插入,而是试图以某种未知的顺序连续推送每个缓存收集的所有更改。但是由于我们在表中有外键,所以操作的顺序很重要,所以应该首先插入/更新父对象,然后才插入/更新子对象(否则从数据库中抛出外键违规)。
目前的实现似乎正在尝试在试错的基础上解决这个问题 (org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore:888),这意味着它会定期重试一次又一次地刷新缓存的更改,以防万一发生约束冲突。因此“子”缓存将定期重试刷新,直到“父”缓存首先被刷新。这最终将导致数据进入数据库,但这也意味着在复杂的分层表的情况下会进行很多不成功的尝试,直到“找到”正确的顺序。这会导致性能不佳和数据库不必要的脱壳。
您对如何规避此问题有任何建议吗?
(最初我尝试使用直写,但它导致性能非常差,因为CacheAbstractJdbcStore 似乎为每个插入/更新操作打开了一个新的准备好的语句。)
【问题讨论】: