Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 应使用什么数据库/技术来计算时间范围内的唯一访客_Database_Performance_Google Analytics_Nosql - Fatal编程技术网

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

Database 应使用什么数据库/技术来计算时间范围内的唯一访客,database,performance,google-analytics,nosql,Database,Performance,Google Analytics,Nosql,我的报表数据库的性能有问题(表有数百万条记录,50+),当我想计算表示访问者唯一性的列上的distinct时,比如说一些哈希键 例如: 我有以下专栏: 哈希键、姓名、姓氏、访问日期、地点、性别等 我需要在1年的时间跨度内,不到5秒的时间内得到明确的信息: SELECT COUNT(DISTINCT hashkey) FROM table WHERE visit_datetime BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' 此查询在短时间范围内会很快,但如果大于

我的报表数据库的性能有问题(表有数百万条记录,50+),当我想计算表示访问者唯一性的列上的distinct时,比如说一些哈希键

例如: 我有以下专栏: 哈希键、姓名、姓氏、访问日期、地点、性别等

我需要在1年的时间跨度内,不到5秒的时间内得到明确的信息:

SELECT COUNT(DISTINCT hashkey) FROM table WHERE visit_datetime BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' 
此查询在短时间范围内会很快,但如果大于一个月,则可能需要超过30秒

有没有比关系数据库更好的计算技术


我想知道google analytics使用什么来动态计算他们的唯一访客。

您可以使用另一个表存储每天的唯一访客数,并通过cron函数或其他方法每天更新

对于报告和分析,您正在描述的类型,这些统计数据往往会被提取、聚合并存储在数据仓库或其他地方。它们的存储方式是为了性能原因,而不是为了OLTP(在线事务处理)而优化的关系存储技术。这种预先聚合的技术称为OLAP(在线分析处理)。

谷歌分析使用第一方cookie,您可以查看是否使用等来记录请求头

所有GA分析参数都打包到请求URL中,例如

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=1280x1024&utmsc=32位&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=GATC012%20setting%20variables&utmhid=2059107202&utmr=0&utmp=/auto/GATC012.html?utm_source=www.GATC012.org&utm_campaign=campaign+GATC012&utm_term=campaign+GATC012&utm\U term=keywords+GATC012&utm_content=content+gatc012&utm\u medium=medium+gatc012&utmac=UA-30138-1&utmcc=utma%3D97315849.1774621898.1207701397.1207701397.1207701397.1%3B

在该URL中,有一块键入了\uuuutmcc,这些是GA cookies。在_utmcc中,是一个键入到\u utma的字符串,该字符串由六个字段组成,每个字段以“.”分隔。第二个字段是访客ID,是GA服务器在查找GA cookie但未找到它们后生成和设置的随机数:

__utma%3D97315849.1774621898.1207701397.1207701397.1207701397.1
在本例中,1774621898是访客ID,Google Analytics将其作为每个访客的唯一标识符

因此,您可以看到识别唯一访问者的技术的缺陷——使用不同的浏览器或不同的设备进入网站,或在删除cookie后,会使您看起来像一个唯一的访问者(即,它查找其cookie,但没有找到任何cookie,因此会对其进行设置)

EFF在这个主题上有一个很好的例子,即如何建立独特性,以何种程度的确定性,以及如何打败它


最后,我曾经使用过一种技术来确定是否有人访问过我们的网站(假设困难的情况是,他们删除了他们的cookie等),那就是检查客户对我们的favicon的请求。存储favicon的目录经常被忽略——无论是在手动扫描期间还是以编程方式使用脚本。

也就是说,如果这是您所做的唯一分析,可能有一些技术更适合于此。现在我只需要此分析,但我不能说将来我还需要更多。。。我对OLAP知之甚少,你能告诉我一些好的资源吗,从哪里开始呢?这个答案几乎达到了我对OLAP知识的极限:试着浏览一下维基页面的参考资料,同时Dufel的答案为你提供了一个很好的简单起点。如果可能的话,我个人会使用数据库作业而不是cron作业,但这就是我。这不是一个解决方案,因为我需要一段时间的唯一性,而不仅仅是特定的一天。