我是一名来自摩洛哥的年轻的自我思考网络开发人员,简而言之,我正在开发一个特殊的社交媒体项目,我通过该项目学习了编码,但随着时间的推移,它发展成了一个更大的项目。我已经达到了我想为我的帖子创建适当的分析工具的地步
所以这是带有星星评级幻灯片的帖子,我将其存储在带有(user_id,post_id,stars)的sql数据库中,但我想知道每次用户获取帖子时是否都必须count()?或者有一种更有效的方法来显示后期分析,因为我已经阅读了很多内容,但没有找到适合我的案例的解决方案,而且我没有解决这种规模的解决方案的企业经验。每次我请求该帖子时,我都必须计算星星和选民人数的总和,然后我做(星星/选民)以获得平均值,我不知道每次请求该帖子时都进行计数是否是一个好主意,但是我不知道如何以其他方式做到这一点。
- 我还有另一个地方必须计算观看次数,但我也不知道如何以更有效的方式计算它们。我愿意接受所有建议
保存计数和平均的结果。然后在大多数页面浏览量上读取保存的值。
您可以将保存的值存储在数据库中幻灯片表的新列中,或者可以向系统添加缓存服务(有些人喜欢使用Memcached或ValKey)。
存在保存的平均值不是当前值的风险。例如,如果进行了新的投票,但保存的平均值不会立即重新计算。这是一个棘手的问题。
Phil Karlton 有一个 20 世纪 90 年代的老笑话:
他的意思是很难检测到缓存的值是否不准确,或者很难确定将其保留在缓存中的时间是否太长。
解决方案包括:
编写代码以在投票时更新缓存的值。这增加了投票的复杂性,但您可以放心缓存的值始终是准确的。
使用在固定时间(例如 1 小时)后自动删除值的缓存。下次查看者尝试从缓存中读取该值时,他们会发现该值丢失了,并且必须重新计算它。因此每小时不超过一位观众承担重新计算价值的成本。此外,查看者也可能会看到最多 1 小时过期的不准确值。
将刷新缓存中的值作为计划任务,因此观看者不会受到该成本的影响。但在刷新值之前,查看者可能会看到不准确的值。