0

问题是这样的。

形成一个应用程序,我得到大约 2,00,000 个加密值任务

  1. 读取一个 Vo /list 中的所有加密值
  2. 重新格式化它添加标题/拖车。
  3. 将这些记录一次性转储到数据库,标题和预告片在单独的定义列中

我不想在进程之间使用任何文件 存储 2,00,000 条记录列表的最佳方式是什么,或者如何在 db 中一次性转储此记录。最好分块潜水并使用单独的线程来处理它。请为此建议一些耗时较少的解决方案。

我为此使用弹簧批处理,这个过程将是一项工作。

4

2 回答 2

1

Spring Batch 就是为了做这种类型的操作。您将需要一个块 tasklet。这种类型的 tasklet 使用读取器、项目处理器和写入器。此外,这种类型的 tasklet 使用流式传输,因此您永远不会一次将所有项目都放在内存中。

我不确定您的数据的传入格式,但几乎所有用例都有现有的阅读器。如果你找不到你需要的类型,你可以创建自己的。然后,您将需要实施ItemProcessor以处理您需要做的任何修改。

对于写作,您可以使用JdbcBatchItemWriter.

至于这些页眉/页脚,我需要更多详细信息。如果它们是所有记录的聚合,则需要事先处理它们。您可以将最终结果放入 ExecutionContext。

于 2013-05-07T18:43:15.387 回答
0

有几个通用技巧可以使批量插入更快:

  • 考虑使用数据库的本机批量插入。

  • 在插入记录之前,按主键上的升序对记录进行排序。

  • 如果要插入空表,请先删除二级索引,然后重新创建它们。

  • 不要在一个数据库事务中完成所有操作。

我不知道这些技巧如何转化为 spring-batch ......但如果他们不这样做,您可以考虑绕过 spring-batch 并直接进入数据库。

于 2013-05-07T11:02:30.350 回答