UNIX下使用并行生成大量PDF文件
Using parallelism to generate a large number of PDF files in UNIX
所以最终我需要在 UNIX 服务器上的磁盘上写入大量 PDF (40,000),我正在尝试找出一种有效地执行此操作的方法(faster/consuming 更少的内存)。
我一直在使用 JasperReports 创建一个模板,该模板接收报告所需的所有信息作为参数(意味着报告不会访问数据库)。
然后我有一个简单的 Java 应用程序,它查询数据库并带来数据集,并为每条记录填充 .jasper 并将 PDF 写入磁盘。
现在这适用于几百条记录,但我认为它不适用于数量扩展到 40.000 条记录并且过程输出将是相同数量的 PDF 文件的生产环境。做一些测试我估计这个过程至少需要 3 个小时,我也开始担心内存消耗。
所以我想知道是否有有效的方法来做到这一点:
- 我应该为此进程使用 parallelism/multiple 个线程吗?
- 任何人都可以为我指出 pattern/example 从事此类工作的知名人士吗?
感谢您的宝贵时间
不幸的是,您不能使用更少的内存并使用多线程来呈现不同的 PDF,每个线程都会分配内存来处理其 PDF,内存使用量将与线程数成线性关系。
如果您可以使用多个线程处理同一个 PDF(相同数据),情况就完全不同了,但我认为这并不容易,因为线程需要频繁同步,使多线程变得毫无意义。
如果不需要共享任何信息,实现多线程就很简单了,你可以实现Runnable interface, create new thread passing the implementation of Runnable, and wait them to end with Thread.join()。
如果我是你,我会使用 jasper virtualizer 当时只加载一部分数据集,这可能允许你使用多个线程。
所以最终我需要在 UNIX 服务器上的磁盘上写入大量 PDF (40,000),我正在尝试找出一种有效地执行此操作的方法(faster/consuming 更少的内存)。
我一直在使用 JasperReports 创建一个模板,该模板接收报告所需的所有信息作为参数(意味着报告不会访问数据库)。
然后我有一个简单的 Java 应用程序,它查询数据库并带来数据集,并为每条记录填充 .jasper 并将 PDF 写入磁盘。
现在这适用于几百条记录,但我认为它不适用于数量扩展到 40.000 条记录并且过程输出将是相同数量的 PDF 文件的生产环境。做一些测试我估计这个过程至少需要 3 个小时,我也开始担心内存消耗。
所以我想知道是否有有效的方法来做到这一点:
- 我应该为此进程使用 parallelism/multiple 个线程吗?
- 任何人都可以为我指出 pattern/example 从事此类工作的知名人士吗?
感谢您的宝贵时间
不幸的是,您不能使用更少的内存并使用多线程来呈现不同的 PDF,每个线程都会分配内存来处理其 PDF,内存使用量将与线程数成线性关系。 如果您可以使用多个线程处理同一个 PDF(相同数据),情况就完全不同了,但我认为这并不容易,因为线程需要频繁同步,使多线程变得毫无意义。
如果不需要共享任何信息,实现多线程就很简单了,你可以实现Runnable interface, create new thread passing the implementation of Runnable, and wait them to end with Thread.join()。
如果我是你,我会使用 jasper virtualizer 当时只加载一部分数据集,这可能允许你使用多个线程。