当前,我们正在构建商业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
,其中可能包含数十万行。