Transactions 使用轻量级事务的含义是什么?
特别是我在看上面写着: 如果轻量级事务用于写入分区内的行,则只应使用读写操作的轻量级事务 对于使用LWT进行读取操作是什么样子,我感到困惑。具体来说,这与每查询一致性(和串行一致性)级别的关系 forTransactions 使用轻量级事务的含义是什么?,transactions,cassandra,datastax-java-driver,Transactions,Cassandra,Datastax Java Driver,特别是我在看上面写着: 如果轻量级事务用于写入分区内的行,则只应使用读写操作的轻量级事务 对于使用LWT进行读取操作是什么样子,我感到困惑。具体来说,这与每查询一致性(和串行一致性)级别的关系 for串行读取一致性提出了进一步的问题: 允许读取数据的当前(可能是未提交的)状态,而无需提出新的添加或更新 这表明使用SERIAL进行读取并不是“使用LWT” 但是 当您进行读取时,Cassandra如何知道检查正在进行的事务 当您尝试阅读时,建议的新更新是什么?这对阅读有何影响 如果您正在读取的一致
串行
读取一致性提出了进一步的问题:
允许读取数据的当前(可能是未提交的)状态,而无需提出新的添加或更新
这表明使用SERIAL
进行读取并不是“使用LWT”
但是
- 当您进行读取时,Cassandra如何知道检查正在进行的事务
- 当您尝试阅读时,建议的新更新是什么?这对阅读有何影响
- 如果您正在读取的一致性(比如说
)小于用于编写的串行一致性,那么该如何工作ONE
- 一旦您在表(或行?或列?)上使用LWT,是否所有非串行读取都会被迫接受参与定额和事务算法的惩罚
- 该要求实际应用于整行还是仅应用于条件语句中涉及的列
串行一致性级别所指示的。它确保查询仅在所有挂起的事务完全执行后返回结果
当您尝试阅读时,建议的新更新是什么,
这对阅读有什么影响
我认为文档试图说的是,读取将像LWT一样处理-只是不需要自己进行任何更新
如果你正在阅读的一致性(比如说一个)低于用于写作的串行一致性,那么这将如何工作
使用SERIAL
读取将始终意味着QUORUM
作为一致性级别。使用ONE
读取不会为您提供SERIAL
提供的任何保证,您最终可能会读取暂停的数据
一旦在表(或行?、或列?)上使用LWT,是否所有非串行读取都会被迫接受参与定额和事务算法的惩罚
不可以。您可以对查询使用非串行一致性级别,并让它们以与任何其他非串行查询完全相同的性能特征执行
该要求实际应用于整行还是仅应用于条件语句中涉及的列
不,我认为只要使用不同的列进行串行读/写(包括条件)和常规读/写,就可以了
如果我忽略此建议并进行串行和非串行读/写。LWT以何种方式失败
如果您执行常规写入,而不是作为LWT的一部分执行,则这些写入将在任何时候应用,而不会干扰LWT的一致性过程。因此,从理论上讲,定期写入可以在评估条件和应用更新之间更改作为LWT条件一部分的值,这是您希望避免使用LWT的不一致的潜在原因 LWTs将始终在分区键的上下文中执行。“使用串行读取将始终意味着仲裁作为一致性级别。”您确定吗?也许这取决于司机。从Java datastax ConsistencyLevel#isSerial源代码:,“此一致性级别是否为串行,即,仅适用于轻量级事务的“paxos”阶段”。相关: