应该使用什么数据库/技术来计算时间范围内的唯一访问者

时间:2010-10-21 20:02:13

标签: database performance google-analytics nosql

我的报告数据库性能有问题(表有数百万条记录,50多个),当我想计算表明访问者唯一性的列上的不同时,让我们说一些哈希键。

例如: 我有这些专栏: hashkey,name,surname,visit_datetime,site,gender等...

我需要在1年的时间跨度内明显,不到5秒:

SELECT COUNT(DISTINCT hashkey) FROM table WHERE visit_datetime BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' 

此查询在短时间范围内会很快,但如果超过一个月,则可能超过30秒。

有没有比关系数据库更好的计算这样的东西的技术?

我想知道谷歌分析使用什么来做他们独立的访客计算。

3 个答案:

答案 0 :(得分:3)

对于报告和分析,您所描述的事物的类型,这些类型的统计信息往往被拉出,汇总并存储在数据仓库或其他东西中。它们以出于性能原因的方式存储,代替为OLTP优化的良好关系存储技术(在线事务处理)。这种预聚合技术称为OLAP(在线分析处理)。

答案 1 :(得分:0)

您可以在另一个表中存储每天唯一身份访问者的数量,每天通过cron函数更新一次。

答案 2 :(得分:0)

Google Analytics使用第一方Cookie,如果您使用LiveHTTPHeaders等记录请求标题,则可以看到

所有GA分析参数都打包在请求网址中,例如

  

UTMA%3D97315849.1774621898.1207701397.1207701397.1207701397.1%3B“> HTTP://www.google-analytics.com/_utm.gif utmwv = 4和; utmn = 769876874&安培; utmhn = example.com&安培; utmcs = ISO -8859-1&安培; utmsr = 1280×1024&安培; utmsc = 32比特及utmul = EN-US&安培; utmje = 1&安培; utmfl = 9.0%20%20r115&安培; utmcn = 1&安培; utmdt = GATC012%20setting%20variables&安培; utmhid = 2059107202&安培; utmr = 0&安培; UTMP = /自动/ GATC012.html utm_source = www.gatc012.org&安培; utm_campaign =运动+ gatc012&安培; utm_term =关键字+ gatc012&安培;的utm_content =含量+ gatc012&安培; utm_medium =中等+ gatc012&安培; utmac = UA-30138- 1安培; utmcc = __ UTMA%3D97315849.1774621898.1207701397.1207701397.1207701397.1%3B ...

在该网址中是一个键入 __ utmcc 的内容,这些是GA Cookie。在_utmcc中,是一个键入 _utma 的字符串,该字符串由六个字段组成,每个字段由“。”分隔。第二个字段是访客ID,这是GA服务器在查找GA Cookie后找不到的随机数:

__utma%3D97315849.1774621898.1207701397.1207701397.1207701397.1

在此示例中, 1774621898 是访问者ID,Google Analytics打算将其作为每个访问者的唯一标识符

因此,您可以看到识别唯一身份访问者的技术缺陷 - 使用其他浏览器或其他设备进入网站,或者在删除Cookie后,您会将GA显示为唯一身份访问者(即,它寻找它的cookie并且没有找到任何,所以它设置它们。)

EFF对这一主题有一个很好的article - 即,如何建立独特性,以及确定程度,以及如何将其打败。

最后,一旦我用来确定某人之前是否访问过我们的网站(假设是硬件案例,即他们已经删除了他们的Cookie等),我将检查客户对我们的 favicon <的请求/ strong>即可。存储favicon的目录经常被忽略 - 无论是在手动扫描期间还是以编程方式使用脚本。