2017-09-05 2 views
0

Nous voulons mettre en cache certaines entrées (c'est-à-dire en fonction du prédicat) dans le cache de requêtes en continu sur le client pour IMap. Mais nous voulons envoyer une mise à jour à CQC seulement après quelques secondes de retard (c'est-à-dire 30 secondes) même si les entrées reçoivent comme 100 mises à jour par seconde. Cela nous pouvons atteindre en réglant les secondes de retard à 30 secondes & coalescer à vrai.Cache de requête continue Hazelcast - Capacité de taille de lot et coalescence

QueryCacheConfig cqc = new QueryCacheConfig(); 
cqc.setDelaySeconds(30); 
cqc.setCoalesce(true); 
cqc.setBatchSize(30) 

CQC s'adapte parfaitement bien au cas d'utilisation ci-dessus.

Mais nous remarquons que CQC ne reçoit pas de mises à jour après quelques secondes jusqu'à ce que la capacité du lot ne soit pas atteinte. Est-ce le comportement attendu? Nous avons pensé que CQC recevrait la dernière valeur mise à jour pour les entrées après que les secondes de retard ou la taille de lot aient atteint sa capacité.

+0

Pouvez-vous également partager un reproducteur? A partir de mes essais, cela semble fonctionner. – mrck

+0

@mrck - un bug a été rapporté https://github.com/hazelcast/hazelcast/issues/11331 – Hiten

+0

Oui signalé mais le reproducteur ne semble pas utile car il montre finalement le comportement attendu. Si vous avez un autre reproducteur, ce serait génial de le voir. – mrck

Répondre

0

delaySeconds et la commande batchSize 'OR'. Les mises à jour sont transmises aux caches soit lorsque batchSize est atteint, soit lorsque delaySeconds est passé. Si coalesce est true, seule la dernière mise à jour d'une clé est mise en cache.

Nous avons remarqué quelques problèmes lors du test avec intellij. s'il vous plaît essayer d'utiliser un autre IDE si vous utilisez intellij