2015-06-22 136 views
5

我已经使用Automatic Persistence创建了一个缓存,连接到Mysql数据库。 启动时将1百万行填充到该节点中。节点处于PARTITIONED模式apache点燃查询

当我尝试使用SQL查询从该缓存中检索数据时,它始终返回空数组。 我使用“CacheTypeMetadata”对缓存进行了索引。

请任何人都可以指出我错过了什么,或者做错了。我一直在关注教程,但我无法弄清楚为什么我的查询不能正常工作。

在此先感谢!

  1. 缓存:

    CacheConfiguration CFG = CacheConfigMd5.cache( “DataMd5Cache”,新JDBCFactory());

  2. DataLoaderMd5Key ::

    公共类Dataloadermd5Key实现Serializable { /** */ 私有静态最后的serialVersionUID长= 0L;

    /** Value for idClient. */ 
    private int idClient; 
    
    /** Value for clientPropId. */ 
    private String clientPropId; 
    

    ...}

  3. DataLoaderMd5 ::

    公共类DataLoaderMd5实现Serializable { /** */ 私有静态最后的serialVersionUID长= 0L;

    /** Value for idClient. */ 
    private int idClient; 
    
    /** Value for clientPropId. */ 
    private String clientPropId; 
    
    /** Value for md5. */ 
    private String md5; 
    

    ..}

  4. 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; 
    } 
    
  5. 查询::

的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()))。得到所有());

回答

2

我发现了这个问题。这是因为我的Ignite版本。 我更新了我的maven版本到1.1.0,并且代码开始正常工作。

<dependency> 
     <groupId>org.apache.ignite</groupId> 
     <artifactId>ignite-indexing</artifactId> 
     <version>1.1.0-incubating</version> 
    </dependency>