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



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

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

我可能没有以正确的方式称呼这个问题,但我希望你从描述中得到上下文。让我知道是否需要任何信息来回答。

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

这听起来像是一个分散-聚集模式化的API。

如果你有 1 个作业,你应该首先回答该作业是否只涉及一个或多个分片?如果它将涉及许多分片,您可以选择拒绝它(仅允许单个分片操作(,或者您可以选择将其分解(分散(给其他工作线程。

Akka 为您提供了 API,尤其是 Streaming API,它们讨论了这种工作风格。Akka最好用Scala表达,但它有一个Java API,可以为您提供Scala的所有功能。您正在谈论"映射"和"减少"(或"折叠"(数据,这些是函数操作,Scala 为您提供了函数习语。

如果将其分散在其他工作线程中,则需要将作业清单传达给系统的收集端。

希望对您有所帮助。

您可以使用 Java 中的 ThreadPoolExecutor & Executors(factory( 创建线程池,您可以在其中提交读取和写入任务。它允许根据您的情况进行Runnable和Callable。

最新更新