Java 提高过程的执行时间
我需要您的帮助,以便及时改进Java中的以下过程。 程序步骤如下:Java 提高过程的执行时间,java,Java,我需要您的帮助,以便及时改进Java中的以下过程。 程序步骤如下: 我有一个超过一百万条记录的表(主键是自动递增) 我从此表中选择最小和最大主键值 我根据最小值和最大值创建了一些初始“fromRange”和“toRange”变量 创建循环后,每次处理20000条记录: 我从“fromRange”到“toRange”之间提取记录 对于每个记录返回,我都会写入(每次追加)一个XML对象(使用JAXB) 在我将在磁盘上的文件上创建的XML对象写入之后 增加“fromRange”和“toRange”以
- 我有一个超过一百万条记录的表(主键是自动递增)
- 我从此表中选择最小和最大主键值
- 我根据最小值和最大值创建了一些初始“fromRange”和“toRange”变量
- 创建循环后,每次处理20000条记录: 我从“fromRange”到“toRange”之间提取记录 对于每个记录返回,我都会写入(每次追加)一个XML对象(使用JAXB) 在我将在磁盘上的文件上创建的XML对象写入之后 增加“fromRange”和“toRange”以继续下一个记录
- 我有一个超过一百万条记录的表(主键是自动递增)
- 我从此表中选择最小和最大主键值
- 我根据最小值和最大值创建了一些初始“fromRange”和“toRange”变量
- 创建循环后,每次处理20000条记录
一般来说,您需要进行一些跟踪,以查看哪一步占用了大部分时间。并行完成所有工作肯定会更好。保持主线程从数据库中读取,但不读取所有记录,即按myId从MyTable中选择* 然后通过调用工厂中的一个方法(如
newCachedThreadPool
)来创建ExecutorService
然后在主线程中,继续循环记录,并为每个记录发送executor.submit(new Runnable(){doYourWork(record);},null)代码>。注意记录必须是副本,因为它将从不同的线程访问
在结束时调用executor.shutdown()
和executor.waittermination()
。您可以通过调用submit
方法返回的Future
s上的get()
来检查潜在错误
<强>其他方式< /强>,如果您需要更高级的解决方案,您可以考虑使用<强> Apache CAMEL < /St>,具体地说。
< P>您的问题不完整:没有总计数,没有数据库类型,没有记录大小的信息。但总的来说:
不要使用max/min-只需选择所有记录并对其进行迭代即可
注意在JDBC中获取大小参数。这是你应该设置20000的地方
在流模式下使用JAXB(请参阅)
不要忘记Outputstream缓冲
你有没有分析过它,看看是什么花了这么长时间?没有。我不知道这件事。我会检查的对象可能太大,无法放入内存。