Cassandra互斥锁定(同步)

时间:2011-01-17 21:12:14

标签: synchronization locking cassandra mutual-exclusion

无论如何使用内置函数的cassandra来同步客户端吗?

我需要执行一些操作,这些操作需要与所有其他客户端同步(互斥)。

在RDBMS中,我可以锁定整个表或为同步目的准备特殊表,并在其上使用SELECT ... FOR UPDATE。

我可以在没有任何第三方应用的情况下与Cassandra达成协议吗?如果不是最好的方法是什么?优选的语言是Java和Python。

4 个答案:

答案 0 :(得分:8)

如果没有Apache ZooKeeper等第三方库,则无法锁定整个(或部分)列族。

在开始推出我自己的分布式锁定机制之前,我可能会开始关注Domic Williams cages

答案 1 :(得分:2)

如果要更新列族中的一行,则它是原子的。但它不会像select for update那样工作。您应该重新考虑更多非规范化的数据模型,这样您就不必担心同步了。

答案 2 :(得分:2)

因为C *提供行级原子性,为什么不使用Lamport's Bakery Algorithm。我在C * wiki上找到了一个不完整的页面。

https://github.com/jakedouglas/cassandra_lock

答案 3 :(得分:0)

我也想找到与cassandra同步的方法,但据我所知它并没有提供实现互斥的机制。

但是,memcached具有原子cas(检查和设置)操作,可用于实现互斥锁。它还有python和java客户端。

因此,您可以使用memcached实现互斥的同步,并在cassandra中读取/写入具有仲裁一致性级别的数据,以确保在读取时始终返回最新的写入。

有没有人有关于使用memcached实现互斥的经验?