2009-11-10 18 views
0

我有一個經典的ASP網站,這需要一些數據庫表從會議數據中按計劃清空。該系統沒有進入預定任務(這是一個共享的虛擬主機上,並使用MySQL服務器)如何在Classic ASP中安排常規數據庫清理任務?

我用global.asa考慮,火關事件爲這樣:

  1. Application_OnStart - 刪除所有從數據庫
  2. Application_OnEnd會話數據 - 刪除所有會話數據
  3. Session_OnStart - 創建一個用戶會話
  4. Session_OnEnd - 刪除涉及到這一切都會話數據分裂國家。

是否有任何理由不應該在global.asa中創建數據庫連接?這些將在這裏創建和銷燬,不會在會話或應用程序範圍內共享。我將其視爲一種爲每個用戶(會話開始和結束時)運行這些管理任務兩次的方式,並且不會再次爲它們觸發,等同於很少的數據庫流量。

任何人有任何想法,爲什麼這可能是壞的?有沒有連接到global.asa的數據庫的原因?

如果有人認爲上述想法是一個壞的 - 你有什麼其他的想法,以我怎麼可以定期空這些表沒有一個或多個:

  1. 計劃任務
  2. 數據庫計劃任務
  3. 運行在頁面加載的代碼的每一頁(因此Session_OnStart鉤子)

TA」

高級椰子

回答

2

我會爲Session_OnEnd中的單個會話以及Application_OnStart中的所有會話進行清理。如果你的所有會話清理速度很慢,你可以做一個醜陋的事情,並把這個清理放在一個單獨的asp文件中,你使用XMLHTTP類發出http請求,記得不要等待請求完成,因爲它將在Application_OnStart中的所有代碼運行之前不會開始提供服務。

3

這取決於您的清理任務需要多長時間。由於在Application_Start運行時不會提供請求,因此可能會阻塞一段時間。此外,您無法保證所有情況下都會調用Application_End(或Session_End)(當服務器關閉時,它可能不會被觸發,或者某些災難性故障可能完全繞過這些事件)。

正如你所建議的那樣,最好的方法是運行一個負責清理陳舊會話數據的計劃任務。

+0

嗨晏, 好點重新:Application_Start放慢速度 - 我不認爲 - 雖然不確定什麼潛在的延誤 - 希望很短。 我希望session_end會刪除大部分會話數據,將Application_Start中的任何延遲限制到最小(即,除非服務器崩潰,否則這些查詢應該很少) – 2009-11-10 15:15:49

3

您可以編寫一個清空會話表的網頁,並通過計劃任務從外部框中調用該頁面。

+0

這是我們已經設置的 - 但是我不就像依賴另一個盒子來清理會話數據一樣,並希望使其成爲「自包含」的解決方案。 – 2009-11-10 15:11:24

0

如果您擁有一致的流量,則可以在請求週期結束時搭載小型任務。只需發出response.flush,然後執行db查詢。當然你需要寫自己的調度程序。另一種選擇是創建一個獨立的asp文件(tasklet),您可以在請求開始時使用服務器端,async,xmlhttpreq進行ping操作。這將清理代碼保留在客戶端請求週期之外並減少延遲。

其實我不會驚訝,如果還沒有一些聰明的基於appengine的webappr/api,可以按計劃ping傳統的tasklet/webhooks。如果沒有,你可以寫一個你自己,選項是無止境的:)