如何在数据库中存储大量键/代码.金戈



让我解释一下。我用python,django建立了一个网站。我现在遇到的问题之一是我不确定我应该如何解决这个问题。网站上的每个用户都将在网站上上传大量基本密钥/代码,这些密钥/代码将链接到他们的帐户。每个用户将有数千个。 我想为每个键/代码设置一行根本没有效率。有没有办法存储列表或类似的东西?如果我在只有 100 个用户之后每个代码/键有一行,它将达到数十万行。

数据库运行良好,有数百万条记录和查找。 根据我的经验,Postgresql 在批量更新时遇到了一些问题 (来自数百万条记录的单个查询更新的记录速度不快。

您可以使用这种模型

from django.db import models
class UserData(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
key = models.CharField(max_length=50)
value = models.CharField(max_length=50)

或者您可以使用带有 JSONField 的表

from django.contrib.postgres.fields import JSONField
from django.db import models
class UserData(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
data = JSONField()

您将在查询它时获得一个 JSON 对象,并在视图中像字典一样使用它,并使用数据库更新回来。

是的,拥有数十万行并没有错,这就是RDBMS的好处!

class Code(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
code = models.CharField(max_length=..., unique=True)

是一个很好的模型。然后,您可以通过反向管理器user.code_set访问用户的代码。

  • 如果不希望代码在系统中全局唯一,请删除unique=True约束
  • 如果您希望每个用户的代码是唯一的,请添加class Meta: unique_together = (('user', 'code'),)