|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Есть приложение: Spring, Spring Data JPA, Mysql. Есть запрос который может выполнятся продолжительное время. В этом запросе происходит выборка с базы и фильтрация посредством Java (таково задание, не моя прихоть). То бишь я постранично достаю пачку данных с бд, фильтрую, иду за следующей пачкой данных. Нюанс в том что бы увидеть результат запроса мне нужно ждать пока все не обработается. Если ли возможность публиковать результат во время выполнения запроса? То бишь получил первую пачку данных, отфильтровал, отправил клиенту и т.д. Структура обычная RestContoller->Service->JpaDao. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 10:34 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
может, 5й spring такое может ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:11 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Если ли возможность... Есть результат во время выполнения запроса....отправил клиенту А клиент такое у Вас может? Если да, то читать документацию/тех_задание на клиента ))) + правильно ассинхронно отдавать результат с сервера Каким образом вопрос относится к Java - мне не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:26 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
TsyklopВ этом запросе происходит выборка с базы и фильтрация посредством Java (таково задание, не моя прихоть). То бишь я постранично достаю пачку данных с бд, фильтрую, иду за следующей пачкой данных.за это голову свернуть.... пока mysql не выполнит запрос - будешь ждать.... TsyklopТо бишь получил первую пачку данных, отфильтровал, отправил клиенту и т.д.для этого и предназначены websocket ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:44 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Можно указать statement.setFetchSize(100), тогда JDBC драйвер (если умеет) будет доставать по 100 записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:49 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
cossack5Можно указать statement.setFetchSize(100), тогда JDBC драйвер (если умеет) будет доставать по 100 записей.это не спасёт ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:02 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
cossack5Можно указать statement.setFetchSize(100), тогда JDBC драйвер (если умеет) будет доставать по 100 записей. он и так достаёт там 200 строк. потом я фильтрую в Java коде и записываю в List результат, который отдам клиенту. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:46 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, на клиенте нет ни angular и прочее. По сути пустая страница. А почему не к Java? Ведь сервер тоже надо научить как это делать. Да и вопрос был про то как это делать на сервере, а не как на клиенте это принимать. И о том что "а может клиент" речи не шло. Это вы перепрыгнули на клиента почему-то. А про суть вопроса касательно сервера ничего не увидел окромя "есть". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:50 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Tsyklop, отдать с сервера клиенту можно по частям если есть full duplecs связь. что за клиент? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:55 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
вадяTsyklop, отдать с сервера клиенту можно по частям если есть full duplecs связь. что за клиент? да обычный клиент. пустота. просто одна jsp и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:14 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Tsyklopда обычный клиент. пустота. просто одна jsp и все.тогда ws и будет счастье ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:20 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
вадяпока mysql не выполнит запрос - будешь ждать.... Не знаю насчет mysql, но в нормальных СУБД, фазы prepare statement, execution and fetch - различаются Большинство СУБД целый ряд фильтров накладывают на фазе fetch. Т.ч. запросы "ждать" не нужно. Возврат управления (execution) происходит за максимально короткое время, а "тормозить" он будет именно тогда, когда запросят (fetch) новую порцию данных, ровно на время, необходимое для обработки (получение с диска) данной порции данных. Раземеется, если у запроса подходящий план выполнения. Distinct, order by, hash join не всегда можно на fetch отложить (только если физической сортировку удалось заменить проходом по индексу). AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:45 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, ага , запрос отдал часть и ТС эту часть обработал, а ему ещё часть подкинули - и што теперь с ней делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:57 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
вадяLeonid Kudryavtsev, ага , запрос отдал часть и ТС эту часть обработал, а ему ещё часть подкинули - и што теперь с ней делать? в зависимости от задачи Сделать ассинхронную обработку - можно. Вопрос затраченных усилий, выделенного бюджета и осмысленности. Какие-то влажные мечты, что кто-то что-то за кого-то будет делать или в современных средах разработки оно должно "все само делаться" - ну... влажные мечты и есть ))) уволиться с работы, идти бомжевать и ждать пришествия искуственного интелекта ))) При 200 строках результата, даже оптимизировать смешно. Нужно нормально писать SQL и проектировать базу, что бы не тормозило. P.S. AFAIK "стандартный" jsp (Apache Tomcat) и так ассинхронно отдает, не дожидаясь завершения выполнения. Если только, кто нибудь, ему не помог. Например, делая не нужные шаги обработки, типа "записываю в List результат" ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 16:05 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Tsyklopон и так достаёт там 200 строк. потом я фильтрую в Java коде и записываю в List результат, который отдам клиенту. А сразу правильный SQL запрос написать не судьба? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 16:08 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
GarrickTsyklopон и так достаёт там 200 строк. потом я фильтрую в Java коде и записываю в List результат, который отдам клиенту. А сразу правильный SQL запрос написать не судьба? 1. Spring Data Jpa 2. запрос вида SELECT * FROM contact LIMIT ?, ?; что другое писать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:10 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Вас несет не понятно куда. Стоит вопрос прямо и четко без всяких "Вопрос затраченных усилий, выделенного бюджета и осмысленности." Кто сказал что тормозит что-то? кто сказал что делает оптимизация? Leonid KudryavtsevP.S. AFAIK "стандартный" jsp (Apache Tomcat) и так ассинхронно отдает, не дожидаясь завершения выполнения. Если только, кто нибудь, ему не помог. Например, делая не нужные шаги обработки, типа "записываю в List результат Ну вот мне приходят на ум только HttpServletResponse.getWriter().append() или же юзать WebFlux ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:12 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Tsyklop1. Spring Data Jpa 2. запрос вида SELECT * FROM contact LIMIT ?, ?;вопрос в том что ты фильтруешь на java? почему не возложить этот фильтр на субд? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:18 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Tsyklop HttpServletResponse.getWriter().append() этим ты не отправишь клиенту. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:20 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
вадяTsyklop HttpServletResponse.getWriter().append() этим ты не отправишь клиенту. Данные из "чистого" JSP/Servlet output stream'а отсылаются клиенту ассинхронно. Завершения JSP/Servlet (при большом объеме данных) никто не ждет AFAIK p.s. Разумеется, если никто не помог. Например нет кривых filter работающих после JSP/servlet'а. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:23 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Tsyklop, если речь идет о том чтобы на сформированную страницу выводить данные постепенно, то это сочетание клиентских технологий (AJAX и т д) и серверных. По сути Ваш сервлет должен отдавать клиенту данные с пагинацией используя лимит и оффсет, что необходимо учесть в SQL-запросе и AJAX-запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 18:02 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Kachalovто это сочетание клиентских технологий (AJAX и т д) и серверных. вадяTsyklopда обычный клиент. пустота. просто одна jsp и все.тогда ws и будет счастье ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 18:21 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
вадятогда ws и будет счастье TsyklopRestContoller - в общем не понятно в чем проблема у ТС, Rest уже есть, Spring Data JPA умеет PagingAndSortingRepository , остается заставить AJAX-клиента отправлять запрос на получение данных (типа /getchunk ) и отдавать ему в ответе этот самый chunk + информацию о том что в базе еще что то осталось: Код: javascript 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 18:39 |
|
Вывод результата в процессе выполнения запроса
|
|||
---|---|---|---|
#18+
Kachalovостается заставить AJAX-клиента отправлять запрос на получение данныхсовсем малость... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 18:57 |
|
|
start [/forum/moderation_log.php?user_name=halfpintboy]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 704ms |
total: | 903ms |
0 / 0 |