2

私は現在Webアプリケーションを開発しており、クライアントはサイトでのユーザーアクティビティに関するデータを保存したいと考えています。これは、GoogleAnalyticsが提供できる範囲外です。

私は現在、ウェブサイトのコア機能に関連するテーブルの数が最小限である、素晴らしくシンプルなデータベース構造を持っています。

ユーザーアクティビティを記録するためにデータベーススキーマに多くのテーブルを追加することに少し憤慨しています。また、サイトでのユーザーアクティビティを記録するサービスを追加することで、コードベースを混乱させます。

彼らが録音したいものの例は次のとおりです。

  • 既存ユーザーのログイン
  • ユーザーによる明示的なログアウト
  • 管理者によるパスワードのリセット
  • ユーザーによるパスワードのリセット/変更
  • ユーザーアカウントの変更(例:管理者権限の付与/削除、またはプロファイルがある場合はプロファイルの変更)

彼らはまた記録したいかもしれません

  • 検索フォームに入力された検索パラメータ
  • 任意の(コンテンツ)ページへのアクセス
  • 任意の(コンテンツ)リンクの選択
  • 言語選択

だから私の質問は:

  • この機能をデータベースとプロジェクトに追加するだけでよいですか?
  • これを可能な限り分離する必要があります。おそらく、この分析データを別のデータベースに保存するか、別のスキーマに保存して、分析サービス用の別のプロジェクトを作成します。
  • もうオプションはありますか?

このデータを記録すると、コードベースとデータベースが大きくなり、利益がほとんどなくなると思います…。

4

2 に答える 2

1

この機能をプロジェクトに追加します。ただし、データベースには入れません。代わりに、ログとして保存してください。

このデータベースへのクエリはシステムのパフォーマンスに影響を与えるため、これをデータベース (特に運用データベース) 内に配置するという考えは決して好きではありません。

ただし、このログを読み取り、そこから必要なデータを生成するバッチ ジョブも作成する必要があります。

ログが非常に大きくなる場合は、 Map Reduceアプローチに進む必要があります。Hadoop、Hive、または類似の製品を使用してください。

于 2013-02-06T03:21:50.700 に答える
0

少なくとも、アクティビティを記録するための一般的なテーブルを作成することを検討します。何かのようなもの:


event_id int,
event_name nvarchar(100),
event_date smalldatetime,
user_id int,
source_page nvarchar(100),
additional_info nvarchar(5000)

私が想像するほとんどのユースケースをカバーすることができます。シリアル化された JSON を書き込むことができる大きなテキスト フィールドを最後にスローするというアイデアです。これは、構造化されたテキストを格納できる単なるブロブです。

同様に、スキーマレス データを格納する別のデータベースを作成することもできます。これにより、書き込みが容易になり、後でログアウトをリッピングする必要が生じた場合でも、既存のデータベースを変更する必要はありません。

ロギング呼び出しを入れるためのアスペクト指向プログラミングもチェックしてください。これにより、ロギングとイベントを許可しながら、メソッドを非常にクリーンに保つことができます。Java の場合はおそらく Aspect J ( http://eclipse.org/aspectj/ ) になり、.NET の場合は PostSharp ( http://www.sharpcrafters.com/aop.net ) のようなものになります。

とにかく、あなたが言ったように、簡単に削除できる小さなフットプリントで何かを実装します.

于 2013-02-05T17:35:33.230 に答える