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

时间:2013-08-26 14:29:10

标签: cassandra datastax-java-driver

由并发用户访问同一行时的Cassandra行级锁定支持

考虑到Cassandra作为库存数据库,我们处于推车应用的设计阶段。 现在的要求是,如果多个用户同时访问Inventory DB中的相同产品行。 例如: - 产品表:productID productQuantitiy     1000 1 如果第一个用户选择产品“1000”并在购物车中添加产品数量为“1”,那么访问同一产品的其他用户将无法选择 此产品直到第一个用户免费(更新的产品数量为0)。 cassandra也为这种情况提供行级锁定支持

3 个答案:

答案 0 :(得分:3)

  1. 锁定是分布式系统的一个复杂问题。它通常也会导致运营缓慢。

  2. Cassandra 2.0将引入lightweight transactions的形式。

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

  4. 虽然我不确定我完全理解你要解决的问题,但我认为你所寻找的是一致的反击。这些已经支持了一段时间。

答案 1 :(得分:3)

使用一些更新的信息恢复这个旧线程,因为LWT在c *

中可用

历史

已经考虑并决定在Cassandra中实现锁定。您可以在此Jira中看到历史,对话和最终解决方案 -

https://issues.apache.org/jira/browse/CASSANDRA-5062

总结一下,1)有一些外部选项允许对cassandra(即hector和其他)进行一些锁定,但这些是次优的解决方案。 2)不是实现c *锁(意味着动物园管理员集成+引入单点故障),而是决定构建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。

答案 2 :(得分:0)

Cassandra支持多个用户,但没有锁定任何行,实际上它使用时间戳来纠正最新的更新,然后共享给另一个节点。