【发布时间】:2011-11-03 02:23:03
【问题描述】:
我正在考虑将所有站点/用户操作记录到数据库中,并希望对此有所了解。此日志将用于各种事情,包括限制(登录尝试等)、客户服务、一般维护等。
这样好吗?我想这取决于流量,但这会导致连续插入出现任何问题吗? (我正在考虑将 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 进行日志记录?通常使用 MISAM 进行日志记录。
-
@Dor 为什么?不要在没有正当理由的情况下放弃那块金块。 :-) 使用 MyISAM 降低资源利用率?表级锁定 (MyISAM) 会成为问题吗?等谢谢。
-
@Wiseguy:我已经发布了一个答案来解释这一点以及更多......
-
你解决了吗?如果没有,您应该添加评论或使用更多信息编辑您的问题。
标签: mysql database logging schema database-schema