gpt4 book ai didi

Cassandra 乐观锁

转载 作者:行者123 更新时间:2023-12-04 14:58:28 29 4
gpt4 key购买 nike

我有一个 cassandra table1:

CREATE TABLE Policy.table1 (
name VARCHAR ,
date TIMESTAMP ,
version_num INT,
PRIMARY KEY (
name
)) WITH caching = 'all'
-- and memtable_flush_period_in_ms = 7200 ;
;

我需要在 tis 表上实现乐观锁定。当我们从 table1 中读取一行时,我们会记住它的 version_num。当我们想要更新这一行时,我们会比较当前的 version_num 值和我们记住的值。我们还需要在每次更新时增加 version_num。

问题:
  • 我们不能将 version_num 放入 where 子句中,这会产生错误:Bad Request: Non PRIMARY KEY version_num found in where 子句:
     update table where name = 'abc' and version = 3
  • 我们不能将 version_num 设置为主键的一部分,因为我们需要更新它的值
  • 如果我们索引 version_num 对更新语句没有帮助,将抛出相同的异常
  • 我看到的唯一方法是通过 Java 获取当前 version_num 值,如果预期和实际 version_num 值相同 - 则执行更新。问题是在这种情况下我们没有检查 version_num 值和更新行的原子操作。

  • 你看到这个问题的任何解决方案吗?

    最佳答案

    在那里找到了解决方案:Cassandra 2.0,轻量级交易http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_ltwt_transaction_c.html

    如果我执行查询:

    update table1 set version_num = 5 where name = 'abc'  if version_num = 4;

    我会收到一行 [applied]柱子。此行包含 bool 值: true = 更新成功, false = 在其他情况下。

    关于Cassandra 乐观锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24406252/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com