使用轻量级交易有什么含义?

Sto*_*ica 11 transactions cassandra datastax-java-driver

特别是我在看这个页面时说:

如果使用轻量级事务来写入分区中的行,则只应使用读取和写入操作的轻量级事务.

我很困惑使用LWT进行读取操作的样子.具体来说,这与每个查询的一致性(和serialConsistency)级别有何关联.

说明SERIAL读一致性提出了进一步的问题:

允许读取当前(可能未提交)的数据状态,而无需提出新的添加或更新.

这表明SERIAL用于读取不是"使用LWT".

但是之后

  • 当您阅读时,Cassandra如何知道检查正在进行的交易?
  • 在您尝试阅读时提出的新更新是什么,这对读取有何影响?
  • 如果您正在阅读的一致性(比方说ONE)小于用于写作的serialConsistency,那该怎么办?
  • 一旦你在一个表(或行?或列?)上使用LWT,所有非SERIAL读取都被迫接受参与仲裁和交易算法的惩罚?
  • 请求是否实际应用于整行,或仅适用于条件语句中涉及的列?

如果我忽略这个建议并进行串行和非串行读/写.LWT以什么方式失败?

Ste*_*ski 10

当您阅读时,Cassandra如何知道检查正在进行的交易?

这正是SERIAL一致性级别所指示的内容.它确保查询仅在完全执行所有挂起事务后返回结果.

在您尝试阅读时提出的新更新是什么,这对读取有何影响?

我认为文档试图说的是读取将像LWT一样处理 - 只是没有对它自己进行任何更新.

如果您正在阅读的一致性(比如说一个)小于用于写作的serialConsistency,那该怎么办?

使用读取SERIAL总是意味着QUORUM一致性水平.阅读并ONE不能为您提供任何保证SERIAL,您最终可以阅读停滞不前的数据.

一旦你在一个表(或行?或列?)上使用LWT,是否所有非SERIAL读取都被迫接受参与仲裁和交易算法的惩罚?

不可以.您可以对查询使用非SERIAL一致性级别,并使用与任何其他非串行查询完全相同的性能特征执行它们.

请求是否实际应用于整行,或仅适用于条件语句中涉及的列?

不,我认为只要您使用不同的列进行串行读/写(包括条件)和常规读/写,您就应该没问题.

如果我忽略这个建议并进行串行和非串行读/写.LWT以什么方式失败?

如果执行常规写入,而不是作为LWT的一部分执行,则这些写入将在任何时候应用,而不会干扰LWT的共识过程.因此,理论上,常规写入可以在评估条件和应用更新之间的某个时间更改作为LWT条件一部分的值,这可能是您希望避免使用LWT的不一致的原因.