特别是我在看this page所说的内容:
如果使用轻量级事务来写入分区中的行,则只应使用读取和写入操作的轻量级事务。
我对使用LWT进行读取操作的样子感到困惑。具体来说,这与每个查询的一致性(和serialConsistency)级别有什么关系。
SERIAL
读取一致性description引发了更多问题:
允许在不提议添加或更新的情况下读取当前(可能未提交)的数据状态。
这表明使用SERIAL
进行读取不是"使用LWT"。
但是
ONE
)小于用于撰写的serialConsistency,那该怎么办?SERIAL
读取都被迫接受参与仲裁和交易算法的惩罚?如果我忽略此建议并进行串行和非串行读/写。 LWT以何种方式失败?
答案 0 :(得分:10)
Cassandra如何知道在您检查正在进行的交易时 读一读吗?
这正是<string name="welcome_text">Welcome to CompanyName</string>
<string name="welcome_text_bold">CompanyName</string>
一致性级别所指示的内容。它确保查询仅在完全执行所有挂起事务后返回结果。
在您尝试阅读时提出的新更新是什么, 这对读取有何影响?
我认为文档试图说的是读取将像LWT一样处理 - 只是没有对它自己进行任何更新。
如果您正在阅读的一致性(比如说一个)小于用于写作的serialConsistency,那该怎么办?
使用SERIAL
进行的读取始终意味着SERIAL
作为一致性级别。使用QUORUM
阅读不会为ONE
提供任何保证,您最终可能会阅读停滞不前的数据。
在桌面上使用LWT(或行?或列?)后,是否所有非SERIAL读取都被迫接受参与仲裁和交易算法的惩罚?
没有。您可以对查询使用非SERIAL一致性级别,并使用与任何其他非串行查询完全相同的性能特征执行它们。
请求是否实际应用于整行,或仅适用于条件语句中涉及的列?
不,我认为只要您使用不同的列进行串行读/写(包括条件)和常规读/写,您就应该没问题。
如果我忽略此建议并进行串行和非串行读/写。 LWT以何种方式失败?
如果执行常规写入,而不是作为LWT的一部分执行,那些写入将随时应用,而不会干扰LWT的共识过程。因此,理论上,常规写入可以在评估条件和应用更新之间的某个时间更改作为LWT条件一部分的值,这可能是您希望避免使用LWT的不一致的原因。