请求详解Cassandra中的SERIAL与LOCAL_SERIAL一致性级别
Cassandra的SERIAL、LOCAL_SERIAL一致性级别与轻量事务
先搞懂轻量事务
Cassandra的轻量事务是基于Paxos协议实现的,专门解决单分区内需要原子性、无冲突的写操作场景——比如库存扣减、账户转账这类"先读再写"的操作,防止并发执行时出现数据不一致。触发轻量事务的语法很明确:写语句里带上IF EXISTS/IF NOT EXISTS,或者IF [列名] = [指定值]的条件。
SERIAL 一致性级别
- 仅用于跨数据中心的轻量事务
- 执行逻辑:轻量事务启动后,会先在集群所有数据中心的副本间通过Paxos达成全局共识,确定操作的唯一执行顺序,再落地写操作。这样能保证整个集群范围内的线性化一致性——不管客户端连哪个DC,看到的操作结果和顺序都是统一的,不会出现冲突。
- 缺点:因为要跨所有DC协调,延迟比LOCAL_SERIAL高不少。
LOCAL_SERIAL 一致性级别
- 仅用于单数据中心内的轻量事务
- 执行逻辑:只在客户端所在的本地数据中心副本间通过Paxos达成共识,不需要和其他DC同步,完成后再执行写操作。既能保证本地DC内的线性化一致性,又能大幅降低延迟。
- 优势:性能比SERIAL好,适合不需要跨DC同步的业务场景。
关键注意事项
- 这两个一致性级别只能和轻量事务绑定使用,普通写操作(不带IF条件)指定这俩级别会直接报错。
- 轻量事务仅支持单分区操作,跨分区的场景下无法保证一致性,别硬用。
- 线性化一致性的核心是:操作看起来像是原子完成的,客户端不会读取到操作的中间状态。
内容的提问来源于stack exchange,提问作者jondra
相关产品推荐
相关产品推荐

