我有一个用django编写的网站。网站的用户根据他们的积分获得积分和排名。
class Profile(UserenaBaseProfile):
points = models.IntegerField(default=100)
rank = models.PositiveIntegerField(...)
当用户获得积分时,他/她的等级将被改变,因此其他用户也将改变。 问题是计算用户等级的最佳方法是什么,何时应该计算或经常计算?
感谢。
答案 0 :(得分:1)
每次单个用户的积分增加时,可能不是更新每个用户等级的最佳方法。如果你有很多用户,那么后端会很苛刻。
如果您想在个人资料页面上显示用户排名,或许您可以查询获取按点排序的所有用户的列表,请将其单独存储为字典或其他内容并对其进行大量缓存。这样做会更好。
所以假设您的用户列表看起来像是这样(1111等是用户ID):
USERS = {
1111: {'username': 'iskorum',
'points':99999
},
2222: {'username': 'sidarcy',
'points':9444
},
3333: {'username': 'joeblogs',
'points':37
}
}
当涉及到实际获得用户排名时,您只需在此存储的词典中找到用户位置即可。
假设用户ID为1111
userrank = [i + 1表示i,x表示枚举(已排序(USERS)),如果x == 1111]
返回1
无需额外的数据库查询
如果只有一个小网站,每次获取用户列表并查找当前用户在该列表中的位置无害。
但是,如果您期望成千上万的用户可能是更好的方法。
编辑:您还应该缓存已排序的列表,如下面的注释中所述 每次排序列表都会占用大量内存