Ignite 客户端节点不会通过服务器节点将数据放入数据库(只在服务器上使用 writeThrough,没有 writeBehind)

Ignite client node does not put data though server nodes to DB (with writeThrough only on server, without writeBehind)

能否请您帮我解决以下问题:

我有以下分区缓存集群配置:

我在客户端节点上执行 put,然后我看到,该数据被发送到服务器节点,但服务器节点仅执行 put 到缓存,但不调用 cacheStoreFactory(writeThrough 行为)。所以,数据只是缓存在集群中,并没有写入DB。

如果我向客户端节点添加 writeThrough 配置,当然会调用 writeThrough,但我想从客户端节点中删除对 Hibernate 的任何依赖。

此外,如果我在服务器端启用 writeBehind 配置,则会调用 writeThrough 功能,并且服务器节点将数据从客户端节点异步写入数据库。但是它不满足我的要求,因为我想在一个事务中从客户端节点执行puts。

是否可以在没有writeBehind的情况下从客户端节点执行put以通过writeThrough在事务中存储数据?

事务缓存从发起事务的节点(在您的情况下是客户端节点)写入持久性存储。这样做是因为事务可能包含存储在不同节点上的条目,如果存储也将从不同节点更新,则不可能保持缓存和数据库之间的事务一致性。

如果您无权访问客户端上的数据库,您可以向其中一台服务器发送一个闭包并在那里启动一个事务,如下所示:

Ignition.ignite().compute().run(new IgniteRunnable() {
    @IgniteInstanceResource
    private Ignite ignite;

    @Override public void run() {
        try (Transaction tx = ignite.transactions().txStart()) {
            // Cache operations go here...

            tx.commit();
        }
    }
});