【问题标题】:Cassandra Transaction with ZooKeeper - Does this work?与 ZooKeeper 的 Cassandra 事务 - 这行得通吗?
【发布时间】:2011-03-10 04:34:42
【问题描述】:

我正在尝试在 ZooKeeper 的帮助下为 Cassandra 实现一个事务系统。由于我认为我在数据库实现方面没有足够的经验,所以我想知道我的想法在原则上是否可行,或者是否有任何重大缺陷。

以下是步骤的高级描述:

  1. 确定所有要编辑的行(键)和列。让键为 [K0..Kn]
  2. 对所有涉及的行应用写锁(锁是内存中的 Zookeeper 实现)
  3. 将旧值复制到 Cassandra 中由键唯一标识的不同位置:[K'0..K'n]
  4. 使用持久模式在 ZooKeeper 中存储 [K'0..K'n] 及其到 [K0..Kn] 的映射
  5. 继续将更新应用到数据
  6. 删除 ZooKeeper 中的条目
  7. 解锁行
  8. 在维护线程上懒惰地删除 [K'0..K'n] 的条目(cassandra 删除使用时间戳,因此 K'0..K'n 可以重用于具有较新时间戳的另一个事务)

理由:

  1. 如果事务在步骤 1-4 中失败,则未应用任何更改,我可以中止事务并删除存储在 zookeeper 中并在 cassandra 中备份的所有内容(如果有)。
  2. 如果事务在第 5 步失败,则使用第 3 步保存的信息来回滚任何更改。
  3. 如果服务器发生故障/崩溃/被清理人员窃取,在服务任何请求之前重新启动时,我会检查第 4 步中 Zookeeper 中是否有任何密钥,如果有,我将使用这些密钥来获取备份第 3 步存储的数据,并将这些数据放到它们所在的位置,从而回滚任何失败的事务。

我担心的一个问题是,如果某些服务器从集群中分区会发生什么。我在这方面没有经验,我的计划是否有效?如果发生分区,它会起作用吗?

【问题讨论】:

  • 我想我得自己找出来告诉你们……

标签: database database-design transactions nosql cassandra


【解决方案1】:

【讨论】:

  • 还不错。我看的第一件事。但是,它提供的东西离交易还很远。
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
相关资源
最近更新 更多