2016-12-20 3 views
2

Dans mes journaux d'application, j'ai vu que, par défaut, après l'exécution des instructions create/alter table, le pilote cassandra semble effectuer un traitement pour obtenir un accord pendant 10 secondes. Puis-je (et devrais-je) définir un niveau de cohérence par exemple 'quorum' lors de l'exécution d'instructions DDL comme 'Create Table .. IF NOT EXISTS' pour m'assurer que ma table est créée et propagée à tous les noeuds?Niveau de cohérence SET pour Cassandra DDL

Répondre

2

Les changements de schéma (définition de données) dans Cassandra depuis 1.1+ s'effectuent via gossip. Comme il utilise Gossip, il s'agit d'un chemin de lecture/écriture distinct de vos requêtes de manipulation de données (SELECT, DELETE, INSERT, etc.) et n'a donc aucune cohérence accordable pour ces opérations, car les gossip ne fonctionnent pas avec une cohérence ajustable. De l'article que j'ai lié, vous pouvez voir que les changements de schéma sont passivement annoncé annoncé dans le cluster, et en outre vous pouvez obtenir le désaccord/résolution de schéma quand vous avez des noeuds qui étaient inaccessibles quand le changement de schéma a été fait.

À quelle fréquence modifiez-vous votre schéma? Comme vous pouvez voir les changements de schéma, bien qu'amélioré depuis ce qu'il était, est toujours une opération très coûteuse car chaque nœud doit devenir cohérent. Les changements de schémas fréquents dans Cassandra doivent être évités (colonnes dynamiques alias) pour cette raison. Je serais curieux d'entendre à quelle fréquence et pourquoi le schéma est en train de changer, peut-être pourriez-vous le remodeler pour éviter les colonnes/tables dynamiques afin d'éviter des changements de schémas coûteux dans Cassandra.

+0

Merci @fromantor. Nous ne modifions pas souvent notre schéma, nous le faisons parfois lors du déploiement d'une nouvelle version lorsqu'il y a des ajouts au schéma. Lors d'une de ces occasions, nous avons vu les échecs dans nos journaux d'application et nous avons constaté que le nouveau schéma de table ne pouvait pas être propagé à tous les nœuds de Cassandra. – ktewari

2

La modification du niveau de cohérence n'affecte pas la durée de l'accord du cluster. Si cela prend 10 secondes sur votre cluster, votre client peut simplement atteindre le délai par défaut au lieu d'attendre que tous les nœuds soient en accord. Vérifiez le Java Driver docs pour plus d'informations sur ce processus.

En dehors de votre application, vous pouvez vérifier l'état du schéma avec nodetool describecluster. Cela vous montrera si un nœud particulier n'accepte pas les modifications apportées au schéma. Voici quelques more information sur la résolution des désaccords de schémas du point de vue des opérateurs.