Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод результата в процессе выполнения запроса / 25 сообщений из 50, страница 1 из 2
18.09.2018, 10:34
    #39704062
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Есть приложение: Spring, Spring Data JPA, Mysql.

Есть запрос который может выполнятся продолжительное время. В этом запросе происходит выборка с базы и фильтрация посредством Java (таково задание, не моя прихоть). То бишь я постранично достаю пачку данных с бд, фильтрую, иду за следующей пачкой данных.

Нюанс в том что бы увидеть результат запроса мне нужно ждать пока все не обработается.

Если ли возможность публиковать результат во время выполнения запроса? То бишь получил первую пачку данных, отфильтровал, отправил клиенту и т.д.

Структура обычная RestContoller->Service->JpaDao.
...
Рейтинг: 0 / 0
18.09.2018, 13:11
    #39704185
Герой дня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
может, 5й spring такое может ?
...
Рейтинг: 0 / 0
18.09.2018, 13:26
    #39704205
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Если ли возможность...

Есть

результат во время выполнения запроса....отправил клиенту

А клиент такое у Вас может?

Если да, то читать документацию/тех_задание на клиента ))) + правильно ассинхронно отдавать результат с сервера

Каким образом вопрос относится к Java - мне не понятно.
...
Рейтинг: 0 / 0
18.09.2018, 13:44
    #39704225
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
TsyklopВ этом запросе происходит выборка с базы и фильтрация посредством Java (таково задание, не моя прихоть). То бишь я постранично достаю пачку данных с бд, фильтрую, иду за следующей пачкой данных.за это голову свернуть....
пока mysql не выполнит запрос - будешь ждать....
TsyklopТо бишь получил первую пачку данных, отфильтровал, отправил клиенту и т.д.для этого и предназначены websocket
...
Рейтинг: 0 / 0
18.09.2018, 13:49
    #39704233
cossack5
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Можно указать statement.setFetchSize(100), тогда JDBC драйвер (если умеет) будет доставать по 100 записей.
...
Рейтинг: 0 / 0
18.09.2018, 14:02
    #39704244
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
cossack5Можно указать statement.setFetchSize(100), тогда JDBC драйвер (если умеет) будет доставать по 100 записей.это не спасёт
...
Рейтинг: 0 / 0
18.09.2018, 14:46
    #39704303
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
cossack5Можно указать statement.setFetchSize(100), тогда JDBC драйвер (если умеет) будет доставать по 100 записей.
он и так достаёт там 200 строк. потом я фильтрую в Java коде и записываю в List результат, который отдам клиенту.
...
Рейтинг: 0 / 0
18.09.2018, 14:50
    #39704308
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Leonid Kudryavtsev, на клиенте нет ни angular и прочее. По сути пустая страница.

А почему не к Java? Ведь сервер тоже надо научить как это делать. Да и вопрос был про то как это делать на сервере, а не как на клиенте это принимать. И о том что "а может клиент" речи не шло. Это вы перепрыгнули на клиента почему-то. А про суть вопроса касательно сервера ничего не увидел окромя "есть".
...
Рейтинг: 0 / 0
18.09.2018, 14:55
    #39704312
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Tsyklop,
отдать с сервера клиенту можно по частям если есть full duplecs связь.
что за клиент?
...
Рейтинг: 0 / 0
18.09.2018, 15:14
    #39704334
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
вадяTsyklop,
отдать с сервера клиенту можно по частям если есть full duplecs связь.
что за клиент?
да обычный клиент. пустота. просто одна jsp и все.
...
Рейтинг: 0 / 0
18.09.2018, 15:20
    #39704339
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Tsyklopда обычный клиент. пустота. просто одна jsp и все.тогда ws и будет счастье
...
Рейтинг: 0 / 0
18.09.2018, 15:45
    #39704362
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
вадяпока mysql не выполнит запрос - будешь ждать....

Не знаю насчет mysql, но в нормальных СУБД, фазы prepare statement, execution and fetch - различаются

Большинство СУБД целый ряд фильтров накладывают на фазе fetch. Т.ч. запросы "ждать" не нужно. Возврат управления (execution) происходит за максимально короткое время, а "тормозить" он будет именно тогда, когда запросят (fetch) новую порцию данных, ровно на время, необходимое для обработки (получение с диска) данной порции данных.

Раземеется, если у запроса подходящий план выполнения. Distinct, order by, hash join не всегда можно на fetch отложить (только если физической сортировку удалось заменить проходом по индексу).

AFAIK
...
Рейтинг: 0 / 0
18.09.2018, 15:57
    #39704372
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Leonid Kudryavtsev,
ага , запрос отдал часть и ТС эту часть обработал, а ему ещё часть подкинули - и што теперь с ней делать?
...
Рейтинг: 0 / 0
18.09.2018, 16:05
    #39704382
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
вадяLeonid Kudryavtsev,
ага , запрос отдал часть и ТС эту часть обработал, а ему ещё часть подкинули - и што теперь с ней делать?
в зависимости от задачи

Сделать ассинхронную обработку - можно. Вопрос затраченных усилий, выделенного бюджета и осмысленности.

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

При 200 строках результата, даже оптимизировать смешно. Нужно нормально писать SQL и проектировать базу, что бы не тормозило.

P.S.
AFAIK "стандартный" jsp (Apache Tomcat) и так ассинхронно отдает, не дожидаясь завершения выполнения. Если только, кто нибудь, ему не помог. Например, делая не нужные шаги обработки, типа "записываю в List результат"
...
Рейтинг: 0 / 0
18.09.2018, 16:08
    #39704386
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Tsyklopон и так достаёт там 200 строк. потом я фильтрую в Java коде и записываю в List результат, который отдам клиенту.
А сразу правильный SQL запрос написать не судьба?
...
Рейтинг: 0 / 0
18.09.2018, 17:10
    #39704439
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
GarrickTsyklopон и так достаёт там 200 строк. потом я фильтрую в Java коде и записываю в List результат, который отдам клиенту.
А сразу правильный SQL запрос написать не судьба?

1. Spring Data Jpa
2. запрос вида SELECT * FROM contact LIMIT ?, ?;

что другое писать?
...
Рейтинг: 0 / 0
18.09.2018, 17:12
    #39704443
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Leonid Kudryavtsev, Вас несет не понятно куда. Стоит вопрос прямо и четко без всяких "Вопрос затраченных усилий, выделенного бюджета и осмысленности."

Кто сказал что тормозит что-то? кто сказал что делает оптимизация?

Leonid KudryavtsevP.S.
AFAIK "стандартный" jsp (Apache Tomcat) и так ассинхронно отдает, не дожидаясь завершения выполнения. Если только, кто нибудь, ему не помог. Например, делая не нужные шаги обработки, типа "записываю в List результат
Ну вот мне приходят на ум только HttpServletResponse.getWriter().append() или же юзать WebFlux
...
Рейтинг: 0 / 0
18.09.2018, 17:18
    #39704450
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Tsyklop1. Spring Data Jpa
2. запрос вида SELECT * FROM contact LIMIT ?, ?;вопрос в том что ты фильтруешь на java?
почему не возложить этот фильтр на субд?
...
Рейтинг: 0 / 0
18.09.2018, 17:20
    #39704452
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Tsyklop HttpServletResponse.getWriter().append() этим ты не отправишь клиенту.
...
Рейтинг: 0 / 0
18.09.2018, 17:23
    #39704453
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
вадяTsyklop HttpServletResponse.getWriter().append() этим ты не отправишь клиенту.
Данные из "чистого" JSP/Servlet output stream'а отсылаются клиенту ассинхронно.
Завершения JSP/Servlet (при большом объеме данных) никто не ждет

AFAIK

p.s. Разумеется, если никто не помог. Например нет кривых filter работающих после JSP/servlet'а.
...
Рейтинг: 0 / 0
18.09.2018, 18:02
    #39704471
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Tsyklop, если речь идет о том чтобы на сформированную страницу выводить данные постепенно, то это сочетание клиентских технологий (AJAX и т д) и серверных. По сути Ваш сервлет должен отдавать клиенту данные с пагинацией используя лимит и оффсет, что необходимо учесть в SQL-запросе и AJAX-запросе.
...
Рейтинг: 0 / 0
18.09.2018, 18:21
    #39704481
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Kachalovто это сочетание клиентских технологий (AJAX и т д) и серверных.
вадяTsyklopда обычный клиент. пустота. просто одна jsp и все.тогда ws и будет счастье
...
Рейтинг: 0 / 0
18.09.2018, 18:39
    #39704488
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
вадятогда ws и будет счастье
TsyklopRestContoller

- в общем не понятно в чем проблема у ТС, Rest уже есть, Spring Data JPA умеет PagingAndSortingRepository , остается заставить AJAX-клиента отправлять запрос на получение данных (типа /getchunk ) и отдавать ему в ответе этот самый chunk + информацию о том что в базе еще что то осталось:

Код: javascript
1.
2.
3.
4.
{
    "chunk": [5, 17, 25],
    "hasmore": true
}
...
Рейтинг: 0 / 0
18.09.2018, 18:57
    #39704499
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Kachalovостается заставить AJAX-клиента отправлять запрос на получение данныхсовсем малость...
...
Рейтинг: 0 / 0
18.09.2018, 19:42
    #39704530
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата в процессе выполнения запроса
Kachalov, условно если в таблице 100 000 000 записей то сколько мне нужно делать ajax запросов что бы получить все?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод результата в процессе выполнения запроса / 25 сообщений из 50, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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