首页 文章

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

提问于
浏览
6

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

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

3 回答

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

    • Cassandra 2.0将引入lightweight transactions的一种形式 .

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

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

  • 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 .

  • 3

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

相关问题