2016-05-30 50 views
2

我试图建立一个Spring /春天Boot- RESTful Web服务,春天RESTful Web服务 - 高容量的数据处理

  1. 它接受一个CSV 100万行/列40各行中的文件作为输入(来自基于Angular的前端)并且将是同步调用。在进入其他屏幕之前,必须通知用户上载状态。所以,等待时间不能超过几分钟(比如5分钟)。

  2. 这些行中的每一行都必须针对数据库中的内容进行验证,并且如果发现有效,则会将相同内容插入到数据库中。总之,每一行可以是一个独立的独立交易。

你可以请建议什么是最好的方法来实现这个?

当前遗留系统在存储过程中实现相同的功能,这使得解决方案与数据库紧密耦合,如果RDBMS需要随时更改,这将是一个问题。

  1. 在异步Web服务调用中处理这些1百万数据块(比如20k)的任何方法?

  2. 春季批次?

  3. 存储过程可能比上面两个选项更适合和更好地执行任何机会(猜不到!)?

你能否请一些至少和存储过程一样好的方法以及如何基于建议的解决方案进行水平缩放。

+0

你的API调用取决于API响应吗? –

+0

您可以实现弹簧批处理 - 使用块处理和主从设置进行并行处理并批量更新它们(不同的失败和成功记录)。或将每个记录存储在临时表中,然后调用过程来批量插入它们。 – surya

+0

适当缩放网格大小,并有一个很好的例子,你可以参考http://www.mkyong.com/spring-batch/spring-batch-partitioning-example/ – surya

回答

1

您的三条建议选项正处于正确的轨道上。不幸的是,你的问题的答案是它取决于

以上任何一种方法都适用于您。我个人比较喜欢Spring Batch,因为我发现编程模型简单直观。

Spring Batch Processing Guide


另一种方法将是使用Messaging并行行的处理:

  1. 控制器接收包含大量数据的CSV文件
  2. 分割数据分成更小的块并发送到临时消息队列
  3. 多个工作节点接收消息并进行处理他们
  4. 监视临时队列的大小和更新相应的用户(%完成)

总之,你自己的域名的知识最终将引导你走向为您的企业的最佳解决方案。

+0

不想考虑MQ的原因它增加了另一个失败点(当MQ服务器/高负载出现问题时),而对于成百上千的数据行却可以在没有它的情况下处理。如果同样需要在春季批量完成,任何人都可以建议,我们如何跟踪哪个工人正在处理哪一行?如何避免多个工作人员处理相同的数据? – Anand