在不炸毁服务器的情况下了解用户?

时间:2011-11-11 14:08:20

标签: mysql web-applications

我正在建立一个服务网络,所有服务彼此完全不同,现在我正在创建一个仪表板,使体验更容易使用,创建用户使用的服务的自动列表最

但是如果我想找出用户最常用的产品,我怎么能在不造成服务器过载的情况下做到这一点?通过这种方式,我的意思是每当用户访问该服务的页面时,即http://foo.com/bar/nyancattastic2.php我会发现关键字(应用程序名称)为'bar',然后通过更新用户名所在的行添加命中匹配我的数据库中的'bar',其中hits = hits + 1

虽然将它放在每个页面上会在每个页面上使用更新查询来破坏我的服务器。

有什么想法吗?或者,我可以询问用户他们最喜欢的应用程序是什么,但这更像是一个用户体验问题。

任何帮助都非常感谢!

干杯, 卡兰

编辑*我预计的流量水平大约是3-10个查询/秒,没有这个建议的更改!

感谢所有答案!

4 个答案:

答案 0 :(得分:2)

如果您真的担心流量和负载(我在看到问题之前不会担心),您可以考虑随机抽样用户:

// Check about 1/5 users:
$random_thresh = 5;

if (rand() % $random_thresh == 0) {
  // Log an insert for this user:
}

答案 1 :(得分:1)

我没有直接回答你的问题,而是来自另一个角度。

可以使用Google Analytics跟踪数据,然后使用分析API获取所需信息。

http://code.google.com/apis/analytics/docs/

答案 2 :(得分:1)

除非您处理巨大的流量水平和持续的高服务器负载,否则我认为您不必过于担心使用这样的微小命令来过度使用服务器。

答案 3 :(得分:1)

这取决于你的负载,如果每秒有多个查询,它可能会成为一个问题,因为当你执行update field = field + 1时,你会对该字段进行隐式锁定。

如果您确实拥有该级别的流量,则可以考虑将一行写入日志文件并对其进行后处理,或者将一行添加到mysql表中,该行将定期汇总。另一个想法是解析网络服务器日志。

我个人被这个更新字段+ 1咬了,当我试图在一个交通繁忙的国家足球网站上使用它时,所以是的,它可能成为一个问题,但只是在高流量的情况下。

同时查看迈克尔的想法,在负载过高的情况下随机抽样用户。每秒3-5次查询你不必担心,当然这取决于服务器,但问题很可能发生在每秒大约100次查询。