2017-10-14 12 views
2

Was ist der Zweck von 'setInitialQuery'?Apache Ignite - Kontinuierliche Abfrage

IgniteCache<Integer, String> cache = ignite.cache("mycache"); 

// Create new continuous query. 
ContinuousQuery<Integer, String> qry = new ContinuousQuery<>(); 

// Optional initial query to select all keys greater than 10. 
qry.setInitialQuery(new ScanQuery<Integer, String>((k, v) -> k > 10)): 

// Callback that is called locally when update notifications are received. 
qry.setLocalListener((evts) -> 
    evts.forEach(e -> System.out.println("key=" + e.getKey() + ", val=" + e.getValue()))); 

// This filter will be evaluated remotely on all nodes. 
// Entry that pass this filter will be sent to the caller. 
qry.setRemoteFilter(e -> e.getKey() > 10); 

// Execute query. 
try (QueryCursor<Cache.Entry<Integer, String>> cur = cache.query(qry)) { 
    // Iterate through existing data stored in cache. 
    for (Cache.Entry<Integer, String> e : cur) 
    System.out.println("key=" + e.getKey() + ", val=" + e.getValue()); 

    // Add a few more keys and watch a few more query notifications. 
    for (int i = 5; i < 15; i++) 
    cache.put(i, Integer.toString(i)); 
} 

Code oben funktioniert ohne Einstellung der ersten Abfrage. Versuchen zu verstehen, wann 'setInitialQuery' verwenden würde.

Antwort

1

Die erste Abfrage ermöglicht es, den Cursor über Daten zu bewegen, die sich bereits im Cache befinden, bevor Sie nach Updates suchen. Es ist in der Tat optional.