cassandra 中的轻量级事务
LightWeight Transcation in cassandra
我有两个关于 cassandra 中的 LightWeight Transcation 的问题,
1)下面两个查询会提供什么级别的锁定(行?列?Table?级别锁定)?
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 一致性?我的意思是,如果有任何条件更新正在进行,为什么我们需要在此之上的串行一致性?
如果有人能对此做出回应,那就太好了。
谢谢,
哈利
Cassandra不提供锁机制,IF NOT EXISTS
是轻量级事务。
为了获得可线性化的一致性,我们需要通过单个主机路由所有请求。在像 cassandra 这样的完全分布式系统中,它不太明显。
Cassandra使用paxos协议实现线性一致性
Paxos 共识协议允许分布式系统使用基于群体的算法就提案达成一致,不需要 masters,也没有两阶段提交的问题。 Paxos 有四个阶段:prepare/promise、read/results、propose/accept 和 commit/ack
Cassandra 在提议轻量级事务的节点与集群中任何需要的副本之间进行四次往返,以确保正确执行,因此性能会受到影响。
这听起来成本很高——也许太高了。这就是 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
我有两个关于 cassandra 中的 LightWeight Transcation 的问题,
1)下面两个查询会提供什么级别的锁定(行?列?Table?级别锁定)?
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 一致性?我的意思是,如果有任何条件更新正在进行,为什么我们需要在此之上的串行一致性?
如果有人能对此做出回应,那就太好了。
谢谢, 哈利
Cassandra不提供锁机制,IF NOT EXISTS
是轻量级事务。
为了获得可线性化的一致性,我们需要通过单个主机路由所有请求。在像 cassandra 这样的完全分布式系统中,它不太明显。
Cassandra使用paxos协议实现线性一致性
Paxos 共识协议允许分布式系统使用基于群体的算法就提案达成一致,不需要 masters,也没有两阶段提交的问题。 Paxos 有四个阶段:prepare/promise、read/results、propose/accept 和 commit/ack
Cassandra 在提议轻量级事务的节点与集群中任何需要的副本之间进行四次往返,以确保正确执行,因此性能会受到影响。
这听起来成本很高——也许太高了。这就是 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