【发布时间】:2016-09-28 07:48:10
【问题描述】:
我正在尝试构建一个 Spring/Spring Boot-RESTful Web 服务,
它接受一个 CSV 文件,每行有 100 万行/40 列作为输入(来自基于 Angular 的前端),并且将是一个同步调用。在进入其他屏幕之前,必须通知用户上传状态。所以,等待时间不能超过几分钟(比如 5 分钟)。
这些行中的每一行都必须根据 DB 中的内容进行验证,如果发现有效,则将其插入 DB。简而言之,每一行都可以是一个单独的独立事务。
您能否建议实现这一点的最佳方法是什么?
当前的遗留系统在存储过程中实现了相同的功能,这使得解决方案与 DB 紧密耦合,如果需要更改 RDBMS,这将是一个问题。
在异步 Web 服务调用中处理这 100 万个数据块(比如 20k)的任何方法?
春季批次?
存储过程能否比上述两个选项更合适、性能更好(猜不出来!)?
您能否提供一些至少与存储过程一样好的方法以及如何根据建议的解决方案进行水平扩展。
【问题讨论】:
-
您的 API 调用是否依赖于 API 响应?
-
您可以实现spring批处理-使用块处理和主从配置来并行处理和批量更新它们(失败和成功记录不同)。或者将每条记录存储在一个临时表中,然后调用一个过程来批量插入它们。
-
适当缩放网格大小,有一个很好的例子可以参考mkyong.com/spring-batch/spring-batch-partitioning-example
标签: spring rest spring-boot spring-batch