首页 文章

Apache Ignite sql查询仅返回缓存内容,而不是数据库的完整结果

提问于
浏览
0

我的Ignite节点(2个服务器节点 - 我们称之为A和B)配置如下:

ccfg.setCacheMode(CacheMode.PARTITIONED);
ccfg.setAtomicityMode(CacheMode.TRANSACTIONAL);
ccfg.setReadThrough(true);
ccfg.setWriteThrough(true);
ccfg.setWriteBehindEnabled(true);
ccfg.setWriteBehindBatchSize(10000);

节点A首先从命令行启动,如下所示:

apache-ignite-fabric-2.2.0-bin>bin/ignite.bat config/default-config.xml

节点B通过运行从java代码启动

public static void main(String[] args) throws Exception {
    Ignite ignite = Ignition.start(ServerConfigurationFactory.createConfiguration());
    ignite.cache("MyCache").loadCache(null);
...
}

(包含ServerConfigurationFactory的jar放在apache-ignite-fabric-2.2.0-bin \ libs目录中,因此节点A和B位于同一个集群上 . 另外存在错误)

我有一个查询应该从数据库返回9061结果 . 在节点B中的缓存加载过程之后,我转到Web控制台并针对缓存运行了一个简单的计数SQL语句 . 有一个按钮"Execute on selected node",允许您选择要查询的特定缓存 . 我查询了Node A并获得了2341的计数,并且在Node BI上获得了2064的计数 . 如果我只使用"Execute"按钮,我得到的是4405,它只是节点A和B的总和 . 显然它们缺少4656条记录(9061) db-4405中节点A和B中的总记录 . 我还使用 SqlFieldsQuery 在Java代码中运行相同的计数查询,我也得到4405 .

由于readThrough设置为 true ,我希望Ignite也返回不在内存中的结果 . 但事实并非如此,因为它只返回缓存中的任何内容 . 我在这里做错了吗?谢谢 .

1 回答

相关问题