我目前正在使用Spring和Hibernate每31秒(Spring定时服务)检索数据并保存到mysql表(Hibernate)的程序。使用休眠检查数据库重复的优化方法
我目前有一个HashMap检查检索的数据。如果检索到的数据位于HashMap中,请使用该实例。如果数据不在HashMap中,则将其添加到HashMap并通过Hibernate保存该新条目。
我只关心这个设计,因为这是一个每31秒运行一次的Spring计划服务,HashMap对象也会每31秒重新创建一次在这种情况下,以前添加到HashMap的任何条目都不会在那里了,重复的条目将被保存到表格中。
我已经想出了两种方法来解决这一问题:
查询的表上的所有当前条目,并用它们来填充HashMap的,HashMap的是用来检查新数据之前检索。这样,即使在每31秒重新创建一次HashMap,仍然会拥有所有唯一条目。
查询刚抵达表中的所有条目的新数据。这样,不需要HashMap。每当新数据进入时,只需通过查询对照所有条目进行检查。
随着表上条目数越来越大,两种方式中的哪一种更优化?请随时提出任何其他方法来做到这一点。谢谢。
我的代码:
@Scheduled(fixedRate = 31000)
public void saveCompanyData() {
// Retrieve data from online into Data
...
...
// Hibernate
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Company.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();
// Create HashMap
HashMap<String, Company> companyMap = new HashMap<>();
// Save to table if key not mapped
String companyKey = Data.getCompanyName();
Company company;
if(companyMap.containsKey(companyKey)){
company = companyMap.get(companyKey);
} else {
company = new company(Data.getCompanyName());
companyMap.put(companyKey, company);
session.save(company);
}
// Commit
session.getTransaction().commit();
第二个听起来很公平。 – Antoniossss