2011-07-14 101 views
0

我想以一种快速的方式将关于请求的信息存储到我的网站,这不会给我的数据库带来额外的压力。我们的目标是使用这些信息来防止滥用和收集用户如何与网站互动(ip,GET/POST,url/action,timestamp)的信息。批量保存到数据库的大批量日志记录?

我正在保存每个页面请求到数据库的新行。但是,当服务器也已经将相同的信息记录到nginx日志文件时,这会浪费额外的数据库调用资源。

我想知道我能做些什么来更好地处理这个问题,我有两个想法,我想知道是否有更好的方法。

  1. CRON作业每天解析访问日志并保存为批量事务到数据库。
  2. RAM缓存(redis/memcached)存储关于请求的数据,然后CRON保存到数据库。

但是,我不知道如何使用键值缓存以我可以检索所有记录并将它们插入数据库的方式存储数据。

我也不知道如何解析访问日志的方式,我不会重新读取条目。

如何以有效的方式记录访问尝试?

回答

1
  1. 使用,如果你使用MySQL延迟插入(其他引擎不需要这个)
  2. 谨防指标进行写操作昂贵
  3. 旋转表每分钟/小时/天
  4. 注意过度规范化和外键

一种常见模式是使用简单的表进行普通写入,并将日志每分钟/小时移动到一组主表中。主集可以高度标准化并编制索引,并且可以实现简单的非标准化表(以节省空间)。

另一种模式是有一个简单的大表并每分钟/小时运行一次汇总查询。简单的表可以按日期进行索引(请记住使用本机类型)。

最后的技巧,使架构和脚本幂等(如果你运行多个数据仍然有效)。有点闪烁和简单重新运行某个特定窗口的分钟/小时/天可以快速修复所有内容,而不是大规模重建。