一尘不染

Spring RESTful Web服务-大量数据处理

spring-boot

我正在尝试构建Spring / Spring Boot-RESTful Web服务,

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

  2. 这些行中的每一行都必须根据DB中的内容进行验证,如果发现有效,则将其插入DB中。简而言之,每一行可以是一个单独的独立事务。

您能否建议实现此目标的最佳方法是什么?

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

  1. 有什么方法可以在异步Web服务调用中以块(例如20k)的形式处理这100万个数据?

  2. Spring批?

  3. 存储过程是否可以比上述两个选项更合适且性能更好(猜测不行!)?

您能否提供一些至少与存储过程一样好的方法,以及如何根据建议的解决方案进行水平扩展?


阅读 361

收藏
2020-05-30

共1个答案

一尘不染

您选择了三个建议选项,这是对的。不幸的是,您的问题的答案 取决于

以上任何一种方法都可以为您服务。我个人更喜欢Spring Batch,因为我发现编程模型简单直观。

Spring批处理指南


另一种方法是使用消息传递来并行处理行:

  1. 控制器接收包含大量数据的CSV文件
  2. 将数据拆分成较小的部分,然后发送到临时Message Queue
  3. 多个工作节点接收消息并进行处理
  4. 监视临时队列的大小并相应地更新用户(已完成百分比)

简而言之,您对自己领域的了解最终将指导您为企业找到最佳解决方案。

2020-05-30