Изменить, как Spring JPA делает пагинацию - PullRequest
2 голосов
/ 12 февраля 2020

Я хочу знать, возможно ли изменить способ, которым Spring выполняет нумерацию страниц, потому что по умолчанию PagingAndSortingRepository использует LIMIT с OFFSET, но на больших наборах данных это становится слишком медленным.

у данных, которые у меня есть, есть индексированный столбец, поэтому нет проблем записать лог c как WHERE timestamp > x AND timestamp < y LIMIT 1000; и отслеживать самую высокую полученную метку времени. Мне просто интересно, встроено ли это в Spring JPA, поэтому я мог бы сказать, что нужно упорядочить по столбцу и использовать это вместо OFFSET.

https://electrictoolbox.com/mysql-limit-slow-large-offset/

1 Ответ

1 голос
/ 13 февраля 2020

Для этого нет решения для магов c.

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

Я считаю, что использование подкачки для навигации по огромным наборам данных - плохой подход. Я бы посоветовал вам использовать относительно небольшое количество страниц, например 20 страниц. Если вы хотите перемещаться по большему объему данных, подумайте о правильном разделении / структурировании данных в ваших запросах. Например, если ваши данные могут быть отфильтрованы по времени, рассмотрите возможность использования в вашем запросе надлежащих фильтров (и соответствующих элементов GUI, если они запускаются из GUI).

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

В качестве альтернативы, независимо от того, какой фильтр / критерии поиска определены пользователем, в первом запросе проверьте количество страниц. Если он превышает какой-либо лимит (например, 20 страниц), выведите исключение и попросите пользователя уточнить критерии фильтрации / поиска. Продолжайте до тех пор, пока количество страниц не превысит желаемый вами лимит. Пейджинг с таким фильтром может быть намного быстрее.

...