2011-01-17 21 views
8

¿Hay alguna forma de sincronizar el cliente usando las funciones integradas de cassandra?Cassandra bloqueo de exclusión mutua (sincronización)

Necesito realizar algunas operaciones y esas operaciones deben sincronizarse con todos los otros clientes (exclusión mutua).

En RDBMS puedo bloquear toda la tabla o preparar una tabla especial para sincronizar y usar SELECT ... PARA ACTUALIZAR sobre ella.

¿Puedo lograr esto con Cassandra sin aplicaciones de terceros? Si no, ¿cuál es la mejor manera de hacerlo? Los idiomas preferibles son Java y Python.

Respuesta

8

No es posible bloquear un entero (o un subconjunto de) una familia de columnas sin bibliotecas de terceros como Apache ZooKeeper.

que probablemente empezar a buscar en Domic Williams cages antes de empezar a rodar mi propio mecanismo de bloqueo distribuido

+1

No necesito para bloquear familia de columnas. SELECCIONAR PARA ACTUALIZAR equivalente sería lo mejor. Comprobaré ZooKeeper – Daimon

+3

También es muy probable que pueda evitar la necesidad de esto ajustando su modelo de datos. Tal vez eso sería otra buena pregunta SO? –

+2

No, necesito arquitectura de procesamiento distribuido y Cassandra como almacenamiento de datos. Necesito sincronizar algunas operaciones para evitar que los mismos datos sean procesados ​​por más de una máquina. – Daimon

2

Si va a actualizar una fila en una familia de columnas, es atómica. Pero no funcionará como seleccionar para la actualización. Probablemente deberías revisar tu modelo de datos con más desnormalización en mente, para que no tengas que preocuparte por la sincronización.

0

También estaba buscando la forma de sincronizar con cassandra, pero hasta donde yo sé, no proporciona mecanismos para implementar mutexes.

Sin embargo, memcached tiene la operación atómica cas (comprobar y establecer), que se puede utilizar para implementar mutex. También tiene clientes python y java.

De modo que podría usar memcached para implementar mutexes para la sincronización y leer/escribir datos con el nivel de consistencia de quórum en cassandra para asegurarse de que la última escritura siempre se devuelve al leer.

¿Alguien ha tenido experiencia en implementar mutex con memcached?

+0

Esto podría ser un poco inestable si se descarga un mutex o se bloquea el servidor de memcached, lo que liberará el bloqueo demasiado pronto. Sin embargo, no estoy seguro de qué tan probable es que el bloqueo se realice solo durante unos pocos segundos como máximo. La estabilidad depende de una gran cantidad de aplicaciones, de cómo se usan mutexes. –