Classic ASP で定期的なデータベース クリーンアップ タスクをスケジュールするにはどうすればよいですか?
-
19-09-2019 - |
質問
クラシック ASP サイトを持っていますが、スケジュールに従ってセッション データからいくつかのデータベース テーブルを空にする必要があります。このシステムはスケジュールされたタスクにアクセスできません (共有 Web ホスト上にあり、MySQL サーバーを使用しています)
利用を検討していたのですが global.asa
, 、イベント自体を起動するには:
Application_OnStart
- データベースからすべてのセッション データを削除しますApplication_OnEnd
- すべてのセッション データを削除しますSession_OnStart
- ユーザーのセッションを作成するSession_OnEnd
- このセッションに関連するすべてのセッション データを削除します。
データベース接続を作成すべきではない理由はありますか? global.asa
?これらはここで作成および破棄され、セッションまたはアプリケーション スコープでは共有されません。私はこれを、これらの管理タスクをユーザーごとに 2 回 (セッションの開始時と終了時) 実行し、それらの管理タスクが再度実行されないようにし、データベース トラフィックを非常に少なくする方法だと考えています。
これがなぜ悪いのかについて何か考えがある人はいますか?データベースに接続できない理由 global.asa
?
上記のアイデアが悪いと思う人がいる場合、次の 1 つ以上を使用せずにこれらのテーブルを定期的に空にする方法について他に考えはありますか?
- スケジュールされたタスク
- データベースのスケジュールされたタスク
- すべてのページのページロード時にコードを実行します(したがって、
Session_OnStart
フック)
たぁ
シニアココナッツ
解決
私はSession_OnEnd
で、単一のセッションのためにとApplication_OnStart
内のすべてのセッションのためにクリーンアップを行うと思います。あなたのすべてのセッション・クリーンアップが遅い場合は、あなたが醜いことを行うと、あなたはXMLHTTPクラスを使用してHTTPリクエストを行う別のASPファイルでそのクリーンアップを置くことができ、それのように完了するために要求を待たないようにしてくださいApplication_OnStart
のすべてのコードが実行される前に提供されて開始されません。
他のヒント
あなたは、セッションテーブルを空にしたWebページを作成して、スケジュールされたタスクを介して外部ボックスからそのページを呼び出すことができます。
これはあなたのクリーンアップタスクの所要時間によって異なります。 Application_Startが動作している間は、要求が配信されますので、しばらく遮断することができる。
また、あなたはApplication_End(またはのSession_End)は、すべての場合に呼び出されるという保証がありません(サーバーがシャットダウンされたとき、それは解雇、またはされないかもしれませんが、完全にこれらのイベントをバイパスして、いくつかの致命的な障害)。
あなたは古いセッションデータをクリーンアップを担当するスケジュールされたタスクを実行するために、提案として最良の方法は、なります。
あなたは一貫したトラフィックを持っている場合は、要求サイクルの終わりに小さなタスクを背負うことができます。ただ、response.flushを発行して、DBクエリを実行します。もちろん、あなたがyoureの独自のスケジューラを作成する必要があります。別のオプションを使用すると、リクエストの開始時にサーバーサイド、非同期、xmlhttpreqを使用してpingを実行別々のASPファイル(タスクレット)を作成することです。これは、クライアントの要求サイクルのうち、クリーンアップコードを保持し、待ち時間を短縮します。
スケジュールにyoureのレガシータスクレット/ウェブフックにpingを実行できるいくつかの巧妙なAppEngineのもとwebappr / APIは、すでに存在しない場合は、実際に私は驚いことwoudn't。そして、そこではない場合、あなたは1つのyoureの自己を書くことができ、オプションは無限大です:)