当前位置: 首页 > 知识库问答 >
问题:

如何使用角色进行数据库访问和DDD?

萧光华
2023-03-14

我不太确定如何使用actors访问数据库。在Akka的文档和书籍中,这个主题似乎被省略了。

一种解决方案可以是无状态参与者中的包装DAO。例如,对于数据库中的每个表(或域对象类型或聚合类型),可以创建一个负责所有CRUD操作的参与者。这种方法的一个变体可以是命令和查询的分离。例如,对于每个数据类型,1个命令参与者(用于并发)和10个查询参与者(用于并行性)。

另一种方法可以是创建只表示数据库中一行(或域对象实例或聚合实例)的有状态参与者。当然,在这种情况下,数据库也可以是一个事件存储(如akka持久化模块),最终具有到数据库、文档存储或缓存的一致性投影。这与这里无关。这种方法实际上是一种内存缓存的实现,具有所有的优点和问题。必须有一种策略来摧毁演员,以免在一段时间后内存耗尽。

我将延长我关于DDD的问题:

比方说,我想用Akka演员开发一个DDD应用程序。让我们把注意力集中在指挥部分。在我看来,这应该以这种方式实现:对于每个有界上下文,将有一个端口参与者,例如。喷涂REST API,用于将消息路由到适当的域服务参与者。此服务参与者将业务任务协调到一个或多个域模型聚合。每个聚合都是一个有状态的参与者,由服务参与者从数据库中恢复(或在新数据上创建)。服务参与者向所有相关的聚合参与者发送/路由消息。接收域模型的参与者将对他们的状态消息执行业务验证,然后他们将他们的更改写入数据库。滑头DAO。在向服务参与者发送完成的后,他们会停止。当所有聚合参与者完成后,将向消息的发送者发送一条do消息。一个变体可以是不立即停止有状态域模型参与者,而是在时间跨度之后,比如3分钟。

这是Akka的DDD的有效使用模式吗?


共有1个答案

有权
2023-03-14

通常DB读取操作(cRud)可以由任何参与者直接执行。在大多数情况下,无需进行任何特殊处理。只是一个简单的循环来平衡负载

至于更新操作(CrUD),它们可以被分成非交叉域/分片。例如,具有单个帐户的所有操作最好由单个参与者处理。例如,一个可能有N个几乎独立的处理角色和一个路由器,该路由器基于account.hash代码%N将命令路由到其中一个角色。因此,操作将或多或少平均地分配给参与者,每个账户都将按顺序处理。

P.S.Slick似乎是Akka应用程序的下降数据库库。

 类似资料:
  • 问题内容: 我想知道我需要做什么才能访问数据库线程安全。 这是我的Entity类: 这是DbService类: 这是与DbService一起使用的类: 使 add() , delete() , update() 和 getAll() 方法同步是否足够? 是否可以像在源代码中那样创建DbService的多个实例?还是只需要创建一个实例? 也许我应该使用单例设计模式?还是使DbService静态所有方

  • 在我们的新的保险项目中,我试图及其 我想检查用户名/密码对广告,

  • 我想知道PySpark是否支持使用IAM角色进行S3访问。具体来说,我有一个业务限制,我必须承担AWS角色才能访问给定的存储桶。使用boto时可以这样做(因为它是API的一部分),但我无法找到关于PySpark是否支持开箱即用的明确答案。 理想情况下,我希望能够在本地以独立模式运行时扮演一个角色,并将我的SparkContext指向该s3路径。我发现非IAM呼叫通常会随之而来: 是否存在提供IAM

  • 问题内容: 我已经开发了一个 JAVA SWING应用程序 。我想在安装此应用程序 几台电脑 ,所有 访问互联网 。那么我应该在哪里放置MYSQL数据库?所有这些计算机都应该能够 通过Internet访问相同的数据库。 问题答案: 出于安全性(身份验证授权,加密)和性能的原因,允许直接通过Internet访问数据库不是很常见。在大多数情况下,您将创建一个基于Web的服务器应用程序,该应用程序可以执

  • 场景:我在同一个帐户下有一个EC2实例和一个S3 bucket,我在该EC2上的web应用程序希望访问该bucket中的资源。 在官方文档之后,我使用创建了一个IAM角色,并将其分配给EC2实例。根据我的理解,现在我的web应用程序应该可以访问桶。但是,经过试验,我似乎必须添加桶策略,如下所示: 否则我就被禁止进入。 但是,既然我已经向EC2实例授予了IAM角色,为什么还要使用这个桶策略呢?

  • 第 12 章 使用JDBC进行数据访问 目录 12.1. 简介 12.1.1. Spring JDBC包结构 12.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 12.2.1. JdbcTemplate类 12.2.2. NamedParameterJdbcTemplate类 12.2.3. SimpleJdbcTemplate类 12.2.4. DataSource接口 12.2.5