Планирование заданий - оптимальный дизайн - PullRequest
0 голосов
/ 03 сентября 2011

Я ищу оптимальный дизайн для следующего варианта использования.

Я строю систему, в которой пользователи создают сущности с конечной датой / временем.Мне нужно запланировать задание, чтобы изменить статус этих объектов на Истекший, как только будет достигнуто время окончания.

Это два решения, о которых я могу подумать

  • Задание запускается каждую минуту и ​​выполняет запрос для проверки объектов с истекшим сроком действия (endTime> sysdate). Проблема : загрузка базы данных, выполнение этого запроса каждую минуту может привести к загрузке базы данных.
  • Запланируйте задание для каждого объекта, как только объект будет создан. Проблема : Слишком много заданий будет создано в системе, 1000 таких объектов будут создаваться ежедневно.

Есть ли лучшее решение, чем два вышеупомянутых?Как люди вообще это делают?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2011

Я думаю, вы можете объединить две идеи.

Каждый час запускайте задание, которое получает данные. Теперь создайте задания для каждого из объектов, срок действия которых истекает только в течение следующих 60 минут.

теперь время 60 минут - просто пример .. измените его в соответствии с вашими потребностями.

0 голосов
/ 03 сентября 2011

Запрос каждую минуту - не очень большая нагрузка. У меня есть служба Windows, которая делает следующее:

Управляет расписанием сессий VoIP, запускает их, завершает их, начинает записи, заканчивает записи, очищает место записи на диске записи, отображает сообщения OSD. Каждая из этих задач находится в своем собственном потоке с таймером и выполняет свой запрос примерно каждые 4 секунды. В базе данных содержится более 100 000 записей и 100 пользователей веб-приложения, которые одновременно обращаются к одной и той же базе данных. Он работает нормально и работает уже около 3 лет.

В зависимости от вашей структуры, могут быть лучшие варианты, но я не нашел ни одного на данный момент. Например, в .NET есть библиотека параллельных задач, которую я еще не использовал, и, как я слышал, здесь есть что предложить. В любом случае, я использовал подход № 1 в течение многих лет, и он никогда не делал меня неправильно.

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

...