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

Spring RESTful web services - High volume data processing

我正在尝试构建 Spring/Spring 引导- RESTful 网络服务,

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

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

能否请您提出实现此目标的最佳方法?

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

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

  2. Spring批量?

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

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

您的三个建议选项是正确的。不幸的是,你的问题的答案是,这取决于

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

Spring Batch Processing Guide


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

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

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