【问题标题】:django UUIDField with Postgresqldjango UUIDField 与 Postgresql
【发布时间】:2015-09-18 15:35:52
【问题描述】:

将 UUIDField 与 Django 和 Postgresql(本机数据类型)一起使用比自制生成的唯一键有优势吗?

目前我在我的模型上使用随机生成的字母数字 ID 字段,我想知道 Postgres 本机数据类型和 UUIDField 是否更适合此目的,以及是否有理由切换。

我使用随机字母和数字生成 id。它有 25 个字符长。我在上面放了一个 db_index 以便更快地检索。我不分片我的数据库。原因是某些模型出于商业目的不能有连续的 id

【问题讨论】:

  • 答案是视情况而定。取决于您使用随机生成的 id 及其存储的原因、您正在运行的查询类型、您是否正在分片等。
  • 我使用随机字母和数字生成 ID。它有 25 个字符长。我给它放了一个 db_index 以便更快地检索。我不分片我的数据库。
  • 请允许我问一下您为什么不使用 SERIAL。当不涉及分片时,这几乎适用于所有情况。
  • 原因是某些模型不能有连续的id用于商业目的

标签: django postgresql


【解决方案1】:

切换到 UUID 将具有优势,尤其是在您拥有大量记录的情况下。查找和插入应该快一点。由于 UUID 字段只有 128 位,因此每行将节省 9 字节的存储空间。

但这并不意味着您自制的主键是一个坏主意。离得很远。这是一个很好的方法,Instagram 也使用了类似的方法,他也恰好在使用 Postgresq 和 DJango。他们的解决方案虽然只使用 64 位,但还设法将有关对象创建时间的信息压缩到主键中。

它们的主要目的是分片,但即使对于非共享数据库也能很好地工作。只需对代表其分片信息的 13 位使用一些随机数。他们在上面的链接中有一个 sql 示例。

【讨论】:

    猜你喜欢
    • 2016-01-27
    • 2018-05-20
    • 2012-02-05
    • 2013-08-14
    • 2017-04-18
    • 2017-09-21
    • 2016-04-21
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多