gpt4 book ai didi

Spring,Hibernate - 批量处理大量数据,性能好

转载 作者:行者123 更新时间:2023-12-04 06:02:18 26 4
gpt4 key购买 nike

想象一下,您在数据库中大约有大量数据。 〜100Mb。我们需要以某种方式处理所有数据(更新或导出到其他地方)。如何以良好的性能执行此任务?如何设置交易传播?

示例 1#(性能不佳):

@Singleton
public ServiceBean {

procesAllData(){

List<Entity> entityList = dao.findAll();

for(...){
process(entity);
}

}

private void process(Entity ent){
//data processing
//saves data back (UPDATE operation) or exports to somewhere else (just READs from DB)
}

}

这里有什么可以改进的?

在我看来 :
  • 我会设置 hibernate 批处理大小(请参阅 hibernate 文档以进行批处理)。
  • 我会将 ServiceBean 分成两个具有不同事务设置的 Spring bean。方法 processAllData() 应该用完事务,因为它处理大量数据并且潜在的回滚不会“快速”(我猜)。方法流程(实体实体)将在事务中运行 - 在一个数据实体的情况下回滚没什么大不了的。

  • 你同意 ?有小费吗 ?

    最佳答案

    这里有2个基本策略:

  • JDBC 批处理:设置 JDBC 批处理大小,通常介于 20 和 50 ( hibernate.jdbc.batch_size ) 之间。如果您正在混合和匹配对象 C/U/D 操作,请确保您已将 Hibernate 配置为订购插入和更新,否则它不会批处理( hibernate.order_insertshibernate.order_updates )。在进行批处理时,必须确保您 clear()您的 Session这样您就不会在大型事务中遇到内存问题。
  • 连接 SQL 语句:实现 Hibernate Work接口(interface)并使用您的实现类(或匿名内部类)针对 JDBC 连接运行 native SQL。通过分号连接手工编码的 SQL(适用于大多数数据库),然后通过 doWork 处理该 SQL .此策略允许您使用 Hibernate 事务协调器,同时能够利用 native SQL 的全部功能。

  • 您通常会发现,无论您获得 OO 代码的速度有多快,使用诸如连接 SQL 语句之类的 DB 技巧都会更快。

    关于Spring,Hibernate - 批量处理大量数据,性能好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8799969/

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