J'ai rencontré un problème de cohérence en utilisant Hector et Cassandra lorsque nous avons Quorum pour lire et écrire.Les données dans Cassandra ne sont pas cohérentes même avec la configuration du Quorum
J'utilise MultigetSubSliceQuery pour interroger des lignes à partir de la taille limite de super-colonne 100, puis le lire, puis le supprimer. Et commencez un autre autour.
J'ai trouvé que la ligne qui devrait être supprimée par ma requête précédente est toujours affichée à partir de la requête suivante. Et aussi à partir d'une famille de colonnes normale, j'ai mis à jour la valeur d'une colonne de status = 'FALSE' à status = 'TRUE', et la prochaine fois que je l'ai interrogée, le statut était toujours 'FALSE'.
Plus de détails:
- Il n'a pas passé pas à chaque fois (1/10.000)
- Le temps entre les deux requêtes est d'environ 500 ms (mais nous avons trouvé une paire de requêtes dans lesquelles 2 secondes s'est écoulé entre eux, indiquant toujours un problème de cohérence)
- Nous utilisons ntp comme solution de synchronisation de temps de cluster.
- Nous avons 6 nœuds, et le facteur de réplication est 3
Je comprends que Cassandra est censé être « finalement cohérente », et que lecture ne peut pas se produire avant écrire l'intérieur Cassandra. Mais pour deux secondes ?! Et si c'est le cas, n'est-il pas inutile d'avoir Quorum ou d'autres configurations de niveau de cohérence? Donc, tout d'abord, est-ce le bon comportement de Cassandra, et si non, quelles sont les données que nous devons analyser pour un investissement ultérieur?
Après passage d'écriture/lecture Quorum à écrire/lire ALL, le problème résolu, il devrait donc être Cassandra n'a pas réussi à fusionner les données quand il a trouvé « discordance Digest », mais il n'a pas échoué pour tout "Digest mismatch". C'est vraiment étrange, la version Cassandra est 1.0.3 –