2010-06-04 10 views
25

Je passe par apache cassandra et travaille sur l'insertion de données d'échantillon, la récupération etc.Cassandra - support de transaction

La documentation est très limitée.

Je suis intéressé à connaître

  • peut-on remplacer complètement par rapport db mysql/oracle avec Cassandre?
  • Est-ce que cassandra prend en charge l'annulation/la validation?
  • Est-ce que les clients cassandra (thrift/hector) prennent en charge la récupération de l'objet associé (objets où nous sauvegardons la clé d'une super-colonne dans une autre famille de super-colonnes)?

Cela m'aidera beaucoup à aller plus loin.

merci d'avance.

Répondre

26

Réponse courte: Non

De par sa conception, Cassandra valeurs de tolérance de la disponibilité et la partition sur la cohérence 1. Fondamentalement, il n'est pas possible d'obtenir une latence acceptable tout en conservant les trois qualités: l'une doit être sacrifiée. C'est ce qu'on appelle le théorème CAP.

La quantité de cohérence est configurable dans Cassandra en utilisant des niveaux de cohérence, mais il n'existe aucune sémantique pour l'annulation. Il n'y a aucune garantie que vous serez en mesure d'annuler vos modifications même si la première écriture réussit.

Si vous ne souhaitez pas générer d'application avec des transactions ou des verrous sur Cassandra, vous devriez probablement regarder Zookeeper, qui peut être utilisé pour fournir une synchronisation distribuée.

Vous l'avez peut-être déjà deviné, mais Cassandra n'a pas de clés étrangères ou quelque chose comme ça. Cela doit être géré manuellement. Je ne suis pas très familier avec Hector, mais un client de plus haut niveau pourrait être capable de le faire semi-automatiquement. Le fait de savoir si vous pouvez ou non utiliser Cassandra pour remplacer facilement un SGBDR dépend de votre cas d'utilisation spécifique. Dans votre cas d'utilisation (basé sur vos questions), il peut être difficile de le faire.

+0

Merci Lautis. Après avoir examiné toutes les fonctionnalités, nous avons décidé de ne pas opter pour Cassandra et de s'en tenir à la base de données relationnelle. –

+1

Bon fil sur la liste de diffusion cassandra sur les transactions: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/best-practices-for-simulating-transactions-in-Cassandra-td7064256.html – Zanson

+0

Merci. Bonne réponse! – Amresh

2

Si Zookeeper est capable de gérer des transactions de qualité Oracle, alors c'est un marché conclu. L'intégrité des relations et des relations n'est pas un problème à implémenter au-dessus de n'importe quelle base de données. Une clé étrangère est juste un autre champ de données. ACID/Transactions est la question clé.

+0

Je ne suis pas d'accord avec le fait que la clé étrangère est juste un autre champ de données. Le type d'application implémenté dans les bases de données SQL gère lorsque les données sont supprimées par une autre connexion à peu près au moment où votre connexion tente de s'y référer. Il rejettera l'une des connexions correctement. Comment appliqueriez-vous cela lors de la mise en œuvre dans une couche supérieure, sans verrouillage/synchronisation des ressources qui affecte également les performances? –

5

Dans la version 2.x, vous pouvez combiner des instructions CQL consignées dans batch qui est atomique. Toutes ou toutes les déclarations réussissent. En outre, vous pouvez lire sur lightweight transactions. Plus que cela, il existe plusieurs gestionnaires de persistance pour Cassandra. Vous pouvez obtenir un comportement de clés étrangères au niveau du client avec eux. Par exemple, Achilles et Kundera.