【发布时间】:2017-12-09 17:18:40
【问题描述】:
我正在使用 Java Spring 开发一个 Web 应用程序,我希望用户能够从前端上传 CSV 文件,然后查看导入过程的实时进度,导入后他应该能够从导入的数据中搜索单个条目。
导入过程包括实际上传文件(通过 REST API POST 请求发送),然后读取文件并将其内容保存到数据库,以便用户能够从这些数据中进行搜索。
将数据保存到数据库中最快的方法是什么? 仅循环这些行并创建一个新的类对象并通过 JPARepository 为每一行保存它会花费太多时间。 10000 行大约需要 90 秒。我需要让它更快。我需要在合理的时间内添加 200k 行。
旁注:
我看到了使用 Reactor 的异步方法。这应该更快,因为它使用多个线程并且保存行的顺序基本上并不重要(尽管数据在 CSV 中有 ID)。
然后我也看到了 Spring Batch 作业,但是所有示例都使用 SQL。我正在使用存储库,所以我不确定我是否可以使用它或者它是否是最好的方法。
【问题讨论】:
-
你有什么问题?标题要求实时进度,问题还要求在“合理”时间内以“最快”的方式保存到数据库。以及涉及 Spring Batch。这已经是3个问题了。听起来您对设计不清楚,这就是您的问题过于宽泛的原因。
-
对不起,这是我的错。我开始描述我的整个情况,然后决定将我所有的问题分解为不同的问题。我的错误是我用错误的标题发布它。我会立即更改它。但我认为 Spring Batch 将是更快处理更多数据的一种选择,不是吗?
标签: java spring spring-mvc spring-boot spring-data-jpa