关于卡桑德拉的LightWeight超越,我有两个问题,
( 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中设置串行一致性?我的意思是,如果任何有条件的更新正在进行,为什么我们需要在上面的串行一致性?
如果有人能对此做出回应,那就太好了。
谢谢你,哈利
发布于 2017-11-24 05:32:00
IF NOT EXISTS 不提供锁机制, 是一个轻量级事务。
为了获得线性化的一致性,我们需要路由所有请求通过一个单一的主机。在像卡桑德拉这样的全分布式系统中,这一点就不那么明显了。
Cassandra使用paxos协议实现线性一致性。
- Paxos协商一致协议允许分布式系统使用基于仲裁的算法就提案达成一致,不需要主程序,并且不存在两阶段提交的问题。Paxos有四个阶段:准备/承诺、阅读/结果、提议/接受和提交/ack。
Cassandra在一个节点之间进行了四次往返,提出了一个轻量级事务和集群中任何需要的副本,以确保正确的执行,从而影响性能。

这听起来成本很高--也许太高了。这就是为什么Cassandra可以抛出超时异常。因此,将轻量级事务保留在绝对必要的情况下。
资料来源:c.html https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0
https://stackoverflow.com/questions/47465360
复制相似问题