【发布时间】:2012-01-13 11:22:55
【问题描述】:
这是一个很难提出的问题,但不能使其过于笼统或宽泛,因此,如果此问答格式的级别太高,我提前道歉。
我正在开发一个系统,该系统包括一个经常更新的提要类型系统(la 'twitter' 风格),以及一个根据用户投票对项目进行排名的系统。该系统基于一个用 PHP 编写的 json/restful api,它访问(主要)innodb mysql 数据库。数据库本身实际上已经高度优化,并且规范化得很好。该系统还利用 sphinx 进行搜索,并利用一些外部队列和处理系统进行数据处理。
我的问题是:对于在如此依赖数据库表关系的系统中实现 memcache 的方法,有人有什么建议吗?
例如:“热门列表”基于每次有人对某项投票时计算的排名。有人投票,为该项目计算一个新的“排名”,并以整数形式存储在 mysql 数据库中。
每隔几分钟编写一个类似 cron 作业的东西来缓存这个条目列表,从而减少访问数据库的频率会更有效吗 - 或者 - 从数据库中提取一个“id”是否有意义?而不是缓存列表,缓存项目数据并从内存中为列表中的每个项目单独提取数据?
曲线球是对于每个项目,api调用还需要返回用户是否对该项目进行了投票,这也可以被缓存,但是很难缓存需要检查的存在的东西.
我发现它有点像心理体操,试图确定哪些数据实际上是有意义的,或者在如此多地依赖于大量更新的数据时可以缓存哪些数据。
无论哪种方式,我都不确定这是否是一个正确的问题,但我希望任何在处理静态元素很少的应用程序缓存方面有丰富经验的人提供一些见解。
顺便说一句,我已经认真考虑过使用 Redis 来管理“排名项目”提要……也就是说,在排名更新时不要访问数据库,而只是更新 redis 列表。不过,我只花了一点时间使用 redis,所以我不是 100% 认为它是在需要超级可扩展的系统上处理这个问题的最佳方法。
【问题讨论】:
标签: php mysql caching memcached redis