0

私のWebサービスは次のように構成されています。

  1. リクエストを受け取る
  2. 入力を解析して検証する
  3. 実際のWebサービスを実行する
  4. 出力を検証する

私は主にデバッグ目的でログを使用しています。何か問題が発生した場合は、リクエストが何であるかを知りたいので、それを再現したいと思います(つまり、まったく同じリクエストを送信します)。

現在、MySQLデータベーステーブルにログを記録しています。1.の後、レコードが作成され、2。および3.の後に詳細情報で更新され、4。の後にクリーンアップされます(成功した要求のログは整理されます)。

ロギングを可能な限り迅速かつ無痛にしたいと思います。ここで速度を上げると、全体的なパフォーマンスが大幅に向上します(各リクエストのラウンドトリップ)。

使用することを考えていましたが、ログレコードを更新して後で削除するか、少なくともリクエストのステータス(成功またはエラー)を記録して、いつ削除するかを知るINSERT DELAYED必要があるため、それを実行できません。LAST_INSERT_ID

自分で一意のID(または少なくとも「十分に一意」のID)を生成することはできますが、それでもDELAYEDステートメントの順序がわからず、まだ存在しないレコードを更新または削除しようとする可能性があります。また、DELAYED使用する機能が削除NUM_AFFECTED_ROWSされるため、クエリが実行されているかどうかを確認できません。

助言がありますか?

4

2 に答える 2

0

剪定されたと言うとき、それが成功した場合、レコードを削除すると仮定しますか? もしそうなら、プロセスが展開するときにデータベースの代わりに情報を格納するJavaオブジェクトがあれば、例外が発生した場合は、オブジェクト内の情報を一度にデータベースに記録する方が良いと思います。

さらに詳しく知りたい場合は、これと同様のことを行いました。監査データのログをキューに入れ、一定のペースで情報を挿入するサービスがあるので、サービスが打撃を受けている場合でもログ ステートメントで DB を詰まらせませんでした。しかし、エラーをログに記録するだけでは、おそらくやり過ぎです。

于 2012-05-25T12:35:06.250 に答える
0

私はおそらくただやってREPLACE DELAYED、剪定をもう一度行うことができると考えました。(付きDELETE DELAYED)。

于 2012-05-26T12:02:10.953 に答える