根据这个文档,Cassandra有不同的一致性级别,其中两个叫做SERIAL和LOCAL_SERIAL。除了这两个级别,我理解了所有的一致性级别。它说它与轻量级事务有关,但我也不明白。如果有人能给我解释一下这些水平就太好了。
SERIAL
LOCAL_SERIAL
cbjzeqam1#
轻量级事务(LWT)是需要按顺序执行并且不能被中断的操作,它需要可线性化的一致性--用数据库术语来说,当事务正在进行时,记录被锁定,因此没有其他进程可以对其进行操作。LWT也被称为比较和设置(CAS)操作,其中在执行“设置”(写语句)之前必须满足“比较”步骤(条件语句)。为了满足条件,LWT必须在写之前执行读(比较)--写前读。LWT的一个典型用法是创建新用户名。在将用户名分配给用户之前,我们必须首先检查(读取)该用户名是否已在使用(“比较”步骤)。如果该用户名尚不存在,则我们可以创建它,否则用户必须选择另一个用户名。CQL的条件语句包括使用IF EXISTS或IF NOT EXISTS子句。例如:
IF EXISTS
IF NOT EXISTS
INSERT INTO users (username, name) VALUES (?, ?) IF NOT EXISTS
序列一致性SERIAL和LOCAL_SERIAL专门用于“写前读”的读取阶段的轻量事务。您可以选择使用SERIAL一致性(要求所有DC中有仲裁副本)或LOCAL_SERIAL(要求本地DC中有仲裁副本)。串行一致性不能用于正常的读取或写入,只能用于LWT。有关更多信息,请参阅Lightweight transactions in Cassandra。干杯!
1条答案
按热度按时间cbjzeqam1#
轻量级事务(LWT)是需要按顺序执行并且不能被中断的操作,它需要可线性化的一致性--用数据库术语来说,当事务正在进行时,记录被锁定,因此没有其他进程可以对其进行操作。
LWT也被称为比较和设置(CAS)操作,其中在执行“设置”(写语句)之前必须满足“比较”步骤(条件语句)。为了满足条件,LWT必须在写之前执行读(比较)--写前读。
LWT的一个典型用法是创建新用户名。在将用户名分配给用户之前,我们必须首先检查(读取)该用户名是否已在使用(“比较”步骤)。如果该用户名尚不存在,则我们可以创建它,否则用户必须选择另一个用户名。
CQL的条件语句包括使用
IF EXISTS
或IF NOT EXISTS
子句。例如:序列一致性
SERIAL
和LOCAL_SERIAL
专门用于“写前读”的读取阶段的轻量事务。您可以选择使用SERIAL
一致性(要求所有DC中有仲裁副本)或LOCAL_SERIAL
(要求本地DC中有仲裁副本)。串行一致性不能用于正常的读取或写入,只能用于LWT。
有关更多信息,请参阅Lightweight transactions in Cassandra。干杯!