cassandra中的LightWeight Transcation

时间:2017-11-24 01:58:34

标签: cassandra cassandra-2.0 cqlsh cassandra-3.0 cassandra-2.1

关于cassandra的LightWeight Transcation我有两个问题,

1)将为以下两个查询提供什么级别的锁定(行?列?表?级锁定)?

i) INSERT INTO user (user_id, user_name, user_phone, timestamp) VALUES(1,'uma', 9003934069, 4331312423232) IF EXISTS;
ii)  UPDATE user SET user_name = 'harry' where user_id=1 IF timestamp=4331312423232;

2)如果LWT提供锁定机制,为什么我们需要在READ中设置SERIAL一致性?我的意思是如果有任何条件更新正在进行,为什么我们需要上面的SERIAL一致性?

这真的很棒,如果有人可以回应这个。

谢谢, 哈利

1 个答案:

答案 0 :(得分:2)

Cassandra不提供锁机制,IF NOT EXISTS是轻量级交易。

为了获得可线性化的一致性,我们需要通过单个主服务器路由所有请求。在像卡桑德拉这样的完全分布式系统中,它不太明显。

Cassandra使用paxos协议实现线性化一致性。

Paxos 共识协议允许分布式系统使用基于仲裁的算法就提案达成一致,不需要主设备,也没有两阶段提交的问题。 Paxos有四个阶段:准备/承诺,读取/结果,建议/接受和提交/确认

Cassandra在提出轻量级事务的节点和集群中任何所需的副本之间进行四次往返,以确保正确执行,从而影响性能。

Lightweight Transactions

这听起来像是一个高成本 - 也许太高了。这就是Cassandra可以抛出超时异常的原因。因此,为绝对必要的情况保留轻量级交易

资料来源: http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_ltwt_transaction_c.html https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0