Performance Hibernate性能刷新v提交

Performance Hibernate性能刷新v提交,performance,hibernate,commit,flush,Performance,Hibernate,Commit,Flush,我正在创建一个hibernate组件,以便与大量传入数据进行交互,以持久化、保存(创建)和更新数据,数据量为百万行 我知道flush v commit的主要区别,例如flush将“脏”数据同步到可持久化的基础数据中,flush允许您在不实际提交的情况下与基础持久化数据同步,以便在需要时回滚事务。Commit本质上是将所有持久数据提交到数据库 我正在创建一个hibernate组件,以便与大量传入数据进行交互,以持久化、保存(创建)和更新数据,数据量为百万行 我知道flush v commit的主要

我正在创建一个hibernate组件,以便与大量传入数据进行交互,以持久化、保存(创建)和更新数据,数据量为百万行

我知道flush v commit的主要区别,例如flush将“脏”数据同步到可持久化的基础数据中,flush允许您在不实际提交的情况下与基础持久化数据同步,以便在需要时回滚事务。Commit本质上是将所有持久数据提交到数据库

我正在创建一个hibernate组件,以便与大量传入数据进行交互,以持久化、保存(创建)和更新数据,数据量为百万行

我知道flush v commit的主要区别,例如flush将“脏”数据同步到可持久化的基础数据中,flush允许您在不实际提交的情况下与基础持久化数据同步,以便在需要时回滚事务。Commit本质上是将所有持久数据提交到数据库

批量插入的合理尺寸是多少?50是合理性能的最大值,例如:

for (i < 1000000)
    if(i % 50 ) {
        session.flush()
    }
用于(i<1000000)
如果(i%50){
session.flush()
}

我收集的50应该与
hibernate.jdbc.batch\u大小50中的值匹配,这取决于您的数据。批处理大小是hibernate将在其会话中保留的项目数量与往返数据库进行刷新所涉及的延迟之间的平衡。如果批处理大小太小,则最终会多次往返到数据库。如果批处理大小过大,则最终会在hibernate会话中保留许多对象—如果对象太胖,这可能是一个问题

我认为50是一个很低的数字:
1M/50=20000
往返。我想让你从一个更大的数字开始,衡量绩效。顺便说一句,这只适用于批处理操作:
hibernate.jdbc.batch\u size
50用于常规应用程序事务

PS不要忘记在刷新后清除hibernate会话,否则hibernate甚至在刷新后也会将持久对象保存在内存中