gpt4 book ai didi

java - 使用并行流提高数据库密集型任务的 CPU 利用率

转载 作者:行者123 更新时间:2023-12-02 12:34:34 30 4
gpt4 key购买 nike

我正在使用java 8并行流将数据插入数据库。以下是代码

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 main方法)中运行相同的测试。完成所需的时间减少到1小时。有没有其他方法可以扩展在一个java实例中。我使用Atomikos,Hibernate进行持久化。我配置了批处理,插入排序和更新排序。每个东西都正确批处理并且工作正常。但我观察到在此期间 CPU 利用率不超过 30%。有没有办法利用更多处理器并对其进行扩展。

最佳答案

parallelStream() 基本上为您提供了“默认”实现。我听到一个人曾经说过:“每当你使用这个结构时,衡量它的效果”。

换句话说:当您对默认实现不满意时,您可能需要研究您自己的实现。不关注单一操作,而是关注“整体”。

示例:如果您将每个“镜头”的 5、10、50 个“用户”“标记”在一起会怎样 - 意思是:您减少了交易数量,但允许每个交易中包含更多内容。

是的,这是一个非常通用的答案 - 但这是一个非常通用的问题。我们完全不知道你的代码在那里做什么 - 所以这里没有人能告诉什么是减少整体运行时间的“完美”方法。

除此之外:您还想分析您的整个设置。也许你的问题不是“java”部分 - 而是你的数据库。内存不够,工作量太大……或者网络,或者,或者,或者。换句话说:首先专注于了解性能瓶颈真正存在的位置。

(关于“性能”和瓶颈的好读物:Michael Nygard 的古老经典“Release it”)

关于java - 使用并行流提高数据库密集型任务的 CPU 利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182470/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com