没有ACID交易的Cassandra + Akka和全局约束

时间:2017-04-05 19:20:41

标签: cassandra akka

我正在开发一个基于Apache Cassandra的系统,并使用Akka编写,我正在学习没有RDBMS的生活。但是,我有一个单一的问题,我希望得到关于如何实现它的反馈。基本上我已经学会了在没有ACID的情况下工作,并得出结论,即使银行系统可以在数据库中完成,只要它具有ACID中的(A)tomic即可。产品购买,库存管理等是可以解决的,我已经解决了。那么,问题围绕着一个简单的活动,即注册用户。

当用户注册约束时,用户可能没有使用其他用户使用的用户名注册,也无法注册其他用户使用的电子邮件。然而,这是一个全局约束,cassandra阻碍了我。我无法首先检查数据库中的用户名,然后在分布式实现中编写用户,因为我缺少Cassandra中的(I)隔离方面。对于大多数其他事情,我可以启动一个actor来处理单个产品或供应商或客户,并处理这些actor中的消息并在那里强制执行约束,但在这种情况下,我正在处理全局资源。

为了解决这个问题,我已经使用了一个集群单例来实现注册过程,并且所有注册都是通过这个执行约束的行为者来实现的,但是单点故障让我感到不安。

这让我想到了这个问题。仅使用Cassandra和Akka,在没有集群单例的分布式环境中,人们对如何实现用户注册同时保持全局约束有任何建议。这种实现也应该适用于系统中的其他其他全局资源。

我热切期待你的想法。

1 个答案:

答案 0 :(得分:1)

Cassandra可以通过以下概念为您处理:

https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0

接近结尾的地方有一个例子,它实际上是你孩子的典型代表。

然后,如果你需要知道插入是否成功,这可能会有所帮助: https://stackoverflow.com/a/31390601/7413631

轻量级交易的效果不如常规插入,但在你的情况下,我猜它只占工作量的1%,所以在那里使用它们就完全没问题了。