3

必要に応じて元に戻すことができるように、アプリでユーザーが行ったことのログを保持したい場合があります。

そのようなログをファイルまたはデータベースに保存するのが最善ですか?セットアップする別のテーブルであることを除いて、私は長所と短所が何であるかについて完全に途方に暮れています。

調べて学ぶ必要があることに気付いていない3番目(または4番目など)のオプションはありますか?

4

5 に答える 5

9

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

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

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

于 2008-08-30T14:39:30.363 に答える
5

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

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

于 2008-08-30T13:49:27.973 に答える
3

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

于 2008-09-03T17:36:24.367 に答える
1

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

于 2008-08-30T13:25:09.980 に答える
1

上記の両方の提案を2番目に追加し、フラットファイルログでのファイルロックは、ユーザーが多い場合に問題を引き起こす可能性があることを追加します。

于 2008-08-30T14:08:39.940 に答える