我使用java 8并行流将数据插入到DB中。 以下是代码
customers.parallelStream().forEach(t->{
UserTransaction userTransaction = new UserTransactionImp();
try {
userTransaction.begin();
userTransaction.setTransactionTimeout(300);
//CODE to write data to DB for each customer in a global transaction using atomikos and hibernate
userTransaction.commit();
}catch(Exception e){
userTransaction.rollback();
}
});
完成任务需要2个多小时。我在两个不同的实例中运行相同的测试(两个java主要方法)。完成所需的时间减少到1小时。还有其他方法可以扩展在一个java intance.I我使用Atomikos,Hibernate持久化。我已配置批处理,插入订单和更新订单.Evrything正确批处理,工作正常。 但我观察到CPU在此期间的利用率不超过30%。有没有办法利用更多的处理器并扩展它。
答案 0 :(得分:1)
parallelStream()
基本上会给你一个"默认"实现。我听到一个人说过:"每当你使用这个结构时,测量它的效果"。
换句话说:当您对默认实现不满意时,可能需要查看自己的实现。不专注于单一操作,而是整个图片"。
示例:如果你"徽章" 5,10,50和#34;用户"每拍摄一次" - 意思是:减少交易次数,但允许更多内容进入每个交易。
是的,这是一个非常通用的答案 - 但这是一个非常通用的问题。我们绝对没有任何见解你的代码在那里做什么 - 所以没有人可以告诉你什么是#34;完美"减少整体运行时间的方法。
除此之外:您希望配置文件整个设置。也许你的问题不是" java"部分 - 但你的数据库。没有足够的内存,太多的工作量......或网络,或者,或者。换句话说:第一个专注于了解您的性能瓶颈真正存在的位置。
(好的阅读"表现"和瓶颈:旧经典"发布它" Michael Nygard)