Реализация pagination на java?

Всем привет!
Есть взаимодействие с oracle через функцию, которая выдаёт большую пачку инфы в диапазоне дат -> нужна паджинизация.
Как отделать малой кровью добавив паджинизацию для такой системы?
Какие есть варианты:
1) Новая функция на oracel, которая принимает кол-во записей и смещение, и без всякого сохранения состояния отдаёт результат, + число равное общему кол-во записей.
2) Что-то вроде redisa или elasticsearch, где на промежуточной базе, мы будем хранить какой-то ид изначальной выборки, и ид записией из oracle, и по второму запросу пользователя например на 2 страницу будем смотреть какие-
это ид и запрашивать у oracle только инфу по ид, без диапазона дат(думаю через индексы будет достаточно быстро)

В REST сервисах у нас нет состоянии и сессий, поэтому не понятно как сделать лучше и главное быстрее.
  • Вопрос задан
  • 1507 просмотров
Пригласить эксперта
Ответы на вопрос 1
zolt85
@zolt85
Программист
Не знаю как лучше, расскажу как сделано у нас. На клиенте рисуется грид, который запрашивает данные с сервера с заголовком Range: 0-19 (это типа первая страница). Сервер сей заголовок понимает и оборачивает запрос к БД в такой вот вид
select rownum rn, main.*, count(1) over() total from (/*тут основной запрос*/) main where rn >= 0 and rn <= 19;

Вот собссно и вся магия. Т.е. если Вы научите клиент отдавать на сервер диапазон запрашиваемых записей, таким вот образом их можно отдавать. count(1) over() total выберет Вам кол-во записей в выборке всего в отдельную колонку total.
Никаких состояний, редисов и прочих эластиксёрчей.
Ответ написан
Ваш ответ на вопрос

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

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