2016-07-18 1 views
0

J'utilise Hz PredicateBuilder pour interroger des cartes Hz avec requête sur l'attribut de l'objet imbriqué. Ont créé un index sur le champ imbriqué aussi dans le fichier de configuration.Valider si les index de Hazelcast sont utilisés

EntryObject e = new PredicateBuilder().getEntryObject(); 
Predicate idPredicate = e.get("id").equal(id); 
Predicate predicate = e.get("rel.id").equal(rel.id).and(idPredicate); 
return personMap.values(predicate); 

Où rel est un objet avec un attribut id et est un attribut de l'objet Person.

indexes = [ 
      { 
       attribute = id 
       isOrdered = false 
      }, 
      { 
       attribute = rel.id 
       isOrdered = false 
      } 
      ] 

Les enregistrements corrects sont retournés, mais vous voulez vous assurer que cette requête utilise l'index. Est-il possible de s'assurer que cette requête utilise l'index? (Tout message d'information ou quelque chose). Travaillé avec DB2 avant et niveau de débogage montre ces messages. Toute aide est très appréciée! Merci d'avance.

+0

Croyez-moi avec assez de dossiers dans la mémoire si vous n'utilisez pas l'index que vous remarquerez. Surtout si vous démarrez plus d'un membre, à cause du trafic distant. –

+0

@AlexanderPetrov: Merci! En fait, nous utilisions des prédicats plus tôt et les index n'étaient pas utilisés. Nous passons donc à PredicateBuilder puisqu'il s'agit d'une classe indexaware, donc nous voulons juste nous assurer que le but est atteint. Bien qu'avec ces changements, la performance soit nettement meilleure. –

+0

Avez-vous lu ceci? Malheureusement, il ne semble pas y avoir de statistiques MBean pertinentes pour les index, mais vous pouvez facilement mesurer les temps avec l'index activé, puis avec l'index désactivé http://docs.hazelcast.org/docs/3.5/manual/html/management .html –

Répondre

1

Selon la documentation Hazelcast - section de gestion. Aucun objet statistique pour Index n'est répertorié. Les MBeans statistiques sont les différents objets distribués.

En même temps, si l'indice est touché pas se traduira par désérialisation séquentielle des clés et des valeurs potentiellement aussi si nous faire la queue les valeurs. Avec suffisamment d'enregistrements dans la mémoire 100 000+ probablement encore moins la différence de performance sera plus que perceptible.

1

Voilà une bonne question!

Si vous utilisez exactement le même chemin d'attribut imbriqué dans la requête que dans la définition d'index, vous pouvez être sûr à 100% que l'index sera utilisé (si le prédicat est IndexAware).

Afin de tester de façon empirique, vous pouvez exécuter deux requêtes sur un grand ensemble de données exemplaire (comme les entrées 1M). Laissez l'un d'eux utiliser l'index et l'autre un autre attribut imbriqué (avec le même niveau d'imbrication). Vous verrez que le temps d'exécution diffèrent significativement .