【发布时间】:2012-05-18 02:53:24
【问题描述】:
我有一个从一个代码库运行多个网站的 Web 应用程序。我使用包含在应用程序上运行的站点和域的表来设置它。该应用程序会跟踪访问者,以便我们了解每个站点以及该应用程序在全球范围内获得了多少流量。
我遇到的问题是访问者跟踪非常慢,因为那里有 250 万条记录。运行查询以获取本月的访问者数量需要花费数分钟,这使得我们的数据无法访问。
系统直接从包含所有其他文件的基本 php 文件记录跟踪。当它没有找到现有的识别 cookie 时,它会在访问者表中创建一条记录。当它创建记录时,它会为用户分配一个 cookie,这样当他们回来时,他们只创建单个访问者记录。该访问者记录存储了他们查看了多少页以及他们进入了哪个页面(入口页面)以及他们查看的最后一页(退出页面)。
我们获得了相当多的流量,我想通过加快结果的速度来提供每月访问者的报告。
我之前尝试过为 site_id 和日期添加索引,但它似乎对加快速度没有多大帮助...
我们决定自己跟踪分析,而不是使用像谷歌分析这样的工具,这样我们以后就可以用它创建一些更有意义的数据。例如,当正在查看网站的用户提交联系表单并成为 CRM 中的联系人时,我们希望查看该联系人的历史记录,以了解他们在寻求支持之前查看了哪些页面等。
有什么建议吗?表架构如下。提前非常感谢,我一直在努力寻找解决方案。
CREATE TABLE `analytics_track_visits` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT
,`site_id` int(4) unsigned default NULL
,`inc` bigint unsigned default NULL
,`referer` text NOT NULL
,`refer_host` text NOT NULL
,`user_agent` text NOT NULL
,`browser` text NOT NULL
,`os` text NOT NULL
,`search_term` text NOT NULL
,`entry_page` int(4) unsigned default NULL
,`entry_page_url` text default NULL
,`exit_page` int(4) unsigned default NULL
,`exit_page_url` text default NULL
,`created` datetime NOT NULL
,`created_ip` varchar(200) NOT NULL default ''
,`created_user_id` int(4) unsigned default NULL
,`modified` datetime NOT NULL default '0000-00-00'
,`modified_user_id` int(4) unsigned default NULL
,PRIMARY KEY(`id`)
,CONSTRAINT `analytics_track_visits__site` FOREIGN KEY (`site_id`)
REFERENCES `site` (`id`) ON DELETE CASCADE
,CONSTRAINT `analytics_track_visits__entry_page` FOREIGN KEY (`entry_page`)
REFERENCES `page` (`id`) ON DELETE CASCADE
,CONSTRAINT `analytics_track_visits__exit_page` FOREIGN KEY (`exit_page`)
REFERENCES `page` (`id`) ON DELETE CASCADE
) ENGINE=INNODB;
inc 存储该特定访问者查看的页面数。 entry_page 是我们的 cms 页表的外键(与 exit_page 相同)。 browser 和 os 保存从 user_agent 解释的值。 search_term 存储用于查找入口页面的任何关键字。 site_id 与包含具有域名名称的站点设置列表的表相关。
我怀疑部分问题在于该表从未真正中断过,因此当我们运行报告时,会同时插入和更新该表的活动查询。
【问题讨论】:
-
您可以通过分析您的 Web 服务器的日志文件来获取所有这些数据......为什么要添加所有这些开销?
-
甚至比日志文件更好,使用谷歌分析。它有一个 API,因此您可以构建您可能需要的任何自定义报告。
-
数据比我们想从记录中得到的要深入得多。 Web 应用程序本身有很多不同的功能领域,最终我们想做一些事情,例如:用户点击实时聊天,然后我们可以立即显示用户的最后 20 个页面和操作。或跟踪以查看特定 CRM 联系人在网站上的查看位置。从分析服务器日志中很难发现产品、页面 ID、聊天会话等关系数据。我已经考虑过一般网站统计数据。
标签: php mysql scalability analytics