Повышение производительности с помощью большого собственного запроса SQL / JPA / Hibernate - PullRequest
0 голосов
/ 30 октября 2018

Мое приложение в настоящее время используется несколькими процессами Spring Batch для выполнения нескольких (собственных) запросов к базе данных в течение 2 лет, а затем перебирает эти данные для сравнения с другим набором данных для обнаружения закономерностей между двумя , Двухлетние запросы (обычно 3 из них на один запуск) занимают примерно минуту, чтобы получить несколько миллионов результатов.

Здесь важно отметить, что данные не изменяются, за исключением того факта, что каждый день даты начала и окончания данных увеличиваются на единицу. Это означает, что если был установлен механизм кэширования, каждый В день запроса потребуется обновить кэш только самыми последними данными и удалить данные самых старых дней, выходящие за пределы этого двухлетнего диапазона. И, конечно же, первоначальный запрос (и запрос после любого удаления кэша) должен был бы выполнить все заново. В настоящее время этот запрос выполняется в несколько раз в день, каждый раз получая одинаковые результаты.

Как я могу улучшить свои показатели здесь? Похоже, очевидным решением является использование кеша в некотором роде. Я изучил некоторые механизмы, такие как Redis. У меня нет большого опыта в этой ситуации, и я был бы признателен за любую помощь в том, как начать работу.

Соответствующий запрос JPQL:

SELECT a.Account as externalAccount, 
       a.Serial as serialNum, 
       b.Account as toAccount
FROM ITEM_VIEW a, ITEM_VIEW b 
WHERE b.TxnNum = a.TxnNum 
    AND b.[Date] = a.[Date] 
    AND a.[Date] >= :parmEndDate 
    AND a.[Date] <= :parmBeginDate 
    AND a.DBCR = 'D' 
    AND (a.Amount/100) >= :parmAmount 
    AND b.DBCR = 'C'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...