DataStax驱动程序支持Cassandra行级锁定

6

在多个用户同时访问同一行时,Cassandra支持行级锁定。

我们正在设计购物车应用程序,并将Cassandra作为库存数据库。现在的要求是:如果多个用户同时访问库存数据库中的同一产品行。 例如:产品表:productID productQuantitiy 1000 1 如果第一个用户选择产品“1000”并将产品数量添加为“1”到购物车中,其他用户访问相同的产品时不应该能够选择该产品,直到第一个用户释放它(将产品数量更新为0)。所以,Cassandra是否提供此类场景的行级锁定支持?


1
这是不是与这个问题重复了? - Alex Popescu
3个回答

3

现在有了c*,以下是一些更新信息

历史

在Cassandra中实现锁一直存在争议并拒绝。您可以在此Jira中查看历史记录、交流和最终决定 - https://issues.apache.org/jira/browse/CASSANDRA-5062

总结一下:1)有一些外部选项可以允许在Cassandra上进行某些锁定操作(例如Hector和其他),但这些是次优的解决方案。2)与其实施c*锁(这意味着需要 ZooKeeper 集成 + 引入单点故障),不如构建 Cassandra 的 Paxos 实现,这已经作为轻量级事务暴露出来,自 C* 2.0 开始,并且目前在 DSE 中。

示例

在此视频中,您可以观看一家大型银行如何在C*中使用LWT:

https://www.youtube.com/watch?v=-sD3x8-tuDU&list=PLqcm6qE9lgKJkxYZUOIykswDndrOItnn2

需要注意的关键点

1) LWT相对于Cassandra中的常规插入/更新语句而言速度较慢,仅适用于少数情况。 建议只应占工作负载的1%。

2)LWT仅在分区内起作用。 跨分区插入不会阻止LWT。


1
"跨分区插入"是什么意思? - deFreitas

3
  1. 锁定是分布式系统的一个复杂问题。通常也会导致操作变慢。

  2. Cassandra 2.0将引入一种轻量级事务的形式。

  3. 同时在2.0中将支持CAS操作。基本上,这将允许您模拟行级锁(仅在条件满足时更新行)

  4. 虽然我不确定我完全理解您要解决的问题,但我认为您正在寻找的是一致性计数器。这些已经有一段时间得到支持。


0

Cassandra可以支持多个用户,但不能锁定任何行,实际上它使用时间戳来同步最新更新,并与其他节点共享。


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