我的网络服务结构如下:
- 接收请求
- 解析和验证输入
- 做实际的网络服务
- 验证输出
我主要使用日志记录进行调试,如果出现问题,我想知道请求是什么,以便我希望重现它(即发送完全相同的请求)。
目前我正在记录到 MySQL 数据库表。1.将创建一个记录,该记录在 2 之后更新为更多信息。和 3.并在 4 点后清理。(修剪成功请求的日志)。
我希望日志记录尽可能快速和轻松。此处的任何加速都将大大提高整体性能(每个请求的往返)。
我正在考虑使用INSERT DELAYED
但我不能这样做,因为我需要LAST_INSERT_ID
来更新并稍后删除日志记录,或者至少记录请求的状态(即成功或错误),以便我知道何时修剪。
我可以自己生成一个唯一的 id(或者至少是一个"足够唯一"的 id),但即便如此,我也不会知道DELAYED
语句的顺序,我最终可能会尝试更新或删除尚不存在的记录。而且由于DELAYED
还删除了使用NUM_AFFECTED_ROWS
的功能,因此我无法检查查询是否受到影响。
有什么建议吗?
当你说修剪我假设它是否成功时,你删除了记录?如果是这样,我认为如果您有一个 Java 对象在进程展开时存储信息而不是数据库,那么如果发生异常,您将对象中的信息一次性记录到数据库中,这对您来说会更好。
如果你想更进一步,我做了类似的事情,我有一个服务,它对审计数据的日志记录进行排队并以稳定的速度插入信息,所以如果服务被锤击,就不会用日志记录语句堵塞数据库,但如果你唯一的日志记录错误可能是矫枉过正。
我可能只需要做一个REPLACE DELAYED
,然后在其他时间进行修剪。(带DELETE DELAYED
)。