powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиент-Сервер и большая выборка
9 сообщений из 9, страница 1 из 1
Клиент-Сервер и большая выборка
    #33793073
bolgare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все происходит через Web Servlet

Делается большая выборка из базы, при этом как ее делать вопрос десятый,
и выкидывается по-странично на клиента.

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

Может у кого есть идеи как это реализовать по-другому???

Хранить данные в сессии не реально - объем ~ 5000 записей и не маленьких и клиент будет всяко не один и даже не десять.

Оптимизить запрос - не выход, быстрее он уже пахать не будет :).

Темповые таблицы тоже не интересно.
...
Рейтинг: 0 / 0
Клиент-Сервер и большая выборка
    #33793111
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle, судя по "реф курсору"? Почему бы не возвращать только требуемые записи,
вырезав их в запросе, т.е. по существу для каждой страницы заново получить
refcursor?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Клиент-Сервер и большая выборка
    #33793141
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bolgareСейчас реализовано так, что при переходе на др. страницу идет запрос к базе (читается до нужного места в реф курсоре), проблема в том, что чем больше номер страницы - тем дольше читаеться, а запрос сложный и делаеться енто очень медленно.
.
Ага, ты еще время замеряй после того как сервер перестартует. Во первых, ROW ... TO ... (LIMIT in MySQl FIRDT SKIP in Firebird) никто не отменял.
Во вторых не делай так чтобы при перезагрузки страници у тебя формировался офигенный запрос который долго работает. Постав чтонибуть типа Rutionul Robot, и провер как у тебя ворочается при~500 одновремерно гуляющих пользователей. На такую скорость работы и надо ориэнтироваться.
...
Рейтинг: 0 / 0
Клиент-Сервер и большая выборка
    #33793160
bolgare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oracle, судя по "реф курсору"? Почему бы не возвращать только требуемые записи,
вырезав их в запросе, т.е. по существу для каждой страницы заново получить
refcursor?

- это лучший вариант, но работает при сортировке по одному полю, лучше если это Parent Key (select ... id> and id<), а когда сортировка по пяти-семи полям?

Во вторых не делай так чтобы при перезагрузки страници у тебя формировался офигенный запрос который долго работает.


- а как делать?
...
Рейтинг: 0 / 0
Клиент-Сервер и большая выборка
    #33793227
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bolgare wrote:
> - это лучший вариант, но работает при сортировке по одному полю, лучше
> если это Parent Key (select ... id> and id<), а когда сортировка по
> пяти-семи полям?

А в чем разница, по каким и скольки полям сортировать?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Клиент-Сервер и большая выборка
    #33793643
vndovr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда-то была подобная задача и решалась следующим образом (из соображений производительности, согласованности данных).

Результат запроса выбрасывается в специально созданную для постраничного отображения данных таблицу под определенным ID и странички для которых нужна пагинация данных работали уже с ней - быстродействие выше. Данные в ней актуальны на момент запроса.
...
Рейтинг: 0 / 0
Клиент-Сервер и большая выборка
    #33793663
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
А в чем разница, по каким и скольки полям сортировать?

Как сервер обрабатывает запрос. Если по id то наверняка идет по индексуи сразу отдает результат по fetch. Если сортировка сложная то тогда вначале формируется весь ответ и потом он сортируется что намного дольше.

vndovr
Результат запроса выбрасывается в специально созданную для постраничного отображения данных таблицу под определенным ID и странички для которых нужна пагинация данных работали уже с ней - быстродействие выше. Данные в ней актуальны на момент запроса

Эмуляция временных таблиц. Когда это чистится?
...
Рейтинг: 0 / 0
Клиент-Сервер и большая выборка
    #33793710
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Путилин Denis Popov
bolgareно работает при сортировке по одному полю
А в чем разница, по каким и скольки полям сортировать?

Как сервер обрабатывает запрос. Если по id то наверняка идет по индексу и сразу отдает результат по fetch. Если сортировка сложная то тогда вначале формируется весь ответ и потом он сортируется что намного дольше.

Главное, что этот вариант в принципе работает, вне зависимости от полей сортировки:) А далее уже идут вопросы скорострельности запроса: планы, статистика и требуемые индексы, в том числе по полям/функциям сортировки, если они возможны и нужны.
...
Рейтинг: 0 / 0
Клиент-Сервер и большая выборка
    #33793737
vndovr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объект, который отвечает за доступ к данным лежит в сессии - имплементирует HttpSessionBindingListener. Когда сессия уничтожается он же и чистит данные за собой в таблице.
public void valueUnbound(HttpSessionBindingEvent event)

Отдельно крон для экстренных случаев - (сервер упал и т.д.) - когда возможности очистить данные объекту не предоставляется.

Можно положить имплементацию HttpSessionListener, которая будет чистить данные в таблице при уничтожении сессии.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиент-Сервер и большая выборка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]