【问题标题】:Learn about users without blowing up server?在不炸毁服务器的情况下了解用户?
【发布时间】:2011-11-11 14:08:20
【问题描述】:

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

但是,如果我想找出用户最常使用的产品,我将如何做到这一点而又不会导致服务器严重过载?我的意思是,每当用户访问该服务上的页面时,即http://foo.com/bar/nyancattastic2.php,我会发现关键字(应用程序名称)是“bar”,然后通过更新用户名匹配的行来添加命中'bar' 在我的数据库中使用 hits=hits+1

虽然,将它放在每个页面上确实会破坏我的服务器,并在每个页面上进行更新查询。

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

非常感谢任何帮助!

干杯, 卡兰

编辑*如果没有此建议的更改,我预计的流量水平约为 3-10 次查询/秒!

感谢大家的回答!

【问题讨论】:

  • 我认为一个更新声明可能不会导致世界爆炸。如果您的服务有任何影响,那么它们所做的远不止一次更新。
  • 您的负载真的已经如此之高并且您的流量如此之大以至于添加INSERT 会使您的服务器陷入困境吗?如果你只是暂时这样做呢?如果你随机抽样用户呢?

标签: mysql web-applications


【解决方案1】:

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

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

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

【讨论】:

  • 如果他只想找到最受欢迎的服务而不是确切的数字听起来是个好主意,而且绝对数字无论如何都可以估计 +1。
  • 这是一个非常聪明的解决方案,但问题是我需要了解每个用户,为每个用户提供他们“最常用的应用程序”。我期望的负载是每秒 3-10 个查询之间的任何地方。非常感谢您的回答!将来肯定会用它来测量:)
【解决方案2】:

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

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

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

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

【讨论】:

  • 更好的方法是在 documentload 上运行查询,不是吗?因为它会让页面首先加载,而不是锁定页面,但是是的,我猜它仍然会锁定字段:\ 目前的流量水平预计约为每秒 3-10 个查询,可能会增加到一两个月20-30。当它确实达到这一点时,我可能不得不进行日志解析:S 感谢您的回答和遇到类似问题的经验! :)
  • 是的,使用 AJAX 肯定会缓解这个问题,但是如果你能达到这一点,除了日志文件,你还可以考虑仍然使用 MySQL 进行日志记录,并带有 INSERT DELAYED(一个每次调用行),然后每 X 分钟运行一个进程,将这些值压缩到另一个表中。为了避免使用昂贵的压缩锁定数据库,您可以限制每次压缩 Y 行。
【解决方案3】:

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

也许可以使用 Google Analytics 来跟踪数据,然后使用分析 API 来获取您需要的信息。

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

【讨论】:

  • 我在考虑这个问题,但检查 XML 数据更像是一项 CRON 工作,而不是数据的实时更新,而且它可能有点繁琐,尽管这是个好主意,当我可能会失败时,我会考虑它!哈哈,谢谢你的回答! :)
  • 不用担心@Karan,这听起来像是一个有趣的项目,祝你好运:-)
【解决方案4】:

除非您要处理巨大的流量水平和持续的高服务器负载,否则我认为您无需过多担心使用这样的小命令使服务器负担过重。

【讨论】:

  • 对此+1。在 MySQL 中更新单个条目非常快。只需确保此更新以非阻塞方式从您的 Web 服务器完成(也就是说,在将页面提供给用户之前,您无需等待 MySQL 服务器的响应)。
  • @TrevorBurnham 更好的方法是使用 Ajax 加载文档,不是吗?谢谢你:D
  • @JHolyhead 我的服务器已经很弱,每秒增加 3-10 个预期查询! D:谢谢你的回答:)
猜你喜欢
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 2019-04-12
  • 2010-10-02
  • 1970-01-01
  • 2021-06-21
相关资源
最近更新 更多