2015-06-22 3 views
5

Ich habe einen Cache mit automatischer Persistenz erstellt, Verbindung mit Mysql-Datenbank. 1 Million Zeilen werden beim Start in diesen Knoten gefüllt. Knoten ist im Modus PARTITIONEDApache zünden Abfrage

Wenn ich versuche, Daten aus diesem Cache mit SQL-Abfragen abzurufen, wird immer ein leeres Array zurückgegeben. Ich habe den Cache mit "CacheTypeMetadata" indiziert.

Bitte könnte jemand darauf hinweisen, was ich verpasst habe oder falsch gemacht habe. Ich habe die Tutorials verfolgt, aber ich kann nicht herausfinden, warum meine Anfrage nicht gut funktioniert.

Vielen Dank im Voraus!

  1. Cache:

    CacheConfiguration CFG = CacheConfigMd5.cache ("DataMd5Cache", New JDBCFactory());

  2. DataLoaderMd5Key ::

    public class Dataloadermd5Key implementiert Serializable { /** */ private static final lange serialVersionUID = 0L;

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

    ...}

  3. DataLoaderMd5 ::

    public class DataLoaderMd5 Serializable implementiert { /** */ private static final lange serialVersionUID = 0L;

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

    ..}

  4. CacheConfigMd5 ::

    public static CacheConfiguration Cache (String name, Factory> storeFactory) { if (storeFactory == null) throw new Illegal ("Cache Ladenfabrik kann nicht null sein. ");

    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; 
    } 
    
    1. Abfrage ::

    Ignite entzünden = Ignition.start ("Beispiele/config/example-cache.xml"); IgniteCache cache = ignite.cache (CACHE_NAME); Dataloadermd5Key key = neuer Dataloadermd5Key(); Schlüssel.setIdClient (98255); key.setClientPropId ("1000008");

    SqlQuery qry = neue SqlQuery (DataLoaderMd5.class, "idClient =? Und clientPropId =?");

    // Exakte Abfrage System.out.println ("sqlQuery-Suchergebnis ::" + cache.query (qry) .getAll());

    System.out.println ("sqlQuery-Suchergebnis ::" + cache.query (qry.setArgs (key.getIdClient(), key.getClientPropId())).Nimm alle());

Antwort

2

Ich fand das Problem. Es war wegen meiner Ignite-Version. Ich aktualisierte die Version auf meinem Maven 1.1.0, und der Code begann gut zu funktionieren.

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