[英]Transaction ACID properties with Hibernate Search + Infinispan Directory
我有以下设置:
Infinispan作为二级缓存很好,不需要恢复,并且由于Cache的性质,您可以读取自己事务中的更改。
在阅读源代码几小时后,当我更新实体时,Hibernate Search不会更新Lucene目录,但是在事务结束时(如果它提交),所以我想搜索我刚刚更新的文本,在同一笔交易里面,我不能吗?
但是,在事务完成后,Hibernate Search会在不同的线程中对Directory进行更新。 因此,如果其中一个目录更新失败,那么Lucene将与我的实体不一致? 如果在将更新发送到目录并且需要恢复之前发生了某些事情,这些更新是否会丢失?
假设此“第一”事务成功提交,更新将发送到Infinispan目录。 这里将开始一项新交易。 通过谁? Lucene可以选择使用JMS发送更新。 假设选项已激活,因此JMS消息初始化新事务。
Infinispan将使用它接收的更新修改其内存目录,但是在提交后,持久的CacheStore将在此事务完成时再次更新。 因此,如果在更新jdbc CacheStore时发生某些事情,它将有可能没有更新,但Infinispan Memory Directory将应用它们。
我的问题是,考虑到我使用的所有模块都支持事务,并且他们甚至支持加入全局事务(XA), 是否有办法实现真正的事务性? 也许我只是没有看到它。
我正在进行一个非常类似的设置。 使用这些版本,真正的事务性是不可能的。 有几个原因,其中一些你注意到:
这里的事务阶段很重要,因为最终插入到数据库中需要在事务的主体中完成并在最后提交。
我的解决方案是忽略索引更新的事务性,在我的情况下并不是绝对必要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.