如何在Cassandra中跨多个表更新实现锁定,以实现隔离并避免脏读探针

问题描述

我在解决方案中将Cassandra用作Nosql DB,并且有一个数据模型,其中我有2个表,一个是父表,另一个是子表

这是场景

  1. 客户端A试图更新父表记录以及子表记录
  2. 与此同时,客户端B也选择了请求(这对父表和子表都造成了打击)
  3. 客户端B从父表中接收最新记录,但从子表中获取旧记录

我可以使用批处理日志操作,以便可以实现原子性来更新两个表,但是不确定如何隔离或锁定来自客户端B的读取请求,以避免出现脏读取问题。 也尝试过评估轻量级交易,但在这种情况下似乎不起作用

只是想想我是否可以使用某些中间件应用程序来实现锁定功能,因为Cassandra似乎开箱即用。

请帮助我理解这方面的读/写同步

解决方法

正如您提到的那样-当您选择批处理时,Cassandra仅提供原子性。但是,当您进行单个分区批处理时,它确实提供了隔离,但是不幸的是,这并不是您的情况。

要回答您的问题-如果您确实需要交易,我会再次考虑问题和可能的解决方案。您要么应该不需要锁定,要么应该更改技术堆栈。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...