2016-04-05 4 views
1

Ich bin ein Anfänger bei Ignite. Ich mache eine Beispiel-App, um die Abfragezeiten zu messen.Map Objekt Abfrage über zünden

Also der Schlüssel im Cache ist String, Wert ist Map. Ein des Feldes im Wert Karte ist „order_item_subtotal“ so die Abfrage wie ist:

select * from Map where order_item_subtotal>400 

Und der Beispielcode ist:

Ignite ignite= Ignition.ignite(); 
IgniteCache<String, Map<String, Object>> dummyCache= ignite.getOrCreateCache(cfg); 
Map<String,Map<String, Object>> bufferMap=new HashMap<String,Map<String, Object>>(); 

int i=0; 
for (String jsonStr : jsonStrs) { 
    if(i%1000==0){ 
     dummyCache.putAll(bufferMap); 
     bufferMap.clear(); 
    } 
    Map data=mapper.readValue(jsonStr, Map.class); 
    bufferMap.put(data.get("order_item_id").toString(), data); 
    i++; 
} 

SqlFieldsQuery asd=new SqlFieldsQuery("select * from Map where order_item_subtotal>400"); 

List<List<?>> result= dummyCache.query(asd).getAll(); 

Aber das Ergebnis ist immer „[]“ bedeutet leer. Und es gibt keinen Fehler oder Ausnahmen.

Was fehlt mir hier? irgendwelche Ideen?

PS: Beispieldaten unter

{order_item_id=99, order_item_order_id=37, order_item_product_id=365, order_item_quantity=1, order_item_subtotal=59.9900016784668, order_item_product_price=59.9900016784668, product_id=365, product_category_id=17, product_name=Perfect Fitness Perfect Rip Deck, product_description=, product_price=59.9900016784668, product_image=http://images.acmesports.sports/Perfect+Fitness+Perfect+Rip+Deck} 

Antwort

2

Dies wird nicht unterstützt. Sie sollten eine einfache POJO-Klasse anstelle einer Map verwenden, damit es funktioniert.

Beachten Sie, dass Ignite Daten im Binärformat speichert und Objekte beim Ausführen von Abfragen nicht deserialisiert. Sie müssen also keine Klassendefinitionen auf dem Server-Knoten bereitstellen. Weitere Informationen finden Sie auf dieser Seite: https://apacheignite.readme.io/docs/binary-marshaller

+0

Scheint so :(Fälle wie meine, benötigen die Erweiterung von Datenstrukturen in der Laufzeit und fehlende Fähigkeit, expandierende Daten abzufragen, ist definitiv ein Problem, das behoben werden muss. Thx – Neron

+0

@Neron Sie können das Schema dynamisch ändern, wenn das Binärformat verwendet wird (das ist das Standardformat): https://apacheignite.readme.io/docs/binary-marshaller Sie können sogar 'BinaryObjectBuilder' verwenden und haben keine Klassendefinitionen Die einzige aktuelle Einschränkung ist, dass das SQL-Schema immer noch statisch ist, dh wenn Sie ein Feld hinzufügen, können Sie es nicht in einer Abfrage verwenden oder es indizieren. Dies wird in zukünftigen Releases behoben. –

+0

Danke für die Erklärung, I war zu diesem Zeitpunkt auch :) das macht Speicher auch unempfindlich gegen Polymorphie, wenn wir versuchen, es abzufragen – Neron