多对一关系的效率

时间:2018-08-23 18:22:34

标签: python django

当前,我们正在构建商业API即服务。

我们有以下要求。

  1. 用户将通过电子邮件登录
  2. 每个用户都有一个唯一的API密钥
  3. 每次使用API​​都会有一个日志供审核。

我们计划使用以下自定义用户模型。

class User(AbstractBaseUser):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        "Does the user have a specific permission?"
        # Simplest possible answer: Yes, always
        return True

    def has_module_perms(self, app_label):
        "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True

    @property
    def is_staff(self):
        "Is the user a member of staff?"
        # Simplest possible answer: All admins are staff
        return self.is_admin

    def get_fields(self):
        return [(field.name, field.value_to_string(self)) for field in User._meta.fields]

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    api_key = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)

    def __str__(self):
        return str(self.api_key)

class ApiLog(models.Model):
    api_consumed = models.TextField(blank=False, null=False)
    date_consumed = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

以上对于Django来说是一个很好的数据模型吗?

我们担心的是,用户将产生数十万行新的ApiLog行。除非涉及审计期,否则我们不必非常频繁地访问这些数据。

但是,我们会经常构造现有的User对象。我想知道,每个ApiLog会有大量的User行,这会减慢现有行的构建速度吗?

User对象包含user.apilog_set,其中可能包含数十万行。

0 个答案:

没有答案