web-dev-qa-db-ja.com

ファイルまたはデータベーステーブルにログを記録しますか?

ユーザー、ユーザーアカウント、ユーザーライセンス、ライセンス価格、請求書など、さまざまなデータにMS SQLを使用するWebアプリケーションを開発しています。

ユーザーのシステムのリアルタイム使用状況をログに記録して、毎月の請求に使用する必要があります。ユーザーが特定のページ/ URLを取得するたびにログに記録し、取得したページ数に基づいて月末にユーザーに請求します。

  • これらのログイベントをMS SQLデータベースのテーブルに書き込む必要がありますか?

  • これらのログイベントをSQL以外の追加専用ログファイルに書き込む必要がありますか?

  • これらのログイベントをユーザーごとに異なるログファイルに書き込む必要がありますか?

これは特に大容量のWebサイトではありません。たとえば、最大10,000人のユーザーが1日あたり平均5つのログ可能なイベントを実行=> 50,000イベント/日= 30イベント/分= 18,000,000イベント/年。

どちらのオプションも実行可能であり、明確な利点があるかどうかはわかりません。

請求可能なイベントに関連付けられたデータは単純です。例:

  • ユーザーID(SQLのユーザーテーブルとの外部キー関係)
  • 日時
  • 請求可能なページのURL

この質問に対する私自身の回答は次のとおりです。

  • ログをデータベーステーブルに書き込むことのいくつかの利点:

    • 関係の完全性:例ログに記録されたイベントは、有効なユーザーIDに関連付けられています(ユーザーIDをテーブル間の外部キーとして定義することにより)
    • 請求のために読みやすい:例SELECT COUNT GROUP BYユーザーあたりのログイベント数のカウントを取得する
  • ログファイルに書き込むことのいくつかの利点:

    • パフォーマンスの向上:SQLの使用頻度が低くなります。ユーザーのログインイベントのみ、主に読み取りのみに使用
    • 管理の簡素化:古いデータのアーカイブが容易になります。年末に、データベースから削除/アーカイブするのではなく、古いログファイルを移動する

私の答えが間違っている場合はお知らせください。または何かの重要性を誇張します。またはいくつかの重要な考慮事項を忘れています。

または、私の答えと異なる場合は、答えを教えてください。

12
ChrisW

この情報を請求の目的で使用しているので、簡単にクエリ、集約、レポート、および他のデータへの結合が可能なデータベースで情報を必要としない理由はわかりません。

また、個別のログファイルをまとめるよりも、ログ情報を含む単一のデータベーステーブルを維持する方がはるかに簡単だと思います。サーバーの負荷に関する懸念と同じです。データをフラットファイルに保持するよりも、これを処理する方法がはるかに優れています。

ところで、3つ目のオプションは、両方を実行することです。ほとんどのニーズにデータベースを使用しますが、監査目的でログファイルを用意します。

13
GrandmasterB