我目前正在使用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