【问题标题】:Cassandra + Akka and Global Constraints without ACID TransactionsCassandra + Akka 和没有 ACID 事务的全局约束
【发布时间】:2017-04-06 03:32:34
【问题描述】:

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

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

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

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

我热切期待您的想法。

【问题讨论】:

    标签: cassandra akka


    【解决方案1】:

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

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

    接近尾声有一个例子,它实际上是您案例的典型代表。

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

    轻量级事务的性能不如常规插入,但在你的情况下,我猜它只是工作负载的 1%,所以在那里使用它们完全没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 2018-04-15
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多