我们要求源数据库中有数百万条记录,我们需要读取此数据,验证并插入目标数据库。这需要按照配置的预定时间(例如每天下午12点进行)。 )。我们希望实现SLA,我们可以在30分钟内处理500k记录。我们有4个JVM的集群环境。
技术堆栈: Oracle,Spring-Quartz
我们使用Spring-Quartz设计了我们的解决方案,其中一个工作负责将工作分配给其他工作。
Quartz Job(工作分销商):这项工作的职责是将工作分配给不同的工人/工作。此表将读取记录范围,并在临时表中记录范围以及工作者JVM(谁将处理数据)。这只能由4个JVM中的一个运行。如果一个JVM触发它,另一个JVM将不会运行此作业。
Quartz Job(Workers):这项工作的职责是阅读工作经销商的临时表,并获取分配给运行此工作的JVM的范围。此作业将根据指定的范围从源数据库中获取数据,执行验证并插入目标数据库。这个作业将产生多个线程来处理no。分配的记录。
我发布这个问题只是为了对这种方法有所了解。还有其他更强大的方法吗?
答案 0 :(得分:0)
我有过类似的经历,为了让您的生活更轻松,Apache Spark允许您将ETL(Extract-Transform-Load)应用程序编程为单个工作者,但是下面将为您分配工作负载,数据也可以是弹性的,并且如果群集出现故障,它就能继续运行。