Mysql 在不关闭服务器的情况下了解用户?

Mysql 在不关闭服务器的情况下了解用户?,mysql,web-applications,Mysql,Web Applications,我正在构建一个服务网络,所有的服务彼此完全不同,现在我正在创建一个仪表板,以使体验更易于使用,并创建用户最常用的服务的自动列表 但是,如果我想找出用户使用最多的产品,我将如何在不造成服务器严重过载的情况下做到这一点?我的意思是,每当用户访问该服务的某个页面时,即我会发现关键字(应用程序名称)为“bar”,然后添加一个hit,方法是用hits=hits+1更新数据库中用户名与“bar”匹配的行 尽管如此,如果在每个页面上都添加更新查询的话,我的服务器会彻底崩溃 有什么想法吗?或者,我可以问用户他们

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

但是,如果我想找出用户使用最多的产品,我将如何在不造成服务器严重过载的情况下做到这一点?我的意思是,每当用户访问该服务的某个页面时,即我会发现关键字(应用程序名称)为“bar”,然后添加一个hit,方法是用hits=hits+1更新数据库中用户名与“bar”匹配的行

尽管如此,如果在每个页面上都添加更新查询的话,我的服务器会彻底崩溃

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

非常感谢您的帮助

干杯, 卡兰

Edit*如果没有这个建议的更改,我预计流量大约为3-10次查询/秒


谢谢你的回答

我不是直接回答你的问题,而是从另一个角度回答

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


我不是直接回答你的问题,而是从另一个角度回答你的问题

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


除非您处理的是巨大的流量水平和持续的高服务器负载,否则我认为您不必太担心这样一个小小的命令会使服务器负担过重。

除非您处理的是巨大的流量水平和持续的高服务器负载,我认为你不必太担心用这样一个小小的命令会使你的服务器负担过重。

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

如果你有这样的流量,你可以考虑将一行写入日志文件并对其进行后期处理,或者将一行添加到MySQL表中,这将定期聚合。另一个想法是解析Web服务器日志

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


还可以看看Michael的想法,在负载太高的情况下随机抽样用户。对于每秒3-5次查询,您不必担心,这当然取决于服务器,但问题可能发生在每秒大约100次查询。

这取决于您的负载,如果每秒有几次查询,则可能会成为问题,因为当您执行更新字段=字段+1,对字段执行隐式锁定

如果你有这样的流量,你可以考虑将一行写入日志文件并对其进行后期处理,或者将一行添加到MySQL表中,这将定期聚合。另一个想法是解析Web服务器日志

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


还可以看看Michael的想法,在负载太高的情况下随机抽样用户。每秒有3-5个查询,你不必担心,当然这取决于服务器,但是问题可能发生在每秒百个查询。

< P>如果你真的关心流量和负载(我不会担心直到我看到一个问题),你可以考虑随机采样用户:

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

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

<>如果你真的关心流量和负载(我不会担心,直到我看到一个问题),你可以考虑随机抽样用户:

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

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

我认为一个更新声明可能不会导致世界爆炸。如果您的服务做了任何有意义的事情,那么它们所做的不仅仅是一次更新。您的负载是否真的已经如此之高,您的流量是否如此之大,以至于添加
INSERT
会让您的服务器陷入困境?如果你只是暂时这么做?如果你随机抽取用户样本呢?我认为一个更新语句可能不会导致世界爆炸。如果您的服务做了任何有意义的事情,那么它们所做的不仅仅是一次更新。您的负载是否真的已经如此之高,您的流量是否如此之大,以至于添加
INSERT
会让您的服务器陷入困境?如果你只是暂时这么做?如果你随机抽取用户样本呢?+1到这个。在MySQL中更新单个条目的速度非常快。只需确保此更新从web服务器以非阻塞方式完成(也就是说,在将页面提供给用户之前,不要等待MySQL服务器的响应)。@TrevorBurnham更好的方法是在文档加载时使用Ajax,不是吗?谢谢你:D@JHolyhead我的服务器已经很弱了,每秒增加3-10个预期查询!D:谢谢你的回答:)+1。在MySQL中更新单个条目的速度非常快。只需确保此更新从web服务器以非阻塞方式完成(也就是说,在将页面提供给用户之前,不要等待MySQL服务器的响应)。@TrevorBurnham更好的方法是在文档加载时使用Ajax,不是吗?谢谢你:D@JHolyhead我的服务器已经很弱了,每秒增加3-10个预期查询!D:谢谢你的回答:)如果他只想找到最受欢迎的服务,而不是确切的数字听起来是个好主意,而且绝对数字也可以估计+1。这是一个相当聪明的解决方案,但问题是我需要了解每个用户,给每个用户提供他们“最常用的应用程序”。我期待的负载在任何地方