我正在考虑将所有站点/用户操作记录到数据库,并希望获得关于此的一些输入。此日志将用于各种事情,包括节流(登录尝试等),客户服务,一般维护等。将操作记录到数据库 - 模式和建议 - MySQL
这样好吗?我想这取决于交通量,但这会导致连续插入的问题吗? (我正在考虑将InnoDB用于FK限制)
如果不是,那么您会建议什么样的模式,以便它足够灵活以支持来自已注册用户和匿名用户的各种类型的操作?
我在想是这样的:
CREATE TABLE `logs` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`action` varchar(128) COLLATE utf8_bin NOT NULL,
`user_id` bigint(20) unsigned DEFAULT NULL,
`value` varchar(128) COLLATE utf8_bin DEFAULT NULL,
`ip` varchar(40) COLLATE utf8_bin NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `action` (`action`,`user_id`),
CONSTRAINT `logs_ibfk_1` FOREIGN KEY (`action`) REFERENCES `logs_actions` (`name`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
CREATE TABLE `logs_actions` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`name` varchar(128) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
这会是一个很好的方法吗?
为什么选择InnoDB进行日志记录?通常MYISAM用于记录。 – Dor
@Dor为什么?不要没有理由地放弃这块金块。 :-)通过MyISAM降低资源利用率?表级锁定(MyISAM)会成为一个问题吗?等等。谢谢。 – Wiseguy
@Wiseguy:我发布了一个解释这个和更多的答案... – Dor