问题描述
这个问题:
https://issues.apache.org/jira/browse/CASSANDRA-9328
在 2016 年因 Won't Fix 关闭表明,至少在当时,Cassandra 轻量级事务根本不起作用,至少对于概述的(基本和常见)用例。
引用:
*使用版本 ID(执行条件更新)和事务 ID(确定 WTE 是否真的成功,代表当前线程/事务/操作)仍然不起作用。
线程 A:读取版本 1
线程 A:将版本 1 更新为 2,交易 ID 为 ABC,并将账户余额设置为 $0+$100=$100,成功应用更新但仍收到 WTE。
线程 B:读取版本 2
线程 B:将版本 2 更新为 3,交易 ID 为 XYZ,并将账户余额设置为 $100+500=$600,赢得比赛,看不到任何 WTE。 话题B:很开心!
线程A:再次尝试,这次读取版本3,看到版本3比之前的版本2大,现在检查事务id,发现也不同..
线程 A 如何知道它的更新失败或成功?因为在它进行更新和再次读取记录之间,其他人已经更新了它。
此时,线程 A 可能会假设它失败并再次尝试并在余额中再添加 100 美元,从而导致帐户中出现的金额超出预期。或者它可能会选择放弃交易,但如果 WTE 实际上是由于超时而不是争用,则余额将比预期少 100 美元。*
我的问题是,这种情况在 2021 年有变化吗?我是否正确地得出结论(例如 Yugabyte 断言)Cassandra 轻量级事务根本不完全可靠,无论使用何种仲裁设置?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)