|
|
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
Все происходит через Web Servlet Делается большая выборка из базы, при этом как ее делать вопрос десятый, и выкидывается по-странично на клиента. Сейчас реализовано так, что при переходе на др. страницу идет запрос к базе (читается до нужного места в реф курсоре), проблема в том, что чем больше номер страницы - тем дольше читаеться, а запрос сложный и делаеться енто очень медленно. Может у кого есть идеи как это реализовать по-другому??? Хранить данные в сессии не реально - объем ~ 5000 записей и не маленьких и клиент будет всяко не один и даже не десять. Оптимизить запрос - не выход, быстрее он уже пахать не будет :). Темповые таблицы тоже не интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 14:40 |
|
||
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
Oracle, судя по "реф курсору"? Почему бы не возвращать только требуемые записи, вырезав их в запросе, т.е. по существу для каждой страницы заново получить refcursor? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 14:50 |
|
||
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
bolgareСейчас реализовано так, что при переходе на др. страницу идет запрос к базе (читается до нужного места в реф курсоре), проблема в том, что чем больше номер страницы - тем дольше читаеться, а запрос сложный и делаеться енто очень медленно. . Ага, ты еще время замеряй после того как сервер перестартует. Во первых, ROW ... TO ... (LIMIT in MySQl FIRDT SKIP in Firebird) никто не отменял. Во вторых не делай так чтобы при перезагрузки страници у тебя формировался офигенный запрос который долго работает. Постав чтонибуть типа Rutionul Robot, и провер как у тебя ворочается при~500 одновремерно гуляющих пользователей. На такую скорость работы и надо ориэнтироваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 14:57 |
|
||
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
Oracle, судя по "реф курсору"? Почему бы не возвращать только требуемые записи, вырезав их в запросе, т.е. по существу для каждой страницы заново получить refcursor? - это лучший вариант, но работает при сортировке по одному полю, лучше если это Parent Key (select ... id> and id<), а когда сортировка по пяти-семи полям? Во вторых не делай так чтобы при перезагрузки страници у тебя формировался офигенный запрос который долго работает. - а как делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 15:01 |
|
||
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
bolgare wrote: > - это лучший вариант, но работает при сортировке по одному полю, лучше > если это Parent Key (select ... id> and id<), а когда сортировка по > пяти-семи полям? А в чем разница, по каким и скольки полям сортировать? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 15:16 |
|
||
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
Когда-то была подобная задача и решалась следующим образом (из соображений производительности, согласованности данных). Результат запроса выбрасывается в специально созданную для постраничного отображения данных таблицу под определенным ID и странички для которых нужна пагинация данных работали уже с ней - быстродействие выше. Данные в ней актуальны на момент запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 16:50 |
|
||
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
Denis Popov А в чем разница, по каким и скольки полям сортировать? Как сервер обрабатывает запрос. Если по id то наверняка идет по индексуи сразу отдает результат по fetch. Если сортировка сложная то тогда вначале формируется весь ответ и потом он сортируется что намного дольше. vndovr Результат запроса выбрасывается в специально созданную для постраничного отображения данных таблицу под определенным ID и странички для которых нужна пагинация данных работали уже с ней - быстродействие выше. Данные в ней актуальны на момент запроса Эмуляция временных таблиц. Когда это чистится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 16:54 |
|
||
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
Евгений Путилин Denis Popov bolgareно работает при сортировке по одному полю А в чем разница, по каким и скольки полям сортировать? Как сервер обрабатывает запрос. Если по id то наверняка идет по индексу и сразу отдает результат по fetch. Если сортировка сложная то тогда вначале формируется весь ответ и потом он сортируется что намного дольше. Главное, что этот вариант в принципе работает, вне зависимости от полей сортировки:) А далее уже идут вопросы скорострельности запроса: планы, статистика и требуемые индексы, в том числе по полям/функциям сортировки, если они возможны и нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 17:06 |
|
||
|
Клиент-Сервер и большая выборка
|
|||
|---|---|---|---|
|
#18+
Объект, который отвечает за доступ к данным лежит в сессии - имплементирует HttpSessionBindingListener. Когда сессия уничтожается он же и чистит данные за собой в таблице. public void valueUnbound(HttpSessionBindingEvent event) Отдельно крон для экстренных случаев - (сервер упал и т.д.) - когда возможности очистить данные объекту не предоставляется. Можно положить имплементацию HttpSessionListener, которая будет чистить данные в таблице при уничтожении сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2006, 17:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33793073&tid=2148959]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
177ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 459ms |

| 0 / 0 |
