2012-07-16 4 views
8

私は自分のWebアプリケーション(php + js + mysql)のユーザーアクティビティログを実装します。ユーザーアクティビティを記録するためのベストプラクティスは何ですか?

Previousely、私はこのappoachを使用しました:ユーザーの

  • は、ユーザーIDを使用してactivityテーブルの行を挿入するすべてのテーブルのトリガを作成
  • ユーザIDを格納するデータベースの一時テーブルを作成ログインその一時テーブルから

私は本当にデータベースに多くのロジックを入れたくないので、私のqiestionは:ベストプラクティスは何ですか?私は記述された方法をとどまらなければならないのですか?

編集

私はthis質問を見てきましたが、私は答えの1で説明した方法を比較する上でintrestedてよ。私は、何かがうまくいかない場合は非難するユーザー知っておく必要があります=)

loggsが実際に変更されているものを見るために変更されたデータと新しいデータが含まれている必要があります:私は、ログを必要としない理由

EDIT2

企業向けのアプリであり、私たちの会社はそれほど大きくないとは思わないでしょう。

主な質問は、私がロギングロジックを置くところです:データベースまたはアプリケーション(PHPバックエンド)レベル?

+0

"ベストプラクティス"を捜す前に、答える必要があることがたくさんあります。なぜあなたはどのようなシステム設定を配備するかなどを決定するので、ログを何に含めるべきか、それらのログに何を含める必要があるのか​​、秒あたりのログを期待するユーザの数、私は本当にユーザーが何かするたびに書き込まれるシンプルなテーブルで間違っているとは思えません。 –

+0

@ N.B。いくつかの質問に答えるための編集を行いました。見てください – k102

答えて

7

いつものように、「それは依存する」。

コアビジネスコンセプトの進化が重要な場合は、データベース設計上のファーストクラスのコンセプトとPHPロジックでなければなりません。ファウラーはこれについて "Analysis patterns"と書いています。 これにより、ビジネスオブジェクトをどのように変更したのかを把握することができます。「誰が日付xのy型からy型にプロジェクトを変更したのですか」、「ユーザーxが製品yを変更する頻度?ドメインモデルをより複雑にします。

このレベルの統合が必要ない場合は、私の好みはPHPのロギング機能を置くことです。トリガーはデータベースの速度を低下させたり、予期しない副作用を引き起こしたり、開発者がスキーマを変更したりするのを忘れてしまう恐ろしい方法です。だから、PHPでは、明示的な "log this"ステートメントを含めることができます。おそらくアスペクト指向のフレームワークを使用しています(ただし、これは決してPHPでJavaを使用したことはありません)。

6

ログには、セッションID $_SESSION['id'](セッションがあると仮定します)とユーザのアクティビティを記録するテーブルlogsが必要です。その後、(ログが高い優先度ではないので)遅れたMySQLのクエリを使用して、それを挿入します。

INSERT DELAYED INTO table (session_id, activity) VALUES ('1234', 'blah'); 

が遅れ挿入の詳細についてはthis linkを参照してください。

つまり、すべてのロジックをPHP側に置いてください。遅延を使ってアクティビティを記録するMySQLテーブルがあります。これは、ログ可能なアクティビティがある場所ならどこでも呼び出すことができるlog_activity($ session_id、$ activity)関数です。

+0

hm ...「遅れました」のおかげで、それは本当に私が尋ねたことではありません。 plzは私の編集を参照してください – k102

+0

はい、それは本当にあなたが尋ねたことであり、それは本当に必要なものです。 – Doa

+0

'すべてのロジックをPHP側に置く'なぜ?なぜdbロジックよりも優れているのですか? – k102

関連する問題