devpav
@devpav
Full-Stack разработчик.

Как сделать оптимизацию в добалении данных через (spring, hibernate, postgres)?

Доброе время суток, друг.
Необходимо добавлять очень большое количество данных и исключать повторение по полю. unique понятно.

Set<T> records= new HashSet<>();
for (T item: data) {
      final Boolean exists = repository.existsByTitle(item.getTitle());
      if (!exists) {
          records.add(item);
      }
}        
repository.saveAll(webResourceEntities);
repository.flush();


Как оптимизировать данные запросы. Какие техники добавления есть. Кто подскажет тот супер крутой. Записей миллионы. И каждую секунду добавляются по десяткам тысяч. Как работать?
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
insert on conflict do nothing

Возможно view с instead of statement trigger'ом, в view писать через copy, триггер будет делать insert on conflict
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
Предложенный Melkij вариант намного эффективнее, но Hibernate такого не умеет, и если хочется решения на уровне ORM, то выбрать из базы множество заголовков, получить разность с множеством вставляемых записей, полученное сохранить в БД, предварительно подобрав эффективное значение параметра hibernate.jdbc.batch_size. Естественно, на title должен быть индекс.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы