Как мне запланировать регулярные задачи очистки базы данных в Classic ASP? - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть классический ASP-сайт, который требует очистки некоторых таблиц базы данных из данных сеанса по расписанию. Эта система не имеет доступа к запланированным задачам (она находится на общем веб-хосте и использует сервер MySQL)

Я рассматривал возможность использования global.asa для запуска событий как таковых:

  1. Application_OnStart - удалить все данные сеанса из базы данных
  2. Application_OnEnd - удалить все данные сеанса
  3. Session_OnStart - создать сеанс пользователя
  4. Session_OnEnd - удалить все данные сеанса, относящиеся к этому сеансу.

Есть ли причина, по которой я не должен создавать соединения с базой данных в global.asa? Они будут созданы и уничтожены здесь, без общего доступа к сеансу или области приложения. Я рассматриваю это как способ запуска этих задач администрирования дважды для каждого пользователя (в начале и конце сеанса) и для того, чтобы их снова не запускали, что эквивалентно очень небольшому трафику базы данных.

У кого-нибудь есть идеи, почему это может быть плохо? Какие-либо причины не подключаться к базе данных в global.asa?

Если кто-то считает приведенную выше идею плохой - у вас есть другие мысли о том, как я могу регулярно очищать эти таблицы без одного или нескольких из:

  1. Запланированное задание
  2. База данных запланированного задания
  3. Запуск кода при загрузке страницы для каждой страницы (отсюда Session_OnStart хуки)

Ta '

Старший кокос

Ответы [ 4 ]

3 голосов
/ 10 ноября 2009

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

3 голосов
/ 10 ноября 2009

Это зависит от того, сколько времени займет выполнение ваших задач по очистке. Поскольку ни один запрос не будет обработан во время работы Application_Start, он может временно блокироваться.

Более того, у вас нет гарантии, что Application_End (или Session_End) будет вызываться во всех случаях (когда сервер выключен, он может не срабатывать, или какой-то катастрофический сбой может полностью обойти эти события).

Лучше всего, как вы предлагаете, запустить запланированное задание, отвечающее за очистку устаревших данных сеанса.

2 голосов
/ 10 ноября 2009

Я бы сделал очистку для одного сеанса в Session_OnEnd и для ВСЕХ сеансов в Application_OnStart. Если ваша очистка всех сессий происходит медленно, вы можете сделать некрасивую вещь и поместить эту очистку в отдельный asp-файл, который вы делаете http-запросом к использованию класса XMLHTTP, не забудьте дождаться его завершения, так как не будет обслуживаться до запуска всего кода в Application_OnStart.

0 голосов
/ 11 ноября 2009

Если у вас есть постоянный трафик, вы можете добавить небольшие задачи в конце цикла запроса. Просто введите response.flush и затем выполните запросы к базе данных. Конечно, вам нужно написать свой собственный планировщик. Другой вариант - создать отдельный файл asp (тасклет), который вы пингуете с помощью серверной части, async, xmlhttpreq в начале запроса. Это удерживает код очистки в цикле запросов клиентов и уменьшает задержку.

На самом деле, я бы не удивился, если бы еще не было умного webappr / api на основе appengine, которое могло бы пинговать ваши устаревшие тасклеты / webhooks по расписанию. А если нет, вы могли бы написать себя, варианты безграничны:)

...