使用Java中的拆分和聚合并行执行作业

问题描述 投票:0回答:2

我们正在努力重写现有的应用程序,并且需要支持大量的数据库读/写。为此,我们正在继续对MySQL进行分片。由于我们允许批量API进行读/写,这意味着在不同的分片上并行执行查询。

您能否建议在Java中支持相同的框架,主要集中在拆分和聚合作业上。基本上我将定义两个接口ReadTask和WriteTask,这些任务的实现将是作业,它们将作为并行执行列表提交。

我可能没有以正确的方式提出这个问题,但我希望你能从描述中得到上下文。如果有答案需要任何信息,请告诉我。

java multithreading jobs
2个回答
1
投票

BLUF:这听起来像Akka中常见的处理模式。

这听起来像一个Scatter-Gather图案API。

如果你有一份工作,你应该首先回答该工作是否只会触及一个或多个碎片?如果它会触及多个分片,您可以选择拒绝它(仅允许单个分片操作),或者您可以选择将其分解(分散)到其他工作者。

Akka为您提供API,特别是Streaming API,讨论这种工作方式。 Akka最好用Scala表示,但它有一个Java API,可以为您提供Scala的所有功能。您正在谈论“映射”和“减少”(或“折叠”)数据,这些是功能操作,Scala为您提供功能习惯用法。

如果将其分散到其他工作者,则需要将作业清单传达给系统的聚集端。

希望这很有帮助。


0
投票

您可以使用Java中的ThreadPoolExecutorExecutors(factory)创建可以提交读写任务的线程池。它允许根据您的情况运行Runnable和Callable。

© www.soinside.com 2019 - 2024. All rights reserved.