卡桑德拉乐观锁定

我有一个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子句,这将创建一个错误错误的请求:在where子句中找到的非PRIMARY KEY version_num:

update table where name = 'abc' and version = 3

>我们不能将version_num设置为主键的一部分,因为我们需要更新其值
>如果我们索引version_num它将对update语句没有帮助,将抛出相同的异常
>我看到的唯一方法是通过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其中name =’abc’如果version_num = 4;我将收到一行[applied]列.此行包含布尔值:true = update成功,false =在其他情况下.

相关文章

一、引言 学习redis 也有一段时间了,该接触的也差不多了。后来有一天,以前的同事问我,如何向redis中...
一、引言 上一篇文章,我介绍了如何在Linux系统上安装和配置MongoDB,其实都不是很难,不需要安装和编译...
一、介绍 Redis客户端使用RESP(Redis的序列化协议)协议与Redis的服务器端进行通信。 虽然该协议是专门...
一、引言 redis学了一段时间了,基本的东西都没问题了。从今天开始讲写一些redis和lua脚本的相关的东西...
一、介绍 今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分。...
一、引言 上一篇文章我们已经介绍了MongoDB数据库的查询操作,但是并没有介绍全,随着自己的学习的深入...