我已经使用Automatic Persistence创建了一个缓存,连接到Mysql数据库。 启动时将1百万行填充到该节点中。节点处于PARTITIONED模式apache点燃查询
当我尝试使用SQL查询从该缓存中检索数据时,它始终返回空数组。 我使用“CacheTypeMetadata”对缓存进行了索引。
请任何人都可以指出我错过了什么,或者做错了。我一直在关注教程,但我无法弄清楚为什么我的查询不能正常工作。
在此先感谢!
缓存:
CacheConfiguration CFG = CacheConfigMd5.cache( “DataMd5Cache”,新JDBCFactory());
DataLoaderMd5Key ::
公共类Dataloadermd5Key实现Serializable { /** */ 私有静态最后的serialVersionUID长= 0L;
/** Value for idClient. */ private int idClient; /** Value for clientPropId. */ private String clientPropId;
...}
DataLoaderMd5 ::
公共类DataLoaderMd5实现Serializable { /** */ 私有静态最后的serialVersionUID长= 0L;
/** Value for idClient. */ private int idClient; /** Value for clientPropId. */ private String clientPropId; /** Value for md5. */ private String md5;
..}
CacheConfigMd5 ::
公共静态CacheConfiguration缓存(字符串名称,工厂> storeFactory){ 如果(storeFactory == NULL) 抛出新抛出:IllegalArgumentException(“缓存存储工厂不能为空。“);
CacheConfiguration<K, V> ccfg = new CacheConfiguration<>(name); ccfg.setCacheStoreFactory(storeFactory); ccfg.setReadThrough(true); ccfg.setWriteThrough(true); // Configure cache types. Collection<CacheTypeMetadata> meta = new ArrayList<>(); // DataLoaderMd5. CacheTypeMetadata type = new CacheTypeMetadata(); meta.add(type); type.setDatabaseSchema("abc"); type.setDatabaseTable("dfg"); type.setKeyType(Dataloadermd5Key.class.getName()); type.setValueType(DataLoaderMd5.class.getName()); // Key fields for DataLoaderMd5. Collection<CacheTypeFieldMetadata> keys = new ArrayList<>(); keys.add(new CacheTypeFieldMetadata("id_client", Types.INTEGER, "idclient", int.class)); keys.add(new CacheTypeFieldMetadata("client_prop_id", Types.VARCHAR, "clientPropId", String.class)); type.setKeyFields(keys); // Value fields for DataLoaderMd5. Collection<CacheTypeFieldMetadata> vals = new ArrayList<>(); vals.add(new CacheTypeFieldMetadata("id_client", Types.INTEGER, "idclient", int.class)); vals.add(new CacheTypeFieldMetadata("client_prop_id", Types.VARCHAR, "clientPropId", String.class)); vals.add(new CacheTypeFieldMetadata("Md5", Types.VARCHAR, "md5", String.class)); type.setValueFields(vals); // Query fields for DataLoaderMd5. Map<String, Class<?>> qryFlds = new LinkedHashMap<>(); qryFlds.put("idclient", int.class); qryFlds.put("clientPropId", String.class); qryFlds.put("md5", String.class); type.setQueryFields(qryFlds); // Groups for DataLoaderMd5. Map<String, LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>>> grps = new LinkedHashMap<>(); LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>> grpItems = new LinkedHashMap<>(); grpItems.put("idclient", new IgniteBiTuple<Class<?>, Boolean>(int.class, false)); grpItems.put("clientPropId", new IgniteBiTuple<Class<?>, Boolean>(String.class, false)); grps.put("PRIMARY", grpItems); type.setGroups(grps); ccfg.setTypeMetadata(meta); return ccfg; }
- 查询::
的Ignite点燃= Ignition.start( “实例/配置/例子-cache.xml”); IgniteCache cache = ignite.cache(CACHE_NAME); Dataloadermd5Key key = new Dataloadermd5Key(); key.setIdClient(98255); key.setClientPropId(“1000008”); SqlQuery qry = 新的SqlQuery(DataLoaderMd5.class,“idClient =?和clientPropId =?”);
// Excecute query System.out.println(“sqlQuery Lookup result ::”+ cache.query(qry).getAll()); System.out.println(“sqlQuery Lookup result ::”+ cache.query(qry.setArgs(key.getIdClient(),key.getClientPropId()))。得到所有());