gpt4 book ai didi

java - 每个事务后 Hibernate 提交会导致速度变慢

转载 作者:行者123 更新时间:2023-12-02 00:21:53 24 4
gpt4 key购买 nike

嗨,我有一个应用程序,其中当请求带有一个数组时,我必须从表中选择数据,如果找不到,则生成新值并插入到表中,然后再次循环统计检查下一个值等等。对于新请求,此操作将执行大约 50000 次。

我正在使用

  public void save(Object obj,Session session)  {       

Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(obj);
//session.saveOrUpdate(obj);
//session.flush();

session.clear();
tx.commit();
}
catch (HibernateException e) {
e.printStackTrace();
logger.error(e.getMessage(), e);

if(tx!=null){
tx.rollback();
}
}
}

提交方法,并为每个生成的新值调用它。就像每个请求它被调用 50000 次一样。我必须为每个值提交事务,因为我不希望在表中生成重复的值,因此如果新请求带有相同的数据并且前一个请求正在运行,则应从表中获取该值。所以我想我必须提交每个事务..但是如果我使用经典的 JDBC 而不是 hibernate ,这会变得相当快,所以呢?我做错了什么吗,与它相比, hibernate 速度很慢吗?因为我认为大部分时间都消耗在一次又一次开始和提交事务上。

最佳答案

您正在做的是批处理

一些想法

  • 使事务规模更大(跨度超过 1 个插入)
  • 使用乐观锁定:如果发生冲突则重试
  • 配置 JDBC 批量大小

为了避免重复插入,请添加一个额外的列来保存自然键并具有唯一约束。

关于java - 每个事务后 Hibernate 提交会导致速度变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794788/

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