Spring RESTful web服务-高容量数据处理

Spring RESTful web服务-高容量数据处理,spring,rest,spring-boot,spring-batch,Spring,Rest,Spring Boot,Spring Batch,我正在尝试构建一个Spring/Spring引导RESTful web服务 它接受一个CSV文件,每行有100万行/40列作为输入(来自基于角度的前端),并且将是一个同步调用。在进入其他屏幕之前,必须通知用户上载状态。所以,等待时间不能超过几分钟(比如说5分钟) 这些行中的每一行都必须根据数据库中的内容进行验证,如果发现有效,则会将其插入到数据库中。简而言之,每一行都可以是一个独立的事务 你能建议什么是实现这一目标的最佳方法吗 当前的遗留系统在存储过程中实现了相同的功能,这使得解决方案与数据库紧

我正在尝试构建一个Spring/Spring引导RESTful web服务

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

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

  • 你能建议什么是实现这一目标的最佳方法吗

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

  • 在异步web服务调用中以块(比如20k)的形式处理这100万个数据有什么方法吗

  • 春季批次

  • 存储过程是否可能比上述两个选项更合适、性能更好(猜不到!)


  • 请您提供一些至少与存储过程一样好的方法,以及如何基于建议的解决方案进行水平扩展

    您的三个建议选项是正确的。很遗憾,你的问题的答案是,视情况而定

    以上任何一种方法都适用于您。我个人更喜欢SpringBatch,因为我觉得编程模型简单直观


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

  • 控制器接收包含大量数据的CSV文件
  • 将数据拆分为较小的部分并发送到临时消息队列
  • 多个工作节点接收并处理消息
  • 监视临时队列的大小并相应地更新用户(%completed)


  • 简而言之,您对自己领域的了解将最终引导您找到适合您业务的最佳解决方案。

    您的API调用是否取决于API响应?您可以实施spring批处理-使用区块处理和主从配置来并行处理和批处理更新它们(失败和成功记录不同)。或者将每个记录存储在临时表中,然后调用一个过程来批量插入它们。适当地缩放网格大小,并且有一个非常好的示例,您可以参考它,不想考虑MQ,原因是它增加了另一个故障点(当MQ服务器/高负载出错时);而对于数百行数据,不使用它也可以处理相同的数据。如果在spring批处理中也需要这样做,有人能建议,我们如何跟踪哪个工人正在处理哪一行?如何避免多个工人处理同一数据?