Spring + Hibernate загрузка большого количества записей - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь найти лучший / оптимальный способ загрузки больших объемов данных из базы данных MySQL в сервис Spring / Hibernate.

Я извлекаю около 100 тыс. Записей из стороннего API (обычно порциями)между 300-1000) Затем мне нужно получить переводы для каждой записи из базы данных, поскольку существует 30 языков, что означает, что в записи будет 30 строк, поэтому 1000 записей из API - это 30000 строк из базы данных.

Записи из API поступают в виде POJO (очень маленького размера), говорят, что я получаю 1000 записей, я делю список на несколько списков по 100 записей, а затем собираю идентификаторы каждой записи и выбираю для этого все переводы из базы данных.запись.Мне нужно только два значения из таблицы, которые я затем добавляю в свои POJO, а затем я перемещаю POJO к следующему сервису.

В основном это:

interface i18nRepository extends CrudRepository<Translation, Long> {}

List<APIRecord> records = api.findRecords(...);
List<List<APIRecord>> partitioned = Lists.partition(records, 100); // Guava 

for(List<APIRecord> chunk : partitioned) {
  List<Long> ids = new ArrayList();

  for(APIRecord record : chunk) {
    ids.add(record.getId());
  }

  List<Translation> translations = i18Repository.findAllByRecordIdIn(ids);

  for(APIRecord record : chunk) {
    for(Translation translation : translations) {
      if (translation.getRedordId() == record.getId()) {
        record.addTranslation(translation);
      }
    }
  }
}

Что касается свойств весенней загрузки / гибернации, у меня установлены только настройки по умолчанию.Я хотел бы сделать это максимально эффективным, быстрым и доступным для памяти.У меня была идея использовать API нижнего уровня вместо Hibernate для обхода сопоставления объектов.

1 Ответ

0 голосов
/ 31 марта 2019

На мой взгляд, вы должны обходить JPA / Hibernate для массовых операций.В JPA нет способа сделать массовые операции эффективными.Рассмотрите возможность использования Spring JpaTemplate и собственного SQL.

...