Je comprends que le NearCache n'est chargé qu'après la première opération d'obtention de cette clé sur le IMap. Mais je suis intéressé à savoir s'il existe un moyen de déclencher le préchargement de NearCache avec toutes les entrées de son cluster.Comment déclencher le préchargement de Hazelcast NearCache?
Cas d'utilisation:
La clé est un simple objet de haricot et la valeur est un objet de type DAO TIntHashMap contenant beaucoup d'entrées.
Taille:
La taille des plages d'objet de valeur, de 0,1 Mo à 24 Mo (et> 90% des entrées ont moins de 5 Mo). Le nombre d'entrées varie de 150 à 250 dans l'IMap.
Repères:
Le premier appel à l'opération get prend 2-3 secondes et plus tard les appels prennent < 10 ms.
Maintenant j'ai créé ci-dessous une routine qui lit le IMap et lit chaque entrée pour rafraîchir le NearCache.
long startTime = System.currentTimeMillis();
IMap<Object, Object> map = client.getMap("utility-cache");
log.info("Connected to the Cache cluster. Starting the NearCache refresh.");
int i = 0;
for (Object key : map.keySet()) {
Object value = map.get(key);
if(log.isTraceEnabled()){
SizeOf sizeOfKey = new SizeOf(key);
SizeOf sizeOfValue = new SizeOf(value);
log.info(String.format("Size of %s Key(%s) Object = %s MB - Size of %s Value Object = %s MB", key.getClass().getSimpleName(), key.toString(),
sizeOfKey.sizeInMB(), value.getClass().getSimpleName(), sizeOfValue.sizeInMB()));
}
i++;
}
log.info("Refreshed NearCache with " + i + " Entries in " + (System.currentTimeMillis() - startTime) + " ms");
Merci. C'est la caractéristique que je cherchais. Mais pourquoi pré-extraire uniquement la clé et extraire les valeurs du cluster? Dans notre application, nous stockons les instances client sous forme de singletons afin de ne les connecter qu'une seule fois et de les réutiliser pour toutes les connexions futures. Cette fonctionnalité va-t-elle nous aider dans notre cas d'utilisation? –
La fonctionnalité est destinée à remplir à nouveau le cache proche avec les données précédentes aussi vite que possible, lorsque vous devez redémarrer votre application. En attendant, les données peuvent être modifiées. Pour éviter les données périmées, nous stockons simplement les clés. Comme je l'ai dit, pour la première population initiale, cela ne servira à rien. Il est destiné à remplir à nouveau le cache proche après un redémarrage. – Donnerbart
D'accord, j'ai compris. Je vous remercie. À l'heure actuelle, nous sommes toujours sur la production 3.6.2, donc une fois que 3.8 est stable, je vais le suggérer à notre direction. –