現在、個人でWebサービスを開発しています。
ユーザーの行動(ログインやアクティビティ)をログに出力したいと考えています。
そこで質問です。
このようなログはファイルに保存するべきなのでしょうか?それともDBに保存するべきなのでしょうか?
個人なので定番といいますか、ベストプラクティスがわかりません。
現状はJavaのLogger.getLoggerを使ってロガーを取得し、ファイルにログをためていますがどうなのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ベストアンサー
用途によります。
保存するアクティビティを頻繁に、もしくはリアルタイムに利用するのであれば発生した時点でDBに保存するのがいいでしょうし、そうで無いのであればファイルに追記しておいて必要な時に整理した方がコストの節約になります。
用途によってはキーバリューデータベースに投げ込んでおくのも悪く無い気がします。
もっとクリティカルな用途、例えば業務システムでの監査に使う様な用途であれば、改竄検知が出来る・冗長性が確保されているような方法で保存する必要があります。
ということで、想定している使い方を出来るだけ詳細にして、それに許されるコストも明確にしてみるとそれに合わせた設計が出来るかと思いますよ。
投稿2016/05/18 09:26
総合スコア18728
0
私の意見としては、ログをDBに保存するのはあまりおすすめはしません。
というのも、何らかの行動がある度にUPDATE, INSERTのSQLを発行していると、大量のSQLが発生しDBトラブルを誘発しかねないからです。
(昔、中規模のWebサービスの開発に携わっていた時に、それが原因でDBのレプリケーションが追いつかず、障害を起こした事があります)
ただ、アクションや目的が明確な場合はDBに保存する場合もあります。
例:会員テーブルに「最終ログイン日時」のカラムを設け、実際に会員がログインをした時に「最終ログイン日時」を更新する。
この「最終ログイン日時」は、管理画面の会員詳細で確認できるようにするために、DBに保存している。
勿論、使用用途やログの発生頻度にもよりますので、よく吟味されることをおすすめします。
投稿2016/05/18 09:52
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
使用用途によるのでは?
例えば、一ヶ月に一回ログを取り出し、整理する必要があれば、ログファイルにして一ヶ月ごとにローテーションさせたほうがイイでしょうし、全体を検索することが多いようであれば、DBに突っ込んでおいたほうが良いと思うので。
ログの使い方を記載すると、もっと良いアドバイスが来ると思います。
投稿2016/05/18 09:24
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ログの種類、要求要件によります。
管理画面から参照するようなログの場合は、DB上で保管したほうが良いでしょう。
そうでないなら、ファイルでいいと思います。
後で何か検索などをする可能性があるのなら、とりあえずDBのほうがいいかもしれません。
確かに、ログは多量のレコードが挿入されますのでパフォーマンスやデータ容量の影響が出てきてしまいますが、適切に設定、設計(古いログは定期的に削除したりアーガイブ化する。ログテーブルはむやみにインデックスを張らないなど)すれば大丈夫かと思います。
投稿2016/05/24 05:06
総合スコア1939
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ユーザーの行動(ログインやアクティビティ)をログに出力したいと考えています。
そのログをどう使うか想像してみてください。
例えばAWSヘビーユーザーである東急ハンズでは、レジの売上げデータをKinesisやLambda、SQSに突っ込んで動的に解析しているようです。
そこまででは無いにしろ、今日のログインユーザーを瞬時にだすとか、
データマイニングのようなことをするのであればSQLiteやキーバリュー型のデータベースを採用する価値はありそうですね。
レコード数が多くなると目に見えてInsert時のパフォーマンスは落ちますし、
昨今のWebサーバーのストレージは低容量で高速なSSDが主流ですので、何も考えず書き出し続けるとサーバーの容量がいっぱいになるリスクもあります。
手作業の運用はエンジニアの時間を奪う癌ですので、Cronを仕込んで古いファイルを消去する等、何かしらの対策をとる必要があります。
投稿2016/05/20 02:08
総合スコア21203
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。