一对一与相同模型django中的字段
One to One vs field in same models django
我创建了两个模板,我有扩展模板 De user (AbsctractUser) 和带有字段 total_score 的模板 (Score)。
根据我对redis的django缓存的了解,只要该行不被修改,redis就会将信息保存在缓存中。
total_score字段会定时更新,如果在AbstractUser模板中加入,每10分钟100次,这个会强制redis在每次页面变化时定时更新用户的缓存(view) ,而如果我创建第二个具有 OnetoOne 关系的 Score 模板,则该模板将仅在相关的 2 个页面上更新,或者视图加载 Score 模型。
或者我可以直接将字段 total_score 放在我的抽象用户中并定期更新它。但对我来说,抽象用户模型失去了redis的效率。
我想知道我的推理是否正确...
我能读到的是,OnetoOne 可用于扩展现有的 table,但对于创建新项目,有必要避免使用 OnetoOne,并直接在模型。
所以我一头雾水。 提前谢谢你。
示例:
更好 用于 redis 缓存 (score_user) 更新 频繁更新 行 score_user :
class User(AbstractUser):
name = CharField(_("Last name of User"), blank=True, max_length=255)
forename = CharField(_("First name of User"), blank=True, max_length=255)
class Score(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True)
score_user = models.PositiveIntegerField(default=0)
VS
class User(AbstractUser):
name = CharField(_("Last name of User"), blank=True, max_length=255)
forename = CharField(_("First name of User"), blank=True, max_length=255)
score_user = models.PositiveIntegerField(default=0)
两种方法都可以,有几种方法可以
1. 为不包含 update_at 参数的缓存传递自定义密钥,您可以传递名称和名字的哈希值
- 只有当这些字段更新时,您才能使 post 保存挂钩中的键无效,否则忽略
将您的 Score 字段与用户分开,因为规范化了您的数据库模式。
它取决于您希望在同一页面上同时查看详细信息用户和分数的情况,并且您需要一些性能然后使用抽象用户。进行 1 次查询,您将获得一切。
您已经提到使用抽象用户会降低性能然后使用一对一关系。
并且你也可以在redis中对score做单独的hash或者string来更新score字段。不要更新用户会话哈希。
但是非规范化提高了性能。
我创建了两个模板,我有扩展模板 De user (AbsctractUser) 和带有字段 total_score 的模板 (Score)。
根据我对redis的django缓存的了解,只要该行不被修改,redis就会将信息保存在缓存中。
total_score字段会定时更新,如果在AbstractUser模板中加入,每10分钟100次,这个会强制redis在每次页面变化时定时更新用户的缓存(view) ,而如果我创建第二个具有 OnetoOne 关系的 Score 模板,则该模板将仅在相关的 2 个页面上更新,或者视图加载 Score 模型。
或者我可以直接将字段 total_score 放在我的抽象用户中并定期更新它。但对我来说,抽象用户模型失去了redis的效率。 我想知道我的推理是否正确...
我能读到的是,OnetoOne 可用于扩展现有的 table,但对于创建新项目,有必要避免使用 OnetoOne,并直接在模型。 所以我一头雾水。 提前谢谢你。
示例:
更好 用于 redis 缓存 (score_user) 更新 频繁更新 行 score_user :
class User(AbstractUser):
name = CharField(_("Last name of User"), blank=True, max_length=255)
forename = CharField(_("First name of User"), blank=True, max_length=255)
class Score(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True)
score_user = models.PositiveIntegerField(default=0)
VS
class User(AbstractUser):
name = CharField(_("Last name of User"), blank=True, max_length=255)
forename = CharField(_("First name of User"), blank=True, max_length=255)
score_user = models.PositiveIntegerField(default=0)
两种方法都可以,有几种方法可以 1. 为不包含 update_at 参数的缓存传递自定义密钥,您可以传递名称和名字的哈希值
- 只有当这些字段更新时,您才能使 post 保存挂钩中的键无效,否则忽略
将您的 Score 字段与用户分开,因为规范化了您的数据库模式。 它取决于您希望在同一页面上同时查看详细信息用户和分数的情况,并且您需要一些性能然后使用抽象用户。进行 1 次查询,您将获得一切。
您已经提到使用抽象用户会降低性能然后使用一对一关系。
并且你也可以在redis中对score做单独的hash或者string来更新score字段。不要更新用户会话哈希。
但是非规范化提高了性能。