6

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

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

4

3 回答 3

3

现在 LWT 在 c* 中可用,使用一些更新的信息来恢复这个旧线程

历史

已考虑并决定反对在 Cassandra 中实施锁。你可以在这个 Jira 中看到历史、对话和最终解决方案——

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

总而言之,1)有一些外部选项允许对 cassandra(即 hector 和其他)进行一些锁定,但这些都是次优的解决方案。2) 决定构建 cassandra 自己的 Paxos 实现,而不是实现 c* 锁(这意味着 Zookeeper 集成 + 引入单点故障),它已作为轻量级事务公开,自 C* 2.0 以来可用,目前在 DSE 中。

例子

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

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

需要注意的关键点

1) 根据定义,LWT 比 Cassandra 中的常规插入/更新语句慢,并且旨在用于少数用例。工作量的 1%。

2) LWT 仅在分区内工作。跨分区插入不会阻塞 LWT。

于 2014-11-07T03:10:03.083 回答
3
  1. 锁定对于分布式系统来说是一个复杂的问题。它通常还会导致操作缓慢。

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

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

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

于 2013-08-31T10:29:06.937 回答
0

Cassandra 支持多个用户,但没有锁定任何行,实际上它使用时间戳来确定最新更新的内容,然后共享到其他节点。

于 2013-08-26T16:23:18.073 回答