毎日、毎週、そしていつでもカウンターを作りたいです。私のデータベースの各製品には、週次、日次、および全時間のカウンターがあります。私の目標は、cronジョブを模倣できるようにすることです。これが正しい方法かどうか聞きたいです。
デイリーカウンターのみをターゲットにするとします。製品のテーブルのデータベースには、「daily_counter」という行があります。製品ごとに、ゼロに初期化されます。別のテーブルには'for_Day'
、日次カウンターが適用されるその日を保持する1つの行のみが呼び出されます。
また、テーブルに対応するアプリケーション変数を1行で初期化し、「for_day」の値をApplication["for_day"]
変数に読み込みます。これは、アプリケーションが最初に起動したときにのみ発生します。
各ユーザーの製品ページのビューごとに、次のことを行います(C#を使用)
当日の番号を取得する
Int current_day = DateTime.Now.Day;
現在の日をアプリケーションの内容と比較します["for_day"]
if(current_day == Application["for_day"]){ // same day from last counter reset
// do nothing
}
それらが等しい場合は何もしません。
else if(current_day > Application["for_day"]){ // new day
1. Reset the daily counter in the database to zero
2. Application["for_day"] = current_day;
3. Update the column for_day in the database to current_day
}
このチェックは、自分のWebサイトにアクセスするユーザーごとに行います。これは1日に1回だけ実行し、先日サイトにアクセスした最初のユーザーのデータベースの日次カウンターを0にリセットする必要があります。最初のユーザーが2日後に来たとしても、それに応じてデータが更新され、すべてのユーザーに当日の新しいカウンターが表示されるため、問題なく動作するはずです。
これはcronjobよりも望ましいと思い、application_Startでのみ、最大で1日に1回だけデータベースにクエリを実行します。ロードバランサーの複数のサーバーでWebアプリを起動すると、ソリューションが機能するはずです。データベースはリモートロケーションにあり、各サーバーに抵抗しないため、これは正常に機能するはずです。
このテクニックについて、期待どおりに機能するかどうか、改善する方法があるかどうかについて、ご意見をお聞かせください。私は外部のcronjobサービス/サーバーに依存していないので、これを好みます。すべてが私のアプリケーションにあります。
私はASP.NETとC#でアプリケーションを開発しており、Windows 2008サーバーにインストールし、ロードバランサー(おそらくAmazon AWS ElasticBeans)の背後で実行します。
ありがとう