我正在构建一个服务网络,所有的服务都是完全不同的,现在我正在创建一个仪表板,使体验更容易使用,创建一个用户使用最多的服务的自动列表。
但是,如果我想知道哪些产品是用户使用最多的产品,我如何才能做到这一点而不造成服务器上的重载?我的意思是,每当用户进入该服务的某个页面( http://foo.com/bar/nyancattastic2.php )时,我就会发现关键字(app名称)是'bar',然后通过使用hits=hits+1更新我的数据库中用户名与'bar‘匹配的行来添加命中。
不过,在每个页面上添加更新查询都会破坏我的服务器。
有什么想法吗?或者,我可以问用户他们最喜欢的应用程序是什么,但这更多的是一个UX问题。
任何帮助都非常感谢!
干杯,卡兰
编辑*我预计流量的级别大约是3-10个查询/秒,没有这个建议的更改!
谢谢你所有的答案!
发布于 2011-11-11 14:11:53
这取决于您的负载,如果每秒钟有几个查询,它可能会成为一个问题,因为当您执行一个更新字段= field + 1时,您会对该字段执行隐式锁定。
如果您有这个级别的通信量,您可以考虑将一行写入日志文件并发布处理它,或者将一行添加到mysql表中,定期进行聚合。另一个想法是解析the服务器日志。
我个人被这个更新字段+ 1咬了,当我试图在一个交通繁忙的国家足球网站上使用它时,是的,它可能成为一个问题,但只有在高流量的情况下。
也可以看看Michael的想法,在负载太高的情况下随机抽取用户的样本。如果每秒有3-5次查询,您当然不必担心,这取决于服务器,但问题可能发生在每秒100次左右。
发布于 2011-11-11 14:14:20
如果您真的关心流量和负载(直到我看到一个问题我才会担心),您可以考虑随机抽样用户:
// Check about 1/5 users:
$random_thresh = 5;
if (rand() % $random_thresh == 0) {
// Log an insert for this user:
}发布于 2011-11-11 14:11:36
我不是直接回答你的问题,而是从另一个角度来回答。
可以使用Google跟踪数据,然后使用Analytics获取所需的信息。
http://code.google.com/apis/analytics/docs/
https://stackoverflow.com/questions/8095112
复制相似问题