2012-01-26 4 views
0

私たちの会社では、ユーザーがページにアクセスして何かを保存する(保存したprocを保存して保存する)など、Webアプリケーションでユーザーの履歴をログに記録したいと考えています。 最初の解決策は、任意のストアドプロシージャ(SP)を呼び出し、Insert_Log_TableのSPを呼び出してこのパフォーマンスを低下させる 2番目のスレッドはORMでマルチスレッドを使用し、別のスレッドで "Insert_Log_Table"を呼び出す...ユーザーアクション履歴のベストプラクティスとは何ですか?

いくつかの問題私たちのアプリケーションアーキテクチャーでは、どうすればいいのですか? ユーザがログテーブルに挿入するのを待つ必要がないため、並行性やマルチスレッド化がどうなるのでしょうか?

答えて

1

2番目のソリューションを使用できないのはなぜですか?これは別のスレッドでメソッドを実行するためのケーキです。ロック、競合状態、またはその他のスレッド問題を処理する必要はありません。それは単なる付加ログです。方法が何とか失敗すると(何も失敗を捕らえることができないように)、何も起こりません。

は、このサンプルを参照してください:

Thread t = new Thread(() => 
      { 
       Logger log = new logger(); 
       log.Log("..."); 
      }); 

    t.Start(); 

しかし、サイドノートとして、私はあなたをお勧めします - このためにSQLを使用しないでください。 log4netのような他の堅牢で実績のあるソリューションを使用するか、高速メモリベース(最終的なディスクの永続性を持つ)に戻すNoSQLデータベースRedisのように。

+0

SQLが堅牢で実証されていない理由を説明してください。彼が既にデータベースを持っているなら、彼はそれを使うべきです。彼が慣れ親しんでいないかもしれない別の技術を紹介するのはなぜですか? – ChrisWue

+0

私はSQLが堅牢ではないとは言いませんでした。私はロギングのためのより堅牢なソリューションがあると言いました。 log4netは、トリミング、書式設定、コールスタックの保存、さまざまなオプション(連続、1日1回、イベントログ、ファイルベース、dbベースなど)を使用して永続化するなど、ロギング用の多くの設定オプションを備えたツールです等) –

+0

リプレイありがとう、私のプロジェクトはソースを変更するには大きすぎます、より快適で低コストのsql.after記録履歴を変更するには私はそれをユーザーに表示したいので、ログデータはsqlDatabase.is私の問題を解決する方法はありますか? – vesna

関連する問題