Cassandra 卡桑德拉+;没有ACID事务的Akka和全局约束

Cassandra 卡桑德拉+;没有ACID事务的Akka和全局约束,cassandra,akka,Cassandra,Akka,我正在开发一个基于ApacheCassandra的系统,并使用Akka编写,我正在学习如何在没有RDBMS的情况下生活。然而,我有一个独特的问题,我想得到关于如何实现它的反馈。基本上,我已经学会了在没有ACID的情况下工作,并且得出结论,即使银行系统也可以在数据库中工作,只要ACID中有原子。产品采购、库存管理等问题都是可以解决的,我已经解决了。因此,问题围绕着一个简单的活动,即注册用户 当用户注册时,限制条件是用户不能使用其他用户使用的用户名注册,也不能使用其他用户使用的电子邮件注册。然而,这

我正在开发一个基于ApacheCassandra的系统,并使用Akka编写,我正在学习如何在没有RDBMS的情况下生活。然而,我有一个独特的问题,我想得到关于如何实现它的反馈。基本上,我已经学会了在没有ACID的情况下工作,并且得出结论,即使银行系统也可以在数据库中工作,只要ACID中有原子。产品采购、库存管理等问题都是可以解决的,我已经解决了。因此,问题围绕着一个简单的活动,即注册用户

当用户注册时,限制条件是用户不能使用其他用户使用的用户名注册,也不能使用其他用户使用的电子邮件注册。然而,这是一个全局约束,卡桑德拉挡住了我的路。我不能先检查数据库中的用户名,然后在分布式实现中写入用户,因为我缺少Cassandra内部的(I)隔离方面。对于大多数其他事情,我可以启动一个参与者来处理单个产品、供应商或客户,处理这些参与者中的消息,并在那里强制执行约束,但在本例中,我处理的是一个全局资源

为了解决这个问题,我求助于集群单例来实现注册过程,所有注册都通过这个参与者进行,这个参与者强制执行约束,但有一个单一的失败点让我感到不安

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


我热切期待你的想法

卡桑德拉可以通过以下理念为您解决这一问题:

在结尾处有一个例子,它实际上是您案例的海报

然后,如果您需要知道插入是否成功,这可能会有所帮助:

轻量级事务的性能不如常规插入,但在您的情况下,我想它只占工作负载的1%,所以在那里使用它们完全可以