2011-08-24 41 views
2

我正在考虑将所有站点/用户操作记录到数据库,并希望获得关于此的一些输入。此日志将用于各种事情,包括节流(登录尝试等),客户服务,一般维护等。将操作记录到数据库 - 模式和建议 - 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 

这会是一个很好的方法吗?

+0

为什么选择InnoDB进行日志记录?通常MYISAM用于记录。 – Dor

+0

@Dor为什么?不要没有理由地放弃这块金块。 :-)通过MyISAM降低资源利用率?表级锁定(MyISAM)会成为一个问题吗?等等。谢谢。 – Wiseguy

+0

@Wiseguy:我发布了一个解释这个和更多的答案... – Dor

回答

2

user_id bigint(20),什么!你是Facebook的开发者吗? ;-)不会有4字节的int足够吗? See MySql Numeric Types

我将AUTO_INCREMENT放在logs_actions上,因为您需要将应用程序编码为特定值,所以您需要在插入时控制此值。

另外,如果你想减少一点开销,考虑放弃FK(至少级联)。

0

我认为MyIsam或Archive表更适合于日志记录。因为你不需要事务或并发访问表。如果不打算从表中删除数据MyIsam将允许您进行并发插入,这样可以避免阻塞整个表。

使用外键会减慢插入到表中,所以如果您决定使用innodb尝试避免这种情况。

关于表方案:

用于存储IP,你应该选择的int类型,并使用INET_ATON功能。见http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton

1

  • 用于记录使用MyISAM表,它们使并发的SELECT & INSERT查询 - 表级锁不会干涉这些类型的查询。
  • 在MySQL中,UTF-8列每个字符需要3个字节,因此一列将能够保存128个UTF-8字符,实际上能够存储128 * 3 = 384个字节,这个字节大于256,因此这些列将有2个字节来计算列中字符的数量,而不是1个字节(这可能是您所期望的)。
  • ip列使用INT列类型 - 将节省大量存储空间并可显着缩短检索时间。
  • 尝试批量文本列action & value成一列(可能命名为queryString这表示用户在页面动作&值)
  • 有这个列顺序的索引:

    KEY `action` (`action`,`user_id`) 
    

    不好应该避免,因为文本列先出现。

  • 我建议学习如何优化模式&查询为MySQL与这个伟大的书:

    高性能的MySQL:Optimi-矩阵特殊积,备份,复制和 更多,第二版,巴伦·施瓦茨等人。版权所有2008奥赖利 媒体公司,9780596101718.

相关问题