كيف يمكنني جدولة مهام تنظيف قاعدة البيانات العادية في 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. وبعد إذا كانت تنظيف جميع جلساتك بطيئة، فيمكنك القيام بشيء قبيح ووضع هذا التنظيف في ملف ASP منفصل تقوم بإجراء طلب HTTP لاستخدام فئة XMLHTTP، تذكر عدم انتظار الطلب لإكماله كما هو لن تبدأ يجري تقديمها قبل كل الكود Application_OnStart يجرى.

نصائح أخرى

يمكنك كتابة صفحة ويب تفرغ جداول الجلسة، واستدعاء تلك الصفحة من مربع خارجي عبر مهمة مجدولة.

ذلك يعتمد على المدة التي ستستغرقها مهام التنظيف الخاصة بك. نظرا لأنه لن يتم تقديم طلب أثناء تشغيل Apartment_Start، فقد يتم حظره لفترة من الوقت.

علاوة على ذلك، ليس لديك أي ضمان سيتم استدعاء Application_ed_end (أو session_end) في جميع الحالات (عند إيقاف تشغيل الخادم، فقد لا يتم تشغيل بعض الفشل الكارثي قد تجاوز هذه الأحداث بالكامل).

أفضل طريقة ستكون، كما تقترح، لتشغيل مهمة مجدولة مسؤولة عن تنظيف بيانات الجلسة التي لا معنى لها.

إذا كان لديك حركة مرور ثابتة، فيمكنك الحصول على مهام صغيرة في نهاية دورة الطلب. مجرد إصدار استجابة .Flush ثم تنفيذ استعلامات DB. بالطبع تحتاج إلى الكتابة Youre Scheduler. خيار آخر هو إنشاء ملف Seperate ASP (SEAMELT) الذي تستخدمه باستخدام ServerSide، ASYNC، XMLHTTPREQ في بداية الطلب. هذا يبقي رمز التنظيف خارج دورة طلب العملاء ويقلل من الكمون.

في الواقع، لم يتم صوابا إذا لم يكن هناك بالفعل بعض WeB / API المستند إلى APP / API CLIVER CLIVER COMPROT وإذا لم يكن هناك، فيمكنك كتابة واحدة كنت نفسك، والخيارات لا نهاية لها :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top