我正在尝试构建一个 Spring/Spring Boot-RESTful Web 服务,
它接受每行 100 万行/40 列的 CSV 文件作为输入(来自基于 Angular 的前端),并且将是同步调用。在进入其他屏幕之前,必须通知用户上传状态。所以,等待时间不能超过几分钟(比如5分钟)。
这些行中的每一行都必须根据数据库中的内容进行验证,如果发现有效,则将其插入到数据库中。简而言之,每一行都可以是一个单独的独立事务。
您能否建议实现此目的的最佳方法是什么?
当前的遗留系统在存储过程中实现了相同的功能,这使得解决方案与数据库紧密耦合,如果需要对 RDBMS 进行更改,这将是一个问题。
有什么方法可以在异步 Web 服务调用中以块(例如 20k)处理这 100 万个数据吗?
春季批次?
存储过程是否可能比上述两个选项更合适且性能更好(我猜不会!)?
您能否帮忙提供一些至少与存储过程一样好的方法以及如何根据建议的解决方案进行水平扩展。
您的三个建议选项是正确的。不幸的是,你的问题的答案是,这取决于.
上述任何一种方法都可能适合您。我个人更喜欢 Spring Batch,因为我发现它的编程模型简单直观。
Spring 批处理指南 http://spring.io/guides/gs/batch-processing/
另一种方法是使用消息传递 http://spring.io/guides/gs/messaging-rabbitmq/并行处理行:
- 控制器接收包含大量数据的 CSV 文件
- 将数据分割成更小的块并发送到临时消息队列
- 多个工作节点接收消息并处理它们
- 监控临时队列的大小并相应更新用户(完成百分比)
简而言之,您对自己领域的了解最终将引导您找到适合您业务的最佳解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)