首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra作为分布式锁

Cassandra作为分布式锁
EN

Stack Overflow用户
提问于 2017-07-16 07:30:08
回答 1查看 6.2K关注 0票数 1

我试图评估分布式锁定的各种选项。我的候选名单中很少有动物园管理员,MySQL和卡桑德拉。

对于卡桑德拉,我想的是创建一个表,比如锁

代码语言:javascript
复制
create table if not exists app.locks (
    key text,
    primary KEY (key)
);

然后,作为acquireLock进程的一部分,我可以执行一个insert (如果不存在)查询,如下所示。只有当insert返回true时,acquireLock进程才会返回。

代码语言:javascript
复制
INSERT INTO app.locks (key) VALUES ('KEY_1') IF NOT EXISTS;

释放锁可以删除此键的数据,以便其他线程可以尝试获取它。

我做了一些性能测试的所有选项,我已经列出了。有了这些结果,动物管理员和MySQL就不会出现任何错误,因为卡桑德拉的结果是不一致的,而且在所有的测试中都显示了很少或更多的错误。大多数错误是“在一致性仲裁时写入查询期间的Cassandra超时”。

我在这里的问题是,卡桑德拉是否意味着分布式锁定?如果试图获取此锁的并发线程数超过该锁,它是否可以缩放?

期待着专家们的思考。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-16 08:28:46

Cassandra从帽子定理中选择AP,这意味着在Cassandra中,可用性和分区容限通常被认为比一致性更重要。卡桑德拉提供了最终一致性。

Cassandra不提供锁机制。您使用的是IF NOT EXISTS,它是一个轻量级事务。

轻量级事务(如果条款)

虽然对于许多用例来说,具有最终/可调一致性的持久事务是相当令人满意的,但是在需要更多的情况下确实会出现这种情况。使用可线性一致性的轻量级事务(也称为比较和集合)可能可以满足这些需求。

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

这听起来成本很高--也许太高了。这就是为什么卡桑德拉给你超时值的例外。因此,将轻量级事务保留在绝对必要的情况下。

资料来源:c.html https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45126146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档