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

时间:2018-03-05 05:42:30

标签: java multithreading jobs

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

希望这有帮助。

答案 1 :(得分:0)

您可以使用ThreadPoolExecutor& Java中的Executors(工厂)用于创建可以提交读取和放大的线程池。写任务。它允许Runnable&可根据您的情况调用。