2010-06-30 26 views
5

我想在ZooKeeper的帮助下为Cassandra实现一个事务系统。由于我不认为自己在数据库实施方面有足够的经验,所以我想知道我的想法是否在原则上有效,或者是否存在重大缺陷。ZooKeeper的卡桑德拉交易 - 这是否工作?

下面是这些步骤的高级描述:

  1. 识别所有行(键)和列进行编辑。让密钥为[K0..Kn]
  2. 对涉及的所有行应用写入锁定(锁是内存中的Zookeeper实现)
  3. 将旧值复制到卡桑德拉分隔的位置,这些位置由键唯一标识: K'0..K'n]
  4. 存储[K'0..K'n]及其在ZooKeeper中使用持久模式映射到[K0..Kn]
  5. 继续前进将更新应用到数据
  6. 删除的条目中的ZooKeeper
  7. 解锁行
  8. 删除的条目Ò F [K'0..K'n]懒惰地在维护线程(卡桑德拉缺失使用时间戳,所以可以K'0..K'n用于与较新的时间戳记另一个事务被重新使用)

正当性:

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

我的一个担心是如果某些服务器从群集中分割出来会发生什么。我没有这方面的经验,我的计划是否可以工作?如果分区发生,它会工作吗?

+0

猜测我将不得不寻找它自己,让你们知道... – Viele 2010-06-30 18:32:27

回答