无论如何使用内置函数的cassandra来同步客户端吗?
我需要执行一些操作,这些操作需要与所有其他客户端同步(互斥)。
在RDBMS中,我可以锁定整个表或为同步目的准备特殊表,并在其上使用SELECT ... FOR UPDATE。
我可以在没有任何第三方应用的情况下与Cassandra达成协议吗?如果不是最好的方法是什么?优选的语言是Java和Python。
答案 0 :(得分:8)
如果没有Apache ZooKeeper等第三方库,则无法锁定整个(或部分)列族。
在开始推出我自己的分布式锁定机制之前,我可能会开始关注Domic Williams cages
答案 1 :(得分:2)
如果要更新列族中的一行,则它是原子的。但它不会像select for update那样工作。您应该重新考虑更多非规范化的数据模型,这样您就不必担心同步了。
答案 2 :(得分:2)
因为C *提供行级原子性,为什么不使用Lamport's Bakery Algorithm。我在C * wiki上找到了一个不完整的页面。
答案 3 :(得分:0)
我也想找到与cassandra同步的方法,但据我所知它并没有提供实现互斥的机制。
但是,memcached具有原子cas(检查和设置)操作,可用于实现互斥锁。它还有python和java客户端。
因此,您可以使用memcached实现互斥的同步,并在cassandra中读取/写入具有仲裁一致性级别的数据,以确保在读取时始终返回最新的写入。
有没有人有关于使用memcached实现互斥的经验?