2017-01-04 1 views
0

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"); 

Répondre

1

Comme vous l'avez dit, le Proche Cache se peuplé sur get() invite IMap ou JCache structures de données. À l'heure actuelle, il n'y a pas de système pour précharger automatiquement les données.

Pour l'efficacité, vous pouvez utiliser getAll() qui obtiendra les données par lots. Cela devrait améliorer les performances de votre propre fonctionnalité de préchargement. Vous pouvez varier vos tailles de lots jusqu'à ce que vous trouviez l'optimum pour votre cas d'utilisation. Avec Hazelcast 3.8, il y aura une fonctionnalité de préchargement du cache proche, qui stockera les clés dans le cache proche sur le disque. Lorsque le client Hazelcast est redémarré, le jeu de données précédent est pré-récupéré pour recharger le jeu de données chaud précédent dans le cache le plus rapidement possible (seules les clés sont stockées, les données sont récupérées à partir du cluster). Cela n'aidera donc pas au premier déploiement, mais à tous les redémarrages suivants. Peut-être que c'est déjà ce que vous cherchez?

Vous pouvez tester la fonctionnalité dans la version 3.8-EA ou la version récente 3.8-SNAPSHOT. La documentation de la configuration peut être trouvée ici: http://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#configuring-near-cache

S'il vous plaît être conscient que nous avons modifié le paramètre de configuration file-name-filename entre EA et la INSTANTANÉ réelle. Je recommande la version SNAPSHOT, puisque nous avons également apporté d'autres améliorations au code du preloader.

+0

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? –

+0

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

+0

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. –