【问题标题】:How to use Write-behind with foreign keys in Apache Ignite如何在 Apache Ignite 中使用 Write-behind 和外键
【发布时间】:2016-08-15 16:24:00
【问题描述】:

我在尝试对连接到在它们之间具有外键约束的表的缓存上使用 write-behind 时遇到问题。看起来后写机制不是以确定的顺序执行更新/插入,而是试图以某种未知的顺序连续推送每个缓存收集的所有更改。但是由于我们在表中有外键,所以操作的顺序很重要,所以应该首先插入/更新父对象,然后才插入/更新子对象(否则从数据库中抛出外键违规)。

目前的实现似乎正在尝试在试错的基础上解决这个问题 (org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore:888),这意味着它会定期重试一次又一次地刷新缓存的更改,以防万一发生约束冲突。因此“子”缓存将定期重试刷新,直到“父”缓存首先被刷新。这最终将导致数据进入数据库,但这也意味着在复杂的分层表的情况下会进行很多不成功的尝试,直到“找到”正确的顺序。这会导致性能不佳和数据库不必要的脱壳。

您对如何规避此问题有任何建议吗?

(最初我尝试使用直写,但它导致性能非常差,因为CacheAbstractJdbcStore 似乎为每个插入/更新操作打开了一个新的准备好的语句。)

【问题讨论】:

    标签: java jdbc ignite


    【解决方案1】:

    使用后写存储更新的顺序是不确定的,因为每个节点都是独立且异步地写入的。如果你有外键约束,你应该使用直写。

    至于直写性能,CacheAbstractJdbcStore 使用可配置的DataSource 运行,因此每次是否打开新连接都取决于其实现。如果您使用一些池化版本,则不会发生这种情况。

    【讨论】:

      猜你喜欢
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 2021-01-22
      • 2021-08-11
      • 2018-03-03
      • 1970-01-01
      • 2018-12-17
      相关资源
      最近更新 更多