如果同时使用MapStore和XA,Hazelcast如何更新持久性

如果同时使用MapStore和XA,Hazelcast如何更新持久性,hazelcast,hazelcast-imap,Hazelcast,Hazelcast Imap,各位,我一直在努力寻找一个简单场景的答案,这个场景需要在我的应用程序中得到支持 想象一下,我的应用程序有一个Hazelcast映射,可以将数据持久化到MySQL数据库。为了实现这一点,我将继续实现MapStore接口。很好,我达到了要求的耐用性 但是,有些操作必须以事务方式更新HZ map和MySQL。根据DOCS,MapStore不支持这一点,我应该考虑XA。这没什么大不了的,也没什么大不了的;我可以依靠XA来实现这一点 目前还不清楚HZ将如何考虑现在MyStand和XA都连接到MySQL。具

各位,我一直在努力寻找一个简单场景的答案,这个场景需要在我的应用程序中得到支持

想象一下,我的应用程序有一个Hazelcast映射,可以将数据持久化到MySQL数据库。为了实现这一点,我将继续实现MapStore接口。很好,我达到了要求的耐用性


但是,有些操作必须以事务方式更新HZ map和MySQL。根据DOCS,MapStore不支持这一点,我应该考虑XA。这没什么大不了的,也没什么大不了的;我可以依靠XA来实现这一点

目前还不清楚HZ将如何考虑现在MyStand和XA都连接到MySQL。具体而言,如果我在事务中更新密钥A,无论发生1还是2: 1.键可以保存两次-通过MapStore接口和XA调用。


2.HZ检测到XA显示并跳过对MapStore的调用。

如果使用XA事务更新持久存储,则需要手动禁用MapStore实现。Hazelcast没有任何内部机制在使用XA事务时禁用MapStore。如果不禁用它,可能会将同一个密钥持久化两次。

不确定这种方法是否适合我的情况。如果在事务运行时禁用MapStore,则该存储可能会错过其他非事务更新。为了防止这种情况,我需要在MapStore级别将更新堆叠起来,并在事务提交后将其持久化。这也不理想,因为如果节点崩溃并处理条目版本控制,我可能会丢失更新。在您的情况下,同时使用MapStore和XA是没有意义的。如果您需要一些更新在持久性存储上是事务性的,那么您需要使用XA执行所有持久性存储更新。或者您可以使用两个不同的映射—一个带有常规MapStore的映射用于非事务性更新,另一个带有XA的映射用于事务性更新,如果它适合您的用例的话。有些操作必须以事务方式更新HZ map和MySQL->您不能使用它吗?直写操作仅在可以持久化到DB并放入集群时返回。