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

时间:2016-04-01 09:46:17

标签: gridgain ignite

请你帮我解决以下问题:

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

  • 启用了writeThrough的服务器节点。他们可以通过cacheStoreFactory=HibernateCacheStoreFactory

  • 将数据写入数据库
  • 没有writeThrough配置但使用clientMode=true

  • 的客户端节点

我执行put on client node,然后我看到,这个数据被发送到服务器节点,但是服务器节点只执行put到缓存,但是不调用cacheStoreFactory(writeThrough行为)。因此,数据仅缓存在群集中,但不会写入数据库。

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

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

在没有writeBehind的事务中,是否可以通过具有writeThrough的服务器节点从客户机节点执行put来存储数据?

1 个答案:

答案 0 :(得分:3)

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

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

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();
        }
    }
});