使用hibernate批处理进行性能调整
我正在尝试检索超过300000条记录,并使用Hibernate批处理更新数据库中的这些记录。大约需要30分钟。我怎样才能减少时间 以下是我的Hibernate配置:使用hibernate批处理进行性能调整,hibernate,batch-processing,Hibernate,Batch Processing,我正在尝试检索超过300000条记录,并使用Hibernate批处理更新数据库中的这些记录。大约需要30分钟。我怎样才能减少时间 以下是我的Hibernate配置: <property nane="connection.provider_class">org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider</property> <propert
<property nane="connection.provider_class">org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider</property>
<property name="hibernate.connection.encryptor_registered_name">strongHibernateStringEncryptor</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.pool.OracleDataSource</property>
<property name="hibernate.connection.url"></property>
<property name="hibernate.connection.username"></property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.default_schema"></property>
<property name="show_sql">true</property>
<property name="hibernate.jdbc.batch_size">50</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
<property name="hibernate.jdbc.batch_versioned_data">true</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
我需要从模拟服务器获取FTD表数据,并将其保存在UAT服务器中。什么是lacs记录?如果没有一些示例代码,很难判断出哪里出了问题。欢迎使用Stackoverflow。如果要添加相关信息,请编辑您的问题。请解释lacs记录并添加代码,而不是引入新的首字母缩略词。我知道UAT,但什么是FTD表?现在我知道LAC是什么,我想说它可能比每秒166次插入(每次插入6毫秒)更糟糕。如果您真的需要速度,您应该考虑使用普通SQL,这将真正提高性能。请参阅我的评论。如果您真的想要性能,请不要使用hibernate。。。这将是我使用该图书馆10年后的建议。直接JDBC要快得多
for (String srcTxn : bulkTxnSet) {
Criteria crit = sesMock.createCriteria(FTD.class);
crit.add(Restrictions.eq("txRefNo", srcTxn ));
crit.add(Restrictions.eq("processId", "001"));
// Here is updated code
ScrollableResults items = crit.scroll();
while ( items.next() ) {
FTD e = (FTD)items.get(0);
sesUAT.save(e);
if ( ++count % 50 == 0 ) {
sesUAT.flush();
sesUAT.clear();
}
}
}