处理大量数据

时间:2013-05-07 10:29:56

标签: java spring-batch

问题就是这样。

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

  1. 读取一个Vo /列表中的所有加密值
  2. 重新格式化添加标题/预告片。
  3. 将此记录一次性转储到数据库中,并使用标题和预告片分隔定义coloums
  4. 我不想在进程之间使用任何文件 存储2,00,000条记录列表或其他内容的最佳方法是什么 如何在db中一次性转储此记录。最好是在块中潜入并使用单独的线程来处理它。 请为此建议一些不那么耗时的解决方案。

    我正在使用弹簧批次,这个过程将是一个工作。

2 个答案:

答案 0 :(得分:1)

进行Spring批处理以执行此类操作。您将需要一个块tasklet。这种类型的tasklet使用阅读器,项目处理器和编写器。此外,这种类型的tasklet使用流式传输,因此您永远不会在内存中同时拥有所有项目。

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

写作时,您可以使用JdbcBatchItemWriter

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

答案 1 :(得分:0)

有一些通用的技巧可以让批量插入变得更快:

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

  • 在插入主键之前,将记录按升序排序。

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

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

我不知道这些技巧有多好转化为弹簧批...但如果它们没有,你可以考虑绕过弹簧批并直接进入数据库。