Выбор партии с использованием Spring Data JPA - PullRequest
0 голосов
/ 17 сентября 2018

Я запрашиваю репозиторий Spring Data JPA, имеющий около 100К записей, и после извлечения записей я перебираю каждую из них.

Ниже приведен код:

    List<RegistrationHistograms> histogramList = 
   registrationHistoRepository.findStaticRegistrationHistograms();
    List<RegistrationHistograms> modifiedList = new ArrayList();
    histogramList.forEach(histogram -> {
        int totalOrgIdRegistrations = 
      registrationRepository.findTotalRegistrationByOrganization(histogram
                .getOrganizationId());
        List<Object[]> topDomainList = 
       userRepository.countTopDomain(histogram.getOrganizationId());
        if (CollectionUtils.isNotEmpty(topDomainList) || 
          totalOrgIdRegistrations != 0) {
            Object[] topValueArray = topDomainList.get(0);
            String topDomain = (String) topValueArray[0];
            BigInteger topDomainCount = (BigInteger) topValueArray[1];
            int totalDomainRegistration = 

          registrationRepository.countRegistrationsByEmailDomain(topDomain,
                    histogram.getOrganizationId());
            int topDomainPct = topDomainCount.intValue() * 100 / 
            totalOrgIdRegistrations;
            histogram.setOrganizationId(histogram.getOrganizationId());
            histogram.setDomain(topDomain);
            histogram.setDomainPercentage(topDomainPct);
            histogram.setTotalRegistrations(totalOrgIdRegistrations);
            histogram.setTotalDomainRegistration(totalDomainRegistration);
            modifiedList.add(histogram);
        }
    });
    batchRepository.bulkSaveOrUpdate(modifiedList);

Используемая сущность:

@Entity
@Table(name = "srs_registration_histogram")
@Getter
@Setter
public class RegistrationHistograms extends BaseEntity {    
@Id
@Column(name = "organization_id")
private String organizationId;

@Column(name = "total_registration")
private long totalRegistrations;

@Column(name = "domain_percentage")
private int domainPercentage;

@Column(name = "total_domain_registration")
private long totalDomainRegistration;

@Column(name = "domain")
private String domain;

@Column(name = "is_static_data")
private String isStaticData;

При таком подходе могут возникнуть проблемы с производительностью, учитывая огромный объем данных.

Есть ли способ пакетирования следующего запроса:

 List<RegistrationHistograms> histogramList = 
 registrationHistoRepository.findStaticRegistrationHistograms();

Или вместо того, чтобы делать один за другим, можем ли мы собрать все организационные идентификаторы из histogramList и один раз запросить базу данных registrationRepository для повышения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...