【问题标题】:Cassandra mutual exclusion locking (synchronization)Cassandra 互斥锁(同步)
【发布时间】:2011-06-10 17:11:16
【问题描述】:

是否有使用 cassandra 内置函数同步客户端的方法?

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

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

我可以在没有任何第三方应用程序的情况下使用 Cassandra 实现这一目标吗?如果不是,最好的方法是什么?首选语言是 Java 和 Python。

【问题讨论】:

    标签: synchronization locking cassandra mutual-exclusion


    【解决方案1】:

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

    https://github.com/jakedouglas/cassandra_lock

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      不过,memcached 有原子的 cas(检查和设置)操作,可以用来实现互斥锁。它也有 python 和 java 客户端。

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

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

      【讨论】:

      • 如果某些 mutex 被刷新或 memcached 服务器崩溃会过早释放锁,这可能会有点不稳定。但是,我不确定锁定最多仅几秒钟的可能性有多大。稳定性取决于很多应用程序以及互斥锁的使用方式。
      【解决方案4】:

      如果没有像 Apache ZooKeeper 这样的第三方库,就不可能锁定整个(或一个子集)列族。

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

      【讨论】:

      • 我不需要锁定列族。 SELECT FOR UPDATE 等效将是最好的。我会检查 ZooKeeper
      • 您也很有可能通过调整数据模型来完全避免这种需求。也许这会成为另一个很好的 SO 问题?
      • 不,我需要分布式处理架构和 Cassandra 作为数据存储。我需要同步一些操作,以防止多台机器处理相同的数据。
      猜你喜欢
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多