2013-10-08 3 views

Répondre

12

La principale différence est que les index secondaires de Cassandra ne sont pas distribués de la même manière qu'un index manuel inversé. Avec les index secondaires intégrés, chaque noeud indexe les données qu'il stocke localement (en utilisant LocalPartitioner). Avec l'indexation manuelle, les index sont distribués indépendamment des nœuds qui stockent les valeurs. Cela signifie que, pour les index intégrés, chaque requête doit aller à chaque nœud, alors que si vous avez inversé l'indexation manuellement, vous devez simplement aller à un nœud (plus les répliques) pour interroger la valeur recherchée. Un avantage d'avoir l'index stocké localement est que les index peuvent être mis à jour atomiquement avec les données. (Bien que, depuis Cassandra 1.2, les lots atomiques puissent être utilisés à la place bien qu'ils soient un peu plus lents.)

C'est pourquoi les index Cassandra ne sont pas recommandés pour les données de cardinalité vraiment élevées. Si vous effectuez une recherche sur chaque nœud mais qu'il n'y a qu'un ou deux résultats, c'est inefficace et un index inversé manuel sera meilleur. Si votre recherche renvoie plusieurs résultats, vous devrez effectuer une recherche sur chaque nœud pour que les index intégrés fonctionnent correctement.

Un autre avantage de l'utilisation de l'indexation intégrée de Cassandra est que les index sont mis à jour paresseusement, de sorte que vous n'avez pas besoin de lire chaque mise à jour. (Voir CASSANDRA-2897.) Cela peut être une amélioration significative de la vitesse pour les tables indexées avec un débit d'écriture élevé.

+3

Inspiré par cette question, j'ai écrit une réponse plus détaillée sur mon blog: www.wentnet.com/blog/?p=77 – Richard

+0

l'ironie d'un échec de connexion à la base de données – devshorts

Questions connexes