我正在开发一个基于Apache Cassandra的系统,并使用Akka编写,我正在学习没有RDBMS的生活。但是,我有一个单一的问题,我希望得到关于如何实现它的反馈。基本上我已经学会了在没有ACID的情况下工作,并得出结论,即使银行系统可以在数据库中完成,只要它具有ACID中的(A)tomic即可。产品购买,库存管理等是可以解决的,我已经解决了。那么,问题围绕着一个简单的活动,即注册用户。
当用户注册约束时,用户可能没有使用其他用户使用的用户名注册,也无法注册其他用户使用的电子邮件。然而,这是一个全局约束,cassandra阻碍了我。我无法首先检查数据库中的用户名,然后在分布式实现中编写用户,因为我缺少Cassandra中的(I)隔离方面。对于大多数其他事情,我可以启动一个actor来处理单个产品或供应商或客户,并处理这些actor中的消息并在那里强制执行约束,但在这种情况下,我正在处理全局资源。
为了解决这个问题,我已经使用了一个集群单例来实现注册过程,并且所有注册都是通过这个执行约束的行为者来实现的,但是单点故障让我感到不安。
这让我想到了这个问题。仅使用Cassandra和Akka,在没有集群单例的分布式环境中,人们对如何实现用户注册同时保持全局约束有任何建议。这种实现也应该适用于系统中的其他其他全局资源。
我热切期待你的想法。
答案 0 :(得分:1)
Cassandra可以通过以下概念为您处理:
https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0
接近结尾的地方有一个例子,它实际上是你孩子的典型代表。
然后,如果你需要知道插入是否成功,这可能会有所帮助: https://stackoverflow.com/a/31390601/7413631
轻量级交易的效果不如常规插入,但在你的情况下,我猜它只占工作量的1%,所以在那里使用它们就完全没问题了。