如何使UUID PK更具可索引性

时间:2015-08-18 14:55:27

标签: python django postgresql

我正在使用Postgres作为我的数据库,我的应用程序使用它的ORM API在Django中编写。我正在创建一个长度为22 +前缀(总共24个)的极高质量随机字符串,用作我这样的对象的PK ......

这是我的关键一代?

def make_Key(app_prefix):
    return app_prefix + base64.b64encode(uuid.uuid4().bytes).decode("utf-8").rstrip('=\n').replace('/', '_').replace(
        "+", "-")

我的问题是,我是否会在以后执行索引或速度方面遇到问题?我不是在一个int vs UUID的答案之后,UUIDs对我的系统有更多的优点。我需要知道的是,如果我可以使它更“可索引”,或者如果Django中有更好的解决方案(也许我的工作方式没有任何问题?)。

我的模特

class Image(models.Model):
    id = models.CharField(primary_key=True, max_length=28, unique=True,
                          default=get_key,editable=False)
  etc

1 个答案:

答案 0 :(得分:1)

uuid.uuid4将为您提供随机生成的密钥,您只能散列但无法获取任何订单信息。我建议你为你的主键添加时间戳前缀,这样你就可以粗略地将它用于b +树索引。

您可以bson ObjectId作为参考。