|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
Имеется необходимость со стороны клиента запускать длительные обработки, которые могут выполняться от нескольких минут до нескольких часов. И тут встала проблема с обрывом связи, либо простым закрытием приложения пользователем. Так как сервер теряет связь с клиентом, процесс завершается. Собственно вопрос: есть ли способы запустить транзакцию без связи с клиентом, чтобы она работала сама по себе, а со стороны клиента просто мониторить состояние? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:18 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
ploop Имеется необходимость со стороны клиента запускать длительные обработки, которые могут выполняться от нескольких минут до нескольких часов. И тут встала проблема с обрывом связи, либо простым закрытием приложения пользователем. Так как сервер теряет связь с клиентом, процесс завершается. Собственно вопрос: есть ли способы запустить транзакцию без связи с клиентом, чтобы она работала сама по себе, а со стороны клиента просто мониторить состояние? скорее всего это нужно обыгрывать на стороне приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:34 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
ploop Имеется необходимость со стороны клиента запускать длительные обработки, которые могут выполняться от нескольких минут до нескольких часов. И тут встала проблема с обрывом связи, либо простым закрытием приложения пользователем. Так как сервер теряет связь с клиентом, процесс завершается. Собственно вопрос: есть ли способы запустить транзакцию без связи с клиентом, чтобы она работала сама по себе, а со стороны клиента просто мониторить состояние? Для java ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:35 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
ploop Имеется необходимость со стороны клиента запускать длительные обработки, которые могут выполняться от нескольких минут до нескольких часов. И тут встала проблема с обрывом связи, либо простым закрытием приложения пользователем. Так как сервер теряет связь с клиентом, процесс завершается. Собственно вопрос: есть ли способы запустить транзакцию без связи с клиентом, чтобы она работала сама по себе, а со стороны клиента просто мониторить состояние? между клиентским приложением и базой в такой ситуации надо промежуточный application server который все это и реализует вне зависимости от запущенности или нет клиентского приложения а клиетское приложение напрямую в базу не пускать (можно хоть web based сделать для простоты). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:38 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
mefman скорее всего это нужно обыгрывать на стороне приложения. Приложение, по задаче, работать не должно, оно запускает процесс и закрывается. Или с ним теряется связь. Maxim Bogukмежду клиентским приложением и базой в такой ситуации надо промежуточный application server Ясно. То есть стандартными средствами никак... Maxim Bogukа клиетское приложение напрямую в базу не пускать Ну какое досталось... переделать с наскока не выйдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:47 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
ploop Maxim Bogukмежду клиентским приложением и базой в такой ситуации надо промежуточный application server Ясно. То есть стандартными средствами никак... Никак... база это не сервер приложений... если он видит что клиентский коннект отвалился - она закрывает обработку. Функций сервера приложений в postgresql нет (и слава богу). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:49 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
ploop mefman скорее всего это нужно обыгрывать на стороне приложения. Приложение, по задаче, работать не должно, оно запускает процесс и закрывается. Или с ним теряется связь. Maxim Bogukмежду клиентским приложением и базой в такой ситуации надо промежуточный application server Ясно. То есть стандартными средствами никак... Maxim Bogukа клиетское приложение напрямую в базу не пускать Ну какое досталось... переделать с наскока не выйдет. Ну можно на пл-питон сделать процедуру, которая будет локально запускать отчет и писать его в "темповую" таблицу, или опять же через питон отправлять готовый отчет на почту. Но это кривизна конечно. Хорошо все сделать, да еще и элементарную безопасность учесть - работы не мало будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:51 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
Maxim Boguk ploop пропущено... Ясно. То есть стандартными средствами никак... Никак... база это не сервер приложений... если он видит что клиентский коннект отвалился - она закрывает обработку. Функций сервера приложений в postgresql нет (и слава богу). ТС наверное имеет в виду что-то типо дбмс-шедулер в оракле. Запустили, и отвалились, а она работает себе... В принципе можно из через какой-либо постгресовый планировщик это реализовать. Но это все равно не будут "стандартные средства" ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:54 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
AFAIK для фоновых процессов можно попробывать использовать средства типа Job или Cron ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 15:01 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev AFAIK для фоновых процессов можно попробывать использовать средства типа Job или Cron А как его(cron) запускать удаленно из приложения? Только через untrusted language имхо. А это "слегка" дыра в безопасности. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 15:02 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
Например можно запустить и пусть работает, или всегда запускать раз в N секунд/минут что бы что-то предлагать конкретное, нужно знать бизнес-задачу ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 15:27 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
mefman Ну можно на пл-питон сделать процедуру, которая будет локально запускать отчет и писать его в "темповую" таблицу, или опять же через питон отправлять готовый отчет на почту. Но это кривизна конечно. Хорошо все сделать, да еще и элементарную безопасность учесть - работы не мало будет. Да там не обязательно отправлять, просто дождаться завершения. Все результаты будут где надо. Но это костыль, делать на костылях я уже умею :) Leonid Kudryavtsev Например можно запустить и пусть работает, или всегда запускать раз в N секунд/минут что бы что-то предлагать конкретное, нужно знать бизнес-задачу Бизнес-задача простая, вести расчёты. До полумиллиона клиентов, глубиной на несколько лет, со сложными зависимостями и вычисления по дням(!). Поэтому так долго. Задачи разовые, все текущие оптимизированы на приемлемое время работы. Ну и отчётность относительно долго может формироваться, просто из-за объёма. Планировщики отпадают потому, что все действия должны производиться после загрузки данных, никакого расписания конечно же нет. На счёт костылей ещё возникла идея: заметил, что расширение dblink (для кроссбазовых запросов), работая на посторонней БД, не отваливается при отсоединении клиента, вызвавшего его. Если его вызвать на своей же с принудительным коммитом, может и проскочит. Надо проверить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 15:45 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
решение на уровне школьника, студента (по хорошему какие нибудь сообщения бы заюзать) 1. в одну табличку пишите флаг, что что-то надо делать 2. делаете процесс(или несколько) аналогичных Concurrent Manager'у в OeBS 2.1. из таблички заданий читаете. что нужно делать 2.2. делается 2.3. прогресс выполнения пишется в табличку "просто мониторить состояние" 2.4. результат работы пишется в табличку для результатов 3. фоновый процесс запускаете в фоне хоть через командную строку Unix с &, хоть job'ом, хоть cron'ом, хоть еще как Проблема с задачами "которые могут выполняться ... до нескольких часов", что когда пользователь запустить пару десятков таких задачь ))), то весь сервер или ляжет или встанет колом. IMHO & AFAIK а поскольку пользователь обычно не думает о том, что на сервере его задание выполняется (хоть и медленно), ситуации когда пользователи позапускають 100500 копий одной и той же задачи - достаточно частые IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 15:54 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev хоть через командную строку Unix с &, хоть job'ом, хоть cron'ом, хоть еще как Как-то слишком мудрёно.... Leonid Kudryavtsev Проблема с задачами "которые могут выполняться ... до нескольких часов", что когда пользователь запустить пару десятков таких задачь ))), то весь сервер или ляжет или встанет колом. IMHO & AFAIK Это решается элементарно: если задача работает (процесс отслеживается или флаг стоит, вариантов масса) управление на интерфейсе делается неактивным. Leonid Kudryavtsev а поскольку пользователь обычно не думает о том, что на сервере его задание выполняется (хоть и медленно), ситуации когда пользователи позапускають 100500 копий одной и той же задачи - достаточно частые IMHO & AFAIK Будем бить. Возможно даже ногами :) Не, как выше сказал, это не проблема. зы: запустил через dblink, закрыл консоль, пока работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 16:06 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
ploop зы: запустил через dblink, закрыл консоль, пока работает. ИМХО - это еще больший костыль чем процедура на pl ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 16:16 |
|
Запуск отложенных процедур
|
|||
---|---|---|---|
#18+
mefman ИМХО - это еще больший костыль чем процедура на pl Такой же, но проще: делать ничего не надо, оно работает :) Только что завершилось, всё норм. А над процедурой подумаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 16:24 |
|
|
start [/forum/topic.php?fid=53&msg=39969413&tid=1994646]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 298ms |
total: | 444ms |
0 / 0 |