5

free demoアプリケーションでエンドユーザーに何らかのサービスを提供する必要があります。などの無料デモ30 mins, 1 hours, 5 hours( predefined time) 新規ユーザーは 1 回限り。

ユーザーはその時間を部分的に消費することもできます。30 分間の無料デモのように、今日は 10 分間、明日は 15 分間、翌日は残りの時間を使用できます。ユーザーが 30 分間の無料デモを選択し、ログインしてサービスを使用すると、. 開始時間と終了時間でユーザーを 30 分間制限できます。開始時間と終了時間の合計が 30 分に等しい場合、支払いページに送信できます。

現在、ユーザーがブラウザを閉じたり、インターネットが機能しなくなったり、アクティブなセッション中に最後に何かが発生した場合など、いくつかの不確実な条件で問題が発生します。これでは、終了時間がないため、消費された時間を計算できません。

シナリオは次のようになります (30 分間のデモ)。

UserID  StartTime           EndTime             Consumed(mins)
10      09-04-2015 10:00    09-04-2015 10:10        10
10      10-04-2015 05:00    10-04-2015 05:04        4
10      11-04-2015 07:46    11-04-2015 07:56        10
10      11-04-2015 10:00    // Browser closed or any uncertain condition
10      11-04-2015 11:00    // How to restrict user to use actual 30 mins because I do not have EndTime in above row to calculate Consumed mins.

同時に 100,000 人以上のユーザーがサービスを利用する可能性があるため、これに対する効率的なソリューションを見つけています。

私の理解では、別のジョブを作成してユーザーの LastActiviteTime を確認し、それに基づいてデータベースで Consumed(mins) を更新できます。そのジョブは毎分実行され、一方で各セッション ユーザーのブラウザはLastActiveTimeデータベース内を更新します。

これで問題は解決しますが、1 分間に膨大な数のデータベース リクエストが発生するため、アプリケーションのパフォーマンスについてはよくわかりません。

4

3 に答える 3

0

ユーザーがサービスと対話している場合は、これらの対話インスタンスを最後に使用した時間として使用し、終了時間がない時間を特定する必要がある場合は、最後の対話時間を時間として使用してセッションの終了を特定します。

最も簡単なのは、lastInteractionTime として示したテーブルに列をもう 1 つ追加することです。終了時間がない場合は、その lastInteractionTime を使用して消費時間を計算します。

于 2015-04-09T15:39:37.880 に答える
0

パフォーマンス テストを実施して、予想される最大負荷を少し上回るデータベースへの影響を評価することをお勧めします。その後、結果に応じて、RavenDB などの NoSQL ソリューションを使用して使用状況データを保持することを検討してください。NoSQL は驚異的に機能する可能性があり、このような問題に最適です。

もちろん、Rolwin C が既に提案したように、スケジュールされたクライアント側スクリプトと AJAX を使用してこれを行うことができます。悪意のあるユーザーにはいくつかの障害がありますが、このアプローチには常に一定レベルのリスクが伴うことに注意してください。したがって、データベースサーバーの負担を大幅に軽減できるため、このリスクが許容できるかどうかを確認してください。

于 2015-04-09T09:32:48.923 に答える