我是Spring批处理框架的新手。
我目前正在用读者和作家写一批。
读取器从Db读取并且写入器写入平面文件。记录数量为100万。写入文件需要花费大量时间,我想改进它。
在编写器中实现多线程的最佳方法是什么,以便write()
方法并行运行?
注意:在@BeforeStep
和@AfterStep
回调中,我正在编写文件的页眉和页脚。 write()
方法将记录写入文件。
修改
我发现写入文件并不花费太多时间,但我们的内部方法之一进行某种解密需要大约500毫秒的1条记录。我们有100万条这样的记录。
我可以通过在多个线程中进行解密来提高性能吗?我无法从这里了解如何改进。
答案 0 :(得分:0)
这不是Spring特有的问题。通常人们做的是实现某种流式传输。因为你没有阅读整个查询然后写一切,而是一个接一个地读取小位,然后将每个位传递给写入器,以便它在读完之前就已经开始写了。这样更快,并且您也可以不使用尽可能多的内存。例如,如果您有10GB的数据可以读写,您可以将其拆分为10MB查询,而不是读取整个10GB。你应该读一下溪流。然而,对同一文件的并行写入将不会带来任何好处或性能降低。你也应该小心不要启动太多的线程,再次这会降低性能,除非你的线程非常便宜,我不建议真正超过2,因为有些人已经提到大多数应用程序的性能是我/ O绑定,并没有解决这个问题,只能通过缓冲/流/缓存来阻止线程,或者你可以在你的应用程序中做任何其他事情来减轻影响。