【问题标题】:Cassandra row level locking support with DataStax driver使用 DataStax 驱动程序支持 Cassandra 行级锁定
【发布时间】:2013-08-26 14:29:09
【问题描述】:

同时用户访问同一行时支持 Cassandra 行级锁定

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

【问题讨论】:

标签: cassandra datastax-java-driver


【解决方案1】:
  1. 锁定对于分布式系统来说是一个复杂的问题。它通常还会导致操作缓慢。

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

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

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

【讨论】:

    【解决方案2】:

    现在 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。

    【讨论】:

    • 什么是“跨分区插入”?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 2017-01-20
      • 2019-01-31
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2018-02-15
      • 2013-12-23
      • 2015-10-25
      相关资源
      最近更新 更多