MySQL跟踪系统
我必须实现一个由MySQL数据库备份的跟踪系统。系统将跟踪许多应用程序,每个应用程序至少跟踪5个事件(例如,有多少用户点击了链接x,有多少用户访问过网页y)。一些应用程序将拥有数百万用户,因此几千次更新/秒并不是一个遥不可及的假设。 系统的另一个组件必须计算一些应该每分钟更新一次的统计信息。系统还应记录这些统计值的过去值。MySQL跟踪系统
的方法我的一个朋友建议是登录日志表的每一个事件,并有运行每分钟,并计算所需的信息并更新统计数据表中的cron作业。
这听起来对我来说很合理。有更好的选择吗?
谢谢。
我已经记录到一个与它嘎吱作响的cron日志表。
我通常在我的应用程序中使用innodb
表,但对于日志表,我将它作为myisam
并使用insert DELAYED . . .
查询。
MyISAM不提供的InnoDB所有的好东西,但我相信它是(因为这个原因)稍快。
你担心的主要问题是数据库锁定,当你的cron运行,但使用“插入延迟”周围的问题得到大部分。
我真的建议你使用一个已经存在的日志分析器来分析你的web服务器已经存在的日志。一个例子是webalizer。我认为更好的是外部系统,如google analytics。这样做会更好,因为它将继续与中间系统(如负载平衡器和缓存)一起工作。
问题是客户端应用程序在不同的服务器上运行,所以我无法访问日志文件。 – Alex 2010-01-07 08:54:06
谷歌分析通过向您想要跟踪的每个页面添加一些代码来工作。非常简单,只需放入标题即可。 – 2010-01-07 09:48:17
如果你的命中率太高,甚至插入到myisam表中去处理,你可能想要保持内存中最近的命中(memcache可以派上用场,或者你可以写一个自定义的守护进程),并处理命中内存定期存入数据库统计表(聚合)。
从你的经验,这些效果会更好/更快:使用(使用延迟插入时AFAIK MySQL的队列在内存中不成文的行)的memcached或内存缓存或有mysql的的另一种形式做通过INSERT类似的东西延误吗? – Alex 2010-01-07 09:04:12
这两个听起来像有效的选项。为了获得最佳性能,关于使用已有的日志分析器的答案有一个好处。我认为你应该考虑方便而不是过度优化。我发现插入延迟到MySQL工作正常我的网站(每天登录到一百万插入),它是非常容易实现。 – Gattster 2010-01-07 09:11:13
感谢您的输入。 – Alex 2010-01-07 09:40:15