1

我有一组数据库文档(几千个),我想为其运行一些数据迁移活动。这些文档中的每一个都包含对 Windows 文件系统中不同文件的引用。这些文件存储在通过共享文件夹访问的文件服务器中。我想做的是将文件移动到文件系统中的不同位置,根据文档中的属性重新排列它们。

我想到了以下设计:

  1. 让一个参与者查询数据库并为每个文档生成一个参与者
  2. 这些参与者中的每一个都将负责将他们的相关文件复制到其新位置,并负责处理任何异常
  3. 当这些参与者中的每一个完成其任务时,它将通知中心参与者结果(成功/失败)

这是一个幼稚的设计吗?我应该限制创建了多少个参与者,还是 Akka 是否根据处理器可用性来调节分配的资源?文件系统方面是否存在任何问题,同时有太多的请求处于活动状态?

4

1 回答 1

2

akka 的默认线程池/执行上下文/调度程序将有一个类似于每个核心一个线程的东西,移动文件可能是一个阻塞操作,因此您在任何给定时刻移动的文件数量与您拥有的核心数量相同,并且在此期间没有将调用其他参与者。

您可以将调度程序配置为使用更多线程来获得更多并行活动,或者将文件移动参与者放置到不干扰其他参与者的特定调度程序。

也许更好的主意是将文档视为通过您的系统传递的消息,最终您将每个文档作为消息枚举,将其发送给从文件中解析属性的参与者并将其转发给执行实际移动。这使得可以根据磁盘的吞吐量等决定有多少 parser-actor 实例和多少个 mover-actor 实例。

于 2013-10-30T12:43:10.500 回答