我们正在努力重写现有的应用程序,并且需要支持大量的数据库读/写。为此,我们正在继续对MySQL进行分片。由于我们允许批量API进行读/写,这意味着在不同的分片上并行执行查询。
您能否建议在Java中支持相同的框架,主要集中在拆分和聚合作业上。基本上我将定义两个接口ReadTask和WriteTask,这些任务的实现将是作业,它们将作为并行执行列表提交。
我可能没有以正确的方式提出这个问题,但我希望你能从描述中得到上下文。如果有答案需要任何信息,请告诉我。
BLUF:这听起来像Akka中常见的处理模式。
这听起来像一个Scatter-Gather图案API。
如果你有一份工作,你应该首先回答该工作是否只会触及一个或多个碎片?如果它会触及多个分片,您可以选择拒绝它(仅允许单个分片操作),或者您可以选择将其分解(分散)到其他工作者。
Akka为您提供API,特别是Streaming API,讨论这种工作方式。 Akka最好用Scala表示,但它有一个Java API,可以为您提供Scala的所有功能。您正在谈论“映射”和“减少”(或“折叠”)数据,这些是功能操作,Scala为您提供功能习惯用法。
如果将其分散到其他工作者,则需要将作业清单传达给系统的聚集端。
希望这很有帮助。
您可以使用Java中的ThreadPoolExecutor和Executors(factory)创建可以提交读写任务的线程池。它允许根据您的情况运行Runnable和Callable。