2016-12-14 2 views
1

Actuellement, j'ai un IMap sauvegardé avec un MapStore. Ce IMap est chargé au démarrage et possède des millions d'entrées. Lorsque la carte est entièrement chargée, les clients récupèrent les entrées en utilisant Imap.values ​​() avec des prédicats. Ce chargement fonctionne bien pour moi au démarrage.Est-ce que le blocage de chargement distribué noisette?

Maintenant, je dois recharger de manière péridégale toutes les données (par exemple, toutes les 2 heures). J'utilise IMap.loadAll (true) pour forcer le rechargement. Le MapStore (loadAllKeys() + loadAll (keys)) prend environ 4 minutes pour terminer la charge complète. Il semble que dans ces 4 minutes, tous les clients qui envoient des requêtes à l'imap via des prédicats sont bloqués jusqu'à ce que le rechargement soit terminé.

Dans mon cas, je ne peux pas bloquer le cluster 4 minutes (ni une seconde en fait).

  1. est réellement le Imap.loadAll bloquant les requêtes de prédicats?
  2. est possible de configurer l'imap comme non bloquant ou existe une alternative non bloquante à IMap.loadAll().

J'essaie avec HC 3.7.2, avec 2 nœuds et java 8.

Répondre

0

Il est un cas raisonnable d'utilisation, mais il est actuellement non pris en charge pour deux raisons. Le chargement se fait sur les threads de partition et les bloque donc - il donne de la consistance, la map ne servira à aucune requête tant que le chargement n'est pas terminé.

Pour votre utilisation du "rechargement", il ne devrait pas se produire sur les threads de partition afin que les demandes puissent être servies.

Pourriez-vous créer une demande de fonctionnalité sur github? Cela ressemble à ce que nous pourrions aborder dans la prochaine version.

+0

Merci Tom! Créé: https://github.com/hazelcast/hazelcast/issues/9467 – jnmts