如何正确存储日志?

Jee*_*oon 2 mysql innodb mysql-5.5

(这是对我最后一个问题的跟进)

我在 innodb 中使用 MySQL 5.5。

我的日志表由两列组成。一个用于用户编号,另一个用于由 IP、请求方法、请求正文等组成的字符串。这两列不使用索引。

通常日志的内容在 200 个字母以下。但是,也有特殊情况,内容会超过 5000 字。

我已经想到了三种记录长内容的方法。首先是将内容分成200个字,分几行。其次是将数据类型设置为 TEXT 或 VARCHAR(10000)。三是制作一张新表,仅用于存储长内容。

存储日志的常规方法是什么?

Dav*_*ett 5

我不会使用这些选项中的任何一个:我会正确地拆分日志条目的每个部分,将每个部分放在自己的适当最大长度的列中。这当然是更多的工作,因为如果您将数据作为单个字符串获取,则需要将数据分解以进行插入(它可能还会消耗更多的磁盘空间)但它会大大增加您可以进行的分析之后的日志。

还定义有用的索引。至少在该排序列上的某些内容和/或如果这些日志中有日期+时间,则应该有一个索引来覆盖它。

如果您只是将日志存储为每行文本块,那么将它们推送到数据库中几乎没有意义:只需将它们保存在您可以使用的原始平面文件grep和其他此类工具中。如果您想充分利用数据库的功能,请创建一个优化表以充分利用数据库,而不是仅仅为了最简单的插入便利而优化。

您还可以将查询字符串、表单部分和 cookie(我假设这些是 HTTP(S) 日志)的一致部分分解为它们自己的子表,但与分离基本日志变量不同,这可能会相当大矫枉过正。