質問

場合によっては、必要に応じて元に戻せるように、アプリ内でユーザーが行ったことのログを保存したいと考えています。

このようなログをファイルに保存するのが最善でしょうか、それともデータベースに保存するのが最善でしょうか?別のテーブルをセットアップする必要があることを除いて、長所と短所が何であるかについてはまったくわかりません。

私が気づいていない、調べて学ぶべき 3 番目 (または 4 番目など) のオプションはありますか?

役に立ちましたか?

解決

柔軟なレコードベースのアクセスのためにデータベースを使用し、同時データ アクセスを処理するデータベースの機能を活用することがほぼ確実です。元に戻す必要がある可能性のある情報を追跡する必要がある場合は、特定のトランザクションがいつ誰によって元に戻されたかを示す行を更新できるのと同様に、情報を構造化された形式にすることが利点です。

ファイルに書き込む必要があるのは、非常に高いパフォーマンスが問題となる場合、またはレコードごとに非常に構造化されていないデータや大量のデータがあり、データベースに保存するのが困難な場合のみです。アプリケーションに非常に多くのトランザクションがない限り、データベースの速度が問題になる可能性は低いことに注意してください。また、ファイルを操作している場合は、同時アクセス (読み取り / 書き込み / ロック) を非常に慎重に処理する必要があることに注意してください。これは、対処する必要がない可能性が高いです。

他のヒント

データベースに保存する明確な理由が少なくとも 1 つあります。MySQL (または他のデータベースの同様の構造) で INSERT DELAYED を使用すると、すぐに戻ります。この種のクエリではデータベースからデータが返されず、適用されることも保証されません。

INSERT DELAYED を使用すると、ログが原因でアプリの速度が大幅に低下することはありません。データベースはいつでも自由に INSERT をディスクに書き込むことができるため、多数の挿入を 1 つにバンドルできます。

MySQL の組み込みタイムスタンプ関数 (CURRENT_TIMESTAMP や CUR_DATE() など) の使用には注意する必要があります。これらの関数はクエリが実際に実行されるたびに呼び出されるからです。したがって、データはデータベースではなく、プログラミング言語で常に生成されるようにする必要があります。(この段落は MySQL 固有の可能性があります)

私は大ファンです log4php. 。アクションをログに記録するための標準インターフェイスを提供します。log4jをベースにしています。ライブラリは中央の構成ファイルをロードするため、ログを変更するためにコードを変更する必要はありません。ファイル、syslog、データベースなど、いくつかのログ ターゲットも提供します。

私は単に保守性を高めるためにデータベースを使用します。また、ファイルを複数回編集すると、一部が失われる可能性があります。

上記の両方の提案を支持し、ユーザーが多数いる場合、フラット ファイル ログでのファイル ロックが問題を引き起こす可能性があることを付け加えます。

私の以前のスレッドを見てください DB アプリケーションの監査証跡/変更履歴を残すための良い戦略はありますか? 同じトピックを扱っているようです。

こんな記事を見つけました。 http://www.devshed.com/c/a/PHP/Logging-With-PHP/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top