【问题标题】:"Caching" identical MySQL results for all users为所有用户“缓存”相同的 MySQL 结果
【发布时间】:2012-03-31 21:03:50
【问题描述】:

我希望开发一个以小表为中心的 LAMP 应用程序,可能少于 100 行,每行可能有 5 个字段。该表需要快速访问存储在其中的数据,每个用户可能最多每秒一次(尽管这是“理想”,但实际上可能会略有下降)。将对该表进行许多更新,但 SELECT 将远远超过 UPDATE。

可用的硬件不是很强大(它将在可能具有 512mb RAM 的 VPS 上启动)并且它需要可扩展 - 启动时可能只有 10 个并发用户,但这可能会增加到数千个(并且,正如我们都希望的那样,可能有 10,000 个,但这个级别会有更强大的硬件可用)。

因此,我想知道是否有人可以为我指明正确的起点 - 检索到的所有数据对于所有用户都是相同的,因此我正在尝试调查是否有任何方式共享这些数据所有用户,而不是每秒执行 10,000 次相同的选择。呜呜:

1) mysql_query_cache 是否会缓存这些结果并允许访问数据,而不需要为每个用户重新选择? 2)(对于这个问题的广泛性表示歉意,即使是最简短的回复,我也将不胜感激!)我一直在研究 APC 缓存,因为我们已经将它用于操作码缓存 - 是否有缓存数据的方法在 APC 缓存中,并且每秒只执行一次 MYSQL 选择来更新此缓存 - 然后只为每个用户访问 APC?或者也许是替代缓存?

如果这一切都失败了,我可能会考虑使用一个单独的脚本来处理查询和输出数据,并且以某种方式将这个脚本的数据传递给所有用户。这不是一个完全形成的想法,我不确定实现,但也许是 AJAX 的组合,可以从...“某处”...提取输出数据... :)

再次对这些问题的广度表示歉意 - 任何人的一些简短指示将非常非常感谢。 再次提前感谢

【问题讨论】:

  • 不要使用 MySQL 缓存,而是使用 Memcached
  • @RomanNewaza - 谢谢 Roman,我会调查 Memcache :)

标签: php mysql caching apc


【解决方案1】:

如果您正在做一些像 AJAX 聊天这样不断轮询服务器的事情,您可能需要查看node.js,它保持服务器和浏览器之间的开放连接。这样,您可以在更改发生时将更改推送给用户,而您无需每秒执行一次所有冗余检查。这可以很好地扩展到成千上万的用户,并且是在服务器端用 javascript 编写的,所以并不难。

【讨论】:

  • 刚开始学习node.js和mongodb,不知道前端的代码/脚本是什么样子的?
  • @Matt Gibson - 谢谢你,我以前从未研究过 node.js,但乍一看它看起来很像我需要的东西(我们正在寻找非常相似的东西AJAX 聊天) - 非常感谢
  • @Matt Gibson:我的意思是前端代码如何与服务器端 javascript 代码交互?你能举一些例子,因为我是 node 和 mongodb 的新手吗?
  • 感谢马特吉布森。不错的文章,这正是我要找的。我有另一个问题,我想构建一个实时统计显示 Web 应用程序,与显示从收集的网站统计信息的文章非常相似用户访问、站点行为和存储在 mongodb 中。我可以从你发给我的文章开始吗?
【解决方案2】:

使用 MySQL 缓存的问题是整个表缓存在对该表的任何写入时都会失效。如果您想更精确地控制该行为,最好使用像 memcached 或 APC 这样的缓存解决方案。是的,APC 将能够缓存该信息。

要记住的另一件事是,您还需要知道何时使缓存无效,这样您就没有过时的数据。

【讨论】:

    【解决方案3】:

    您可以使用 apc、xcache 或 memcache 进行数据库查询缓存,也可以使用 vanish 或 squid 进行网关缓存...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2017-08-13
      • 2016-04-17
      • 1970-01-01
      • 2019-10-29
      • 2011-03-26
      • 2012-08-26
      相关资源
      最近更新 更多