Cassandra 互斥锁(同步)

8

有没有使用Cassandra内置函数同步客户端的方法?

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

在关系型数据库中,我可以锁定整个表或准备特殊表以用于同步目的,并在其上使用SELECT ... FOR UPDATE。

如果没有第三方应用程序,我能否使用Cassandra实现这一点? 如果不能,最好的方法是什么?首选语言为Java和Python。

4个回答

8

如果没有第三方库(例如Apache ZooKeeper),无法锁定整个列族或其子集。

在开始自己的分布式锁定机制之前,我可能会首先查看Domic Williams的cages


1
我不需要锁定列族。SELECT FOR UPDATE 相当于是最好的选择。我会检查ZooKeeper。 - Daimon
3
通过调整数据模型,很有可能避免需要这样做。也许这会成为另一个不错的 Stack Overflow 问题? - Tyler Hobbs
2
不,我需要分布式处理架构和Cassandra作为数据存储。我需要同步一些操作,以防止同一数据被多台机器处理。 - Daimon

2

如果您更新列族中的一行数据,它是原子性的。但它不会像选择更新那样工作。您可能需要重新考虑数据模型并更多地解决冗余问题,这样您就不必担心同步问题了。


2

我猜你所指的维基页面是这个:http://wiki.apache.org/cassandra/Locking - Raedwald

0

我也在寻找一种与cassandra同步的方法,但据我所知,它没有提供实现互斥锁的机制。

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

因此,您可以使用memcached来实现同步的互斥锁,使用quorum一致性级别在cassandra中进行读/写数据,以确保返回的始终是最新的写入。

有人有使用memcached实现互斥锁的经验吗?


如果某个互斥锁被刷新或memcached服务器崩溃,可能会导致锁定过早释放,这可能会使系统变得不稳定。然而,当锁定时间最多只有几秒钟时,我不确定这种情况的概率有多大。稳定性很大程度上取决于应用程序以及互斥锁的使用方式。 - Mikael Lepistö

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接