一般来说,使用memcache或数据库之类的东西来存储定期(ish)重新计算的模型属性的值是否更好?
这是我的情景......
我有很多用户,每个用户都有一个名为"得分的属性。
得分是游戏中最后10个(按日期排序)实例的总和(这里实际上是一个额外的模型关系 - "通过"模型 - 但这只会使这一点复杂化描述)。
我需要在页面上显示用户的位置(基于他们的分数),这是通过查看他们的分数在所有用户的分数列表中的位置来计算的。
这个获取每个用户得分并找到当前用户在该列表中的位置的巨大计算显然是一个漫长的过程,那么加速它的最佳方式是什么? / p>
使用memcache并缓存每个玩家的得分(每周只会更新一次)或者我是否会更好地为每个包含当前得分的用户添加实际数据库字段?
还是有另一种(更好)的方式吗?
答案 0 :(得分:0)
这取决于服务器负载的特征。有多少用户,计算需要运行的频率,计算需要多少内存和存储空间。除非您知道这些问题的答案,否则只需坚持使用数据库字段,但可以访问它以获得API,以便在需要时可以迁移到不同的分数存储后端。
而不是memcached,最好使用像Redis这样的持久缓存。它具有memcached的所有特性,但可以在服务器重启后继续存在,因此您不必在服务器重启时运行所有(重)计算,从而增加停机时间。