";缓存”;所有用户的MySQL结果相同


"Caching" identical MySQL results for all users

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

可用的硬件功能并不强大(它将在一个可能有512mb RAM的VPS上推出),而且它需要可扩展性——发布时可能只有10个并发用户,但这可能会增加到数千个(正如我们都希望的那样,可能有10000个,但在这个级别上会有更强大的硬件可用)。

因此,我想知道是否有人能为我指明一个正确的起点——所有用户检索到的所有数据都是相同的,所以我试图调查是否有任何方法可以在所有用户之间共享这些数据,而不是每秒执行10000次相同的选择。Soooo:

1) mysql_query_cache是否会缓存这些结果并允许访问数据,而不需要为每个用户重新选择?2) (很抱歉这个问题有多宽泛,我非常感谢哪怕是最简短的回复!)我一直在研究APC缓存,因为我们已经将其用于操作码缓存了——有没有一种方法可以将数据缓存在APC缓存中,每秒只做一次MYSQL选择来更新这个缓存,然后只为每个用户访问APC?或者可能是一个替代缓存?

如果做不到这一切,我可能会考虑使用一个单独的脚本来处理查询和输出数据,并以某种方式将这一脚本的数据传输给所有用户。这不是一个完整的想法,我也不确定实现方式,但也许是AJAX的组合,从。。。"某处"…:)

再次为这些问题的广度道歉——任何人都会非常非常感谢你的几点简短建议。再次提前感谢

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

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

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

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