由并发用户访问同一行时的Cassandra行级锁定支持
考虑到Cassandra作为库存数据库,我们处于推车应用的设计阶段。 现在的要求是,如果多个用户同时访问Inventory DB中的相同产品行。 例如: - 产品表:productID productQuantitiy 1000 1 如果第一个用户选择产品“1000”并在购物车中添加产品数量为“1”,那么访问同一产品的其他用户将无法选择 此产品直到第一个用户免费(更新的产品数量为0)。 cassandra也为这种情况提供行级锁定支持
答案 0 :(得分:3)
锁定是分布式系统的一个复杂问题。它通常也会导致运营缓慢。
Cassandra 2.0将引入lightweight transactions的形式。
同样在2.0中,将支持CAS操作。基本上这将允许您模拟行级锁(更新行iif条件)
虽然我不确定我完全理解你要解决的问题,但我认为你所寻找的是一致的反击。这些已经支持了一段时间。
答案 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支持多个用户,但没有锁定任何行,实际上它使用时间戳来纠正最新的更新,然后共享给另一个节点。