如何在cassandra中实现行级锁定

时间:2017-11-15 19:04:42

标签: java database apache cassandra locking

我有一个Cassandra集群设置,如Node N1,Node N2和Node N3

我有一个用户表,我需要在集群中的节点上为它创建一个行级锁定,那么请你回答以下问题来指导我吗?

1) What is the maximum level of locking possible in Cassandra?
2) What is lightweight transaction? How much it is possible to achieve row level locking?
3) Is there an alternate way to achieve the row level locking in Cassandra?

帮助非常感谢。

谢谢, 哈利

2 个答案:

答案 0 :(得分:3)

  1. 没有,但您可以将其拉伸到列级别。
  2. 它使用paxos进行共识并可以执行条件更新。它不会锁定。如果发生另一次更新,它会成功与否,如果它没有成功,你可以再试一次。如果它确实成功,那么“交易”(不良命名)中的所有内容都将适用。但是,它内部仍然没有隔离,如果行中有多列更新,您可以在它们之间进行读取。 details here
  3. 设计数据模型,因此您不需要锁定。

答案 1 :(得分:1)

cassandra没有交易,没有锁定。然而,重量轻的交易。他们并不伟大,表现更差,并且有很多权衡。

根据此锁的用例,您可以执行以下操作: INSERT INTO User (userID, email) VALUES (‘MyGuid’, ‘user@example.com’) IF NOT EXISTS;

如果查询返回错误/失败,您将不得不处理它,如果有人在您之前插入,它就不会失败。失败也可能意味着您的1个节点确实获得了写入但不是全部。 LWT不会退回。