Hi All,

I am experiencing an issue while trying to use write-behind on caches
connected to tables which have foreign key constraints between them.
Seemingly the write-behind mechanism is not executing the updates/inserts in
a deterministic order, but rather is trying to push all the collected
changes per each cache consecutively in some unknown order. But as we have
foreign keys in the tables, the order of the operation matters, so parent
objects should be inserted/updated first, and children only after that
(otherwise foreign key violations are thrown from the DB).

It seems that the current implementation is trying to workaround this
problem on a trial-and-error basis
(org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore:888), which means
that it will periodically retry to flush the changes again and again for the
caches in case of which a constraint violation occured. So the "child" cache
will periodically retry to flush, until the "parent" cache gets flushed
first. This ultimately will result in getting the data into the DB, but it
also means a lot of unsuccessful tries in case of complex hierarchical
tables, until the correct order is "found". This results in poor performance
and unnecessary shelling of the DB.

Do you have any suggestions how could I circumvent this issue?

(Initially I were trying with write-through, but it resulted in VERY poor
performance, because the CacheAbstractJdbcStore is seemingly opening a new
prepared statement for each insert/update operation.)

(Using Ignite 1.4)



--
View this message in context: 
http://apache-ignite-users.70518.x6.nabble.com/Write-behind-and-foreign-keys-in-DB-tp4415.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

Reply via email to