2010-06-04 51 views
25

Estoy pasando por apache cassandra y estoy trabajando en la inserción de datos de muestra, recuperación, etc.Cassandra - soporte de transacciones

La documentación es muy limitada.

Estoy interesado en saber

  • podemos reemplazar completamente relación db como MySQL/Oracle con Cassandra?
  • ¿El respaldo de cassandra es reversible?
  • ¿Los clientes de cassandra (thrift/hector) admiten la búsqueda de objetos asociados (objetos donde guardamos una clave de súper columnas en otra familia de súper columnas)?

Esto me ayudará mucho a seguir adelante.

gracias de antemano.

Respuesta

26

Respuesta corta: No.

Por diseño, Cassandra valores de disponibilidad y tolerancia a la partición sobre la consistencia 1. Básicamente, no es posible obtener una latencia aceptable manteniendo las tres cualidades: una tiene que ser sacrificada. Esto se llama teorema CAP.

La cantidad de consistencia es configurable en Cassandra usando niveles de consistencia, pero no existe ninguna semántica para la reversión. No hay garantía de que pueda deshacer los cambios aunque la primera escritura sea exitosa.

Si desea crear una aplicación con transacciones o bloqueos encima de Cassandra, probablemente desee consultar Zookeeper, que se puede utilizar para proporcionar sincronización distribuida.

Es posible que ya haya adivinado esto, pero Cassandra no tiene claves externas ni nada de eso. Esto tiene que ser manejado manualmente. No estoy tan familiarizado con Héctor, pero un cliente de nivel superior podría hacerlo de manera semiautomática.

Si puede o no usar Cassandra para reemplazar fácilmente un RDBMS depende de su caso de uso específico. En su caso de uso (basado en sus preguntas), podría ser difícil hacerlo.

+0

Gracias Lautis. Después de considerar todas las características, decidimos no ir por cassandra y apegarnos a la base de datos relacional. –

+1

Buen hilo en la lista de correo de cassandra sobre transacciones: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/best-practices-for-simulating-transactions-in-Cassandra-td7064256.html – Zanson

+0

Gracias. ¡Buena respuesta! – Amresh

2

Si Zookeeper es capaz de manejar transacciones que tienen calidad Oracle, entonces es un hecho. Las relaciones y la integridad de las relaciones no son un problema para implementar sobre CUALQUIER base de datos. Una clave foránea es solo otro campo de datos. ACID/Transactions es el tema clave.

+0

No estoy de acuerdo con que la clave externa sea solo otro campo de datos. El tipo de cumplimiento implementado en las bases de datos SQL se maneja cuando los datos borrados por otra conexión se producen cuando la conexión intenta referirse a ellos. Rechazará una de las conexiones correctamente. ¿Cómo lo harías cumplir al implementar en una capa más alta, sin bloqueo/sincronización de recursos que también afecte el rendimiento? –

5

En la versión 2.x puede combinar instrucciones CQL en el registro batch que es atómico. O todas o ninguna de las declaraciones tienen éxito. También puede leer sobre lightweight transactions. Más que eso, hay varios administradores de persistencia para Cassandra. Puede lograr el comportamiento de claves externas en el nivel del cliente con ellos. Por ejemplo, Achilles y Kundera.