Запуск программы по таймеру vs выполнение подпрограммы по ..

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Запуск программы по таймеру vs выполнение подпрограммы по ..

Сообщение GAMER »

Запуск программы по таймеру vs выполнение подпрограммы по таймеру.

И так, задача:
через определенные промежутки времени нужно считать данные с СУБД, и запустить скрипт (внешний).
Если реализовать на паскале, то что лучше?
1. Через крон (или другой планировщик) запускать через промежутки времени программу, которая подключиться к СУБД отработает и завершит работу.
2. При старте системы запустить программу, которая подключиться к СУБД и через таймер будет запускать подпрограмму с тем же результатом.

Плюсы первого варианта.
1. Не висит в памяти.
2. Если был обрыв сессии с СУБД, то перелогинится сама.

Минусы первого варианта.
1. Каждый раз нужно подключатьсчя к СУБД.

Плюсы второго варианта.
1. Один раз подключился и не дергаем авторизацию СУБД.
2. Не нужно крон или другой планировщик.

Минусы второго варианта.
1. Занимает место в памяти.
2. Если обрыв сессии нужно это проверять.

Дополнительная информация.
1. СУБД - майскл.
2. Промежутки равны 1 минуте.
3. ОС - FreeBSD (и не только).
Последний раз редактировалось GAMER 27.02.2012 11:39:46, всего редактировалось 3 раза.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Озвучте существующие ограничения, если таковые имеются. Если ограничений нет, то первый вариант более предпочтительный.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Ограничений нет.
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

Держать соединение не более красиво чем его постоянно поднимать. Я считаю, интервалы достаточно велики, и первая тактика предпочтительнее. Хотя кроме соединения могут быть и другие накладные расходы, предшествующие началу логики, не знаю что там в алгоритме есть.

..bw
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

bw писал(а):Держать соединение не более красиво чем его постоянно поднимать.
Это смотря какая задача. Наример при использовании темповых таблиц, лучше держать.
В даном случае, ничего такого нет. Считать данные с таблицы и сформировать скрипт для выполнения. Я уже даже подумываю, что может это лучше сделать другими средствами, например на Перле, но я его не знаю. Зато есть повод выучить :)
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

При таком большом интервале 1-й вариант однозначно лучше.
А язык програмирования особо не важен.
Если нужно быстрее - то лучше делать на том, что знаешь. А если хочется занятся самообразованием - то тут все дороги перед вами открыты...
KSergey
незнакомец
Сообщения: 3
Зарегистрирован: 30.04.2012 19:59:10

Сообщение KSergey »

По опыту эксплуатации одной поделки хочу ответить, что у первого способа есть еще одно существенное преимущество: если программа аварийно завершится, то это не помешает ей при следующем старте (по расписанию) снова взлететь.
А вот если выбрать второй вариант - то придется придется предпринимать весьма нетривиальные действия, чтобы она перезапустилась.
Ну и написание программ в большим временем uptime (т.е. второй вариант) - сама по себе нетривиальная задача, требующая определенных навыков. В отличии от программы, которая взлетела, сделала что-то и завершилась; требований к качеству такой программы - много-много меньше, что очень существенно при эксплуатации в автономном режиме.
Kemet
постоялец
Сообщения: 241
Зарегистрирован: 10.02.2010 18:28:32
Откуда: Временно оккупированная территория
Контактная информация:

Сообщение Kemet »

GAMER, а сколько времени занимает соединение/разъединение, обработка данных и формирование скрипта и, видимо его выполнение? С учетом, что это должно осуществляться каждую минуту, стоит ли оно, дергать кроном?
alexey38
долгожитель
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Сообщение alexey38 »

Как мне кажется, легко написать программу одновременно сочетающую все варианты.
Запустил без параметров - она отработала и завершилась. Запустил с 1-м параметром, в нем указал интервал в сек, реализовал таймер (несколько строк кода) и она работает в цикле.
Запустил со вторым параметром, и она не будет разрывать соединение (пара условий в начале и в конце). В итоге, можете пробовать по разному, т.е. опыт эксплуатации подскажет оптимальный вариант.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Kemet писал(а):GAMER, а сколько времени занимает соединение/разъединение, обработка данных и формирование скрипта и, видимо его выполнение? С учетом, что это должно осуществляться каждую минуту, стоит ли оно, дергать кроном?

Если СУБД локально, то секунды (а то и меньше).
Вообще, задачу эту решил через перл. Как-то более по опенсорсному :)
Плюсы:
1. Маленький скрипт - мало места, легко бекапить и переносить.
2. Кроссплатформенность.
3. Видно сорсы скрипта.
4. Другие могут вносить изменения без наличия ФПЦ/Лазаруса.
5. Код попроще.
Но это в даном случае.
Если код посложнее, то может и фпц/лазарус бы более подошел.
Ответить