0

我的网络服务结构如下:

  1. 接收请求
  2. 解析和验证输入
  3. 做实际的网络服务
  4. 验证输出

我主要将日志记录用于调试目的,如果出现问题,我想知道请求是什么,以便我希望重现它(即发送完全相同的请求)。

目前我正在登录到 MySQL 数据库表。在 1. 之后创建一条记录,在 2. 和 3. 之后使用更多信息更新该记录,并在 4. 之后清理(修剪成功请求的日志)。

我希望日志记录尽可能快速和轻松。这里的任何加速都将大大提高整体性能(每个请求的往返)。

我正在考虑使用INSERT DELAYED,但我不能这样做,因为我需要LAST_INSERT_ID更新并稍后删除日志记录,或者至少记录请求的状态(即成功或错误),以便我知道何时修剪。

我可以自己生成一个唯一的 id(或者至少是一个“足够独特”的 id),但即使那样我也不知道DELAYED语句的顺序,我最终可能会尝试更新或删除一条尚不存在的记录。而且由于DELAYED也消除了使用的能力,NUM_AFFECTED_ROWS我无法检查查询是否受到影响。

有什么建议么?

4

2 回答 2

0

当您说修剪我假设您删除记录是否成功时?如果是这样,我认为如果您有一个 Java 对象来存储信息而不是数据库,那么当过程展开时,如果发生异常,您将对象中的信息一次全部记录到数据库中,这对您来说会更好。

如果你想更进一步,我做了一些与此类似的事情,我有一个服务,它将审计数据的日志记录排队并以稳定的速度插入信息,所以如果服务受到打击,不会用日志记录语句阻塞数据库,但是,如果您唯一的日志记录错误可能会矫枉过正。

于 2012-05-25T12:35:06.250 回答
0

我想我可以只做一个REPLACE DELAYED并在其他时间进行修剪。(带DELETE DELAYED)。

于 2012-05-26T12:02:10.953 回答