Mysql 用Django和Redis实现评分算法
我使用DjangoREST&MySQL作为mobiel应用程序的后端。我有两个模型,Mysql 用Django和Redis实现评分算法,mysql,django,redis,Mysql,Django,Redis,我使用DjangoREST&MySQL作为mobiel应用程序的后端。我有两个模型,User和Feed,对于api/feeds/的任何调用,都会返回由Feed的参数处创建的为经过身份验证的用户订购的所有提要 然而,我需要通过简单的评分算法为每个用户定制提要的顺序。算法的细节并不重要,但我基本上需要将每个卡片馈送对的分数存储在表中,如UserFeedScore 问题是,当用户和提要的数量增加时,该表将增长得非常快,因为每个用户提要对都有一行。此外,对于每个用户的活动(如,评论等),该用户的每个提要
User
和Feed
,对于api/feeds/
的任何调用,都会返回由Feed的参数处创建的为经过身份验证的用户订购的所有提要
然而,我需要通过简单的评分算法为每个用户定制提要的顺序。算法的细节并不重要,但我基本上需要将每个卡片馈送
对的分数
存储在表中,如UserFeedScore
问题是,当用户和提要的数量增加时,该表将增长得非常快,因为每个用户提要对都有一行。此外,对于每个用户的活动(如,评论等),该用户的每个提要的分数将被更新,最终将耗尽MySQL数据库
将此表保存在Redis中似乎是一个合适的解决方案,但我不确定如何根据Redis中计算的分数在MySQL数据库中排序提要
欢迎使用任何Redis数据结构、键值建议和Django查询示例
class Feed(models.Model):
text = models.CharField()
created_by = models.ForeignKey(settings.AUTH_USER_MODEL)
created_at = models.DateTimeField(default=timezone.now)
class UserFeedScore(models.Model)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
feed = models.ForeignKey(Feed)
score = models.IntegerField(default=100)
为什么您认为Redis在存储大量记录方面会比MySQL做得更好?您所模拟的是用户
和提要
之间的大量关系,以及一个自定义的直通表。Redis作为缓存层可能很有用,但我会首先将其构建为一个基本的Django/MySQL应用程序,并且只有在出现实际问题时才对其进行调整,而且很明显,在内存(而不是磁盘)中存储和更改数据的瓶颈会更快,不是吗?你建议我只缓存Redis中的查询,并在MySQL中更新UserFeedScore表吗?不清楚你到底想解决哪个问题,其实很简单。我需要为每个用户执行的每个活动计算每个用户提要对的分数。对于所有用户,UserFeedScore表需要经常更新。此外,当取卡时,它必须加入此表并按分数订购卡。当然,我们可以在MySQL中进行更新,但最好在Redis中执行这些更新。但是,我不确定如何从redis获得分数,并通过这些分数在MySQL中查询