2017-04-07 9 views
1

私はサーバーに処理するファイルをアップロードするユーザーがいます。内容はすべての目的と目的のためにImportedDataと呼ばれるSQLテーブルに読み込まれます。その後、ユーザはそれらを操作し、処理のためにデータを提出したい場合には、上流のシステム(ここでは重要ではない)にデータを提出し、次にそのデータを前記テーブルから除去する。ユーザーが終了したらテーブルをクリアするにはどうしたらいいですか?

しかし、ユーザーがインポートを行い、何らかの理由でページから移動し、ブラウザを閉じてその日の帰宅を決める場合があります。インパクトは行がImportedDataに残ることです。

私の最初の考えは、エージェントジョブを実行して1日より古い行を削除することです。午前中にユーザーがデータを処理できるようにすることはまずありません。

しかし、「より良い」方法がありますか?

アプリケーションは、MVC ASP.Net Razorフロントエンド、バックエンドのすべてのC#、Entity Frameworkなどを使用して構築されています。インポートに固有のImportedDataからデータを削除するためにできることは何でもありますその正確なインポートセッションのためのユニークなGUID)ので、ユーザーが任意の種類の不正なログアウトを行うと、そのインポートに固有のデータは削除されますか?

+0

例を使って説明すると、プロセスの各ステップが大いに役立ちます – TheGameiswar

+0

バックエンドによって読み取られているので、内容をDBに書き込んでいますか? – lbrahim

答えて

0

行を直接削除しないことをお勧めします。ストアドプロシージャのジョブをスケジュールし、古いデータを一時テーブルにロードし、ストアドプロシージャが次に実行されるまでそのデータを保持することができます。

ロジックは次のようになります。

Create procedure Name 
AS 
BEGIN 
(
IF EXISTS(SELECT * FROM SYS.TABLES WHERE NAME = N'...') 
BEGIN 
DROP TABLE ... 
END 
CREATE TABLE TABLE_NAME 
... 
INSERT INTO TABLE_NAME 
SELECT .. 
FROM YOUR_TABLE 
) 
END 

ただ、データがいくつかの不本意物事が起こる包み保たれていることを確認してください。

0

これはあなたが潜在的に行うことのできることの1つです:問題のページに少数のjavascriptを追加して、定期的で合理的な間隔でサーバーにajax呼び出しを行います。ユーザのブラウザがそのレコードをまだ見ているサーバ。対応するデータベースレコードのLastClientHeartbeatタイムスタンプを更新して、それがまだ表示されていることを示すことができます。その後、定期的にスケジュールされたクリーンアップジョブでは、LastClientHeartbeatタイムスタンプが比較的最近の(過去数分以内)ファイルの削除をスキップするようにプログラムすることができます。これは、ユーザーがまだそのページをブラウザで開いていることを示します。

これは非常に洗練された解決策ではありませんが、実装が非常に簡単で、ユーザーが作業を完了するために甘い時間を取っていたファイルを誤って削除しないようにします。

関連する問題