我们使用ignite 2.0.0版本实现了一个缓存解决方案,用于这样的数据结构。
public class EntityPO {
@QuerySqlField(index = true)
private Integer accessZone;
@QuerySqlField(index = true)
private Integer appArea;
@QuerySqlField(index = true)
private Integer parentNodeId;
private Integer dbId;
}
List<EntityPO> nodes = new ArrayList<>();
SqlQuery<String, EntityPO> sql =
new SqlQuery<>(EntityPO.class, "accessZone = ? and appArea = ? and parentNodeId is not null");
sql.setArgs(accessZoneId, appArea);
CacheConfiguration<String, EntityPO> cacheconfig = new
CacheConfiguration<>(cacheName);
cacheconfig.setCacheMode(CacheMode.PARTITIONED);
cacheconfig.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cacheconfig.setIndexedTypes(String.class, EntityPO.class);
cacheconfig.setOnheapCacheEnabled(true);
cacheconfig.setBackups(numberOfBackUpCopies);
cacheconfig.setName(cacheName);
cacheconfig.setQueryParallelism(1);
cache = ignite.getOrCreateCache(cacheconfig);
我们有在特定accessZone和appArea中查找节点的方法。此方法在2.0.0中正常工作,我们升级到最新版本2.4.0版本,此方法不再返回任何内容(零记录)。我们启用了H2调试控制台并运行相同的查询,我们看到相同的至少3k记录。将库降级回2.0.0会使代码再次运行。如果您需要更多信息来帮助解决此问题,请与我们联系
来自H2控制台的结果。 H2 Console Results
答案 0 :(得分:0)
如果您使用持久性,请检查群集的基线拓扑。 Baseline Topology是2.4版本中引入的主要功能。 简而言之,基线拓扑是可以存储数据的集合服务器节点。很可能是您的问题的原因是一个或多个服务器节点不在基线中。