【问题标题】:Rails: Update user field on each request (how to optimize)Rails:更新每个请求的用户字段(如何优化)
【发布时间】:2012-02-26 18:13:19
【问题描述】:

我必须在每个 HTTP 请求(页面访问次数)上更新 MySQL 数据库中的一个字段。有时我也必须对静态文件执行此操作。在重负载环境中,这可能会阻止响应,因为 MySQL 数据库一次可以执行一个更新(每条记录)过程。

我在想

  • 附加到文件并每隔 X 分钟在后台解析一次
  • 将日志记录写入 MySQL 数据库(特殊表)并执行 后台处理

你会如何优化它?

【问题讨论】:

  • 您有一个涵盖所有页面浏览量的计数器?
  • @FrederickCheung 不不...我只是举个例子。实际上我记录了一些文件的带宽(每个登录的用户)。

标签: ruby-on-rails caching optimization logging


【解决方案1】:

我不相信你所说的关于 MySQL 的内容 - 可以同时发生多个更新。

如果您确实达到了 mysql 的并发限制,您是否考虑过使用不同的数据存储来存储此信息?例如,mongodb 非常适合这些类型的 upsert 操作,因为它具有广泛的“即发即弃”更新操作,称为 modifiers

例如你可以做类似的事情

db.pagecounters.update({name: 'x'}, {$inc: {count: 1}}, true)

这将找到名称为 x 的 pagecounter 对象,并将 count 增加 1(如果 count 存在)或将 count 设置为 1。如果没有这样的 page counter,它将创建一个

【讨论】:

  • 这太棒了!默认情况下,Mongo Ruby 驱动程序是“一劳永逸”。
猜你喜欢
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 2021-12-06
  • 2016-03-18
  • 1970-01-01
  • 2021-08-23
相关资源
最近更新 更多