Scala Akka是否根据可用资源对参与者进行监管?

Scala Akka是否根据可用资源对参与者进行监管?,scala,akka,Scala,Akka,我有一组数据库文档(几千个),我想为它们运行一些数据迁移活动。每个文档都包含对Windows文件系统中不同文件的引用。这些文件存储在通过共享文件夹访问的文件服务器中。我想做的是将文件移动到文件系统中的不同位置,根据文档中的属性重新排列它们 我想到了以下设计: 让一个参与者查询数据库并为每个文档生成一个参与者 这些参与者中的每一个都将负责复制他们的相关信息 文件到它的新位置,并处理任何异常 当每个参与者完成其任务时,它将通知 结果的中心参与者(成功/失败) 这是一个天真的设计吗?我应该限制创建了多

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

我想到了以下设计:

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

  • 这是一个天真的设计吗?我应该限制创建了多少参与者,还是Akka根据处理器可用性管理分配的资源?文件系统方面是否会出现问题,同时激活了太多的请求?

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

    您可以将调度程序配置为使用更多线程来获得更多并行活动,或者将文件移动参与者放置到一个特定的调度程序,该调度程序不会与其他参与者发生冲突


    也许更好的办法是将文档视为通过系统的消息,在一端,您将每个文档作为消息枚举,将其发送给分析文件属性的参与者,并将其转发给执行实际移动的参与者。这使您可以根据磁盘的吞吐量等来决定有多少parser-actor实例和多少mover-actor实例。

    offtopic:我想在这种特殊情况下,您最好使用并行集合。@om-nom-nom:有趣。你的意思是拥有一个包含(sourcePath,destinationPath)元素的集合,然后使用一个基于复制操作结果返回成功/失败的函数对其进行映射吗?是的,或多或少:
    val xs=Seq(src->dst,…);X.PAR.MAP{TILL(…)} /代码> +应该比行动者更简单。