Как запланировать обычные задачи по очистке базы данных в классическом ASP?

StackOverflow https://stackoverflow.com/questions/1707793

Вопрос

У меня есть классический сайт 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 крючки)

Та

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

Это было полезно?

Решение

Я бы сделал уборку для одного сеанса в Session_OnEnd и для всех сессий в Application_OnStart. Анкет Если ваш All-Sessions-Cleanup медленная, вы можете сделать уродливую вещь и поместить эту очистку в отдельный ASP-файл, который вы делаете HTTP-запрос для использования класса XMLHTTP, не забывайте не ждать, пока запрос завершится как он не начнет быть обслуживаемым до того, как весь код в Application_OnStart бег.

Другие советы

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

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

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

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

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

На самом деле я не буду удивлен, если еще нет какого -то умного, основанного на Appengine WebApp/API, который может пинговать ваш устаревший Tasklet/Webhooks по расписанию. И если нет, вы могли бы написать один, вы сами, варианты бесконечны :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top