使用PHP5和最新版本的MySQL,我希望能够跟踪商家信息的展示次数和点击次数。我的问题是,如果我自己这样做,那么存储它的最佳方法是什么,以便我可以运行报告?在我有一个具有列表ID,用户IP地址的表之前,如果是点击或印象,以及它被跟踪的日期。然而,数据库本身接近2GB的数据,而且速度非常慢,部分问题在于它是一个非常简单的脚本,其中包括来自任何人的印象和点击,包括搜索引擎以及访问列表页面的任何人或任何东西。
是否有一个api或文件有一个更新日期列表,可以检测查看的人是否是一个真正的人而不是蜘蛛所以我不填充数据库中不需要的统计数据?只是寻找建议,我是否只有一个原始数据库只能获得点击,然后在晚上为每个IP的每个列表计算一天的cron作业并将累积统计数据存储在另一个表中?
它应该是什么类型的数据库? InnoDB的?的MyISAM?
答案 0 :(得分:1)
我认为你永远不会创造比已经存在更好的东西。我会使用谷歌的分析。如果您想在站点的管理员端使用它(对于可能的客户端运行),您可以随时使用googles api并根据需要提取数据。这是我看的地方.. http://code.google.com/intl/en-US/apis/analytics/
干杯 - 杰里米答案 1 :(得分:0)
99.999%的时间,你会写入数据库。
因此,对于这种工作,每日分区的MySQL表将完成这项工作。
每天写入同一分区,并在昨天的分区上运行ANALYZE PARTITION
。
答案 2 :(得分:0)
如果您需要区分真实用户和机器人,这里有一个简单的解决方案:使用javascript将报告发送到服务器。
假设您有一个链接,并且您想要跟踪它何时被点击。然后添加一个onclick处理程序,它将向服务器发送一个不错的报告。这是一个例子:
<a href="/somepage" onclick="track('click', this.href); return true;">Some page</a>
跟踪功能看起来像这样:
function track(action, data) {
var Img = new Image();
Img.src = '/track.php?action=' + action + '&data=' + data;
}
因此,在这种情况下,当用户点击链接时,有关此次点击的信息将通过此javascript代码发送到服务器。机器人无法运行javascript,因此不会被计算在内。但是有一个缺点,如果用户在浏览器中禁用了javascript,则跟踪脚本将不会计算此类用户。显然,您需要实现track.php脚本才能存储数据。
关于你的MySQL问题,我选择了MyIsam,因为它似乎更容忍大量的intserts。另外,你可以查看INSERT DELAYED语句,你对夜间cron工作的想法对我来说似乎是合理的。您也可以按天,周或月分割统计信息表。