【发布时间】:2019-01-28 09:48:55
【问题描述】:
我创建了一个应用程序,并尝试将 100 条记录插入到我的数据库 (MariaDB) 中,大约需要 20 秒。如何加快这个操作?
我正在使用休眠,我的期望是在最多 2 分钟内插入大约 10k。
private Person getPerson(ExternalPerson externalPerson) {
Person person = new Person();
person.setName(externalPerson.getFirstName());
person.setLastName(externalPerson.getLastName());
person.setAdditionalInfo(externalPerson.getIdentifier());
person.setCountries(Arrays.asList(storeCountryIfNotExist(externalPerson.getCountry())));
person.setGender(storeGenderIfNotExist(externalPerson.getGender()));
personRepository.saveAndFlush(person);
return person;
}
private Gender storeGenderIfNotExist(String gender) {
Gender genderTemp = genderRepository.findByName(gender);
if (genderTemp != null) {
return genderRepository.findByName(gender);
}
Gender newGender = new Gender();
newGender.setName(gender);
return genderRepository.saveAndFlush(newGender);
}
private Country storeCountryIfNotExist(String country) {
Country countrytemp = countryRepository.findByName(country);
if (countrytemp != null) {
return countrytemp;
}
Country newCountry = new Country();
newCountry.setName(country);
return countryRepository.saveAndFlush(newCountry);
}
【问题讨论】:
-
不确定到底发生了什么...但是如果您要执行批量操作,我想您最终需要保存并刷新。我也不太确定写入一个表是否需要从另一个表读取(在你的情况下,就是......
-
避免刷新,不要加载任何东西;让数据库处理重复项。
-
什么是
findByName,为什么要第二次调用它,什么时候有结果值? -
向我们展示生成的 SQL 语句。
标签: java mysql hibernate spring-boot mariadb