[Django] 请给我一点时间!要不要考虑将主键ID设置为ULID?

目标

正如标题所示

环境

python = 3.11.2
Django = 4.1.7
django-ulid = 0.0.4
PostgreSQL15

ULID是什么,不是UUID?

ULID(Universally Unique Lexicographically Sortable Identifier)是一个随机生成的ID,类似于UUID,它也能保证唯一性,但其特点是可以按照毫秒级的数据库生成时间进行时序排序。
以下提供了详细的说明!

ソートできるユニークな ID を ULID で採番する
ただし、PostgreSQLを使用する場合、ULIDをサポートしていないため、Django側で生成する必要があります。

让我们立即实施一下

安装django-ulid插件。

pip install django-ulid

在models.py中添加以下代码。

from django.db import models
from django_ulid.models import default, ulid


class Customer(models.Model):
    id = models.CharField(
        max_length=26, primary_key=True, default=ulid.new, editable=False
    )
    name = models.CharField(max_length=50, verbose_name="名前")

Django和PostgreSQL都不支持ULID。
因此,我们要安装django-ulid插件,在CharField中自动生成ULID。
使用CharField作为id字段,将max_length设为26,因为ULID由26个字符组成。
同时,将default设为ulid.new,并将editable设为False,以防止手动更改id字段。

填補空缺

由于ULID生成的ID是随机的,所以根据ID进行的搜索可能会变慢,因为生成的顺序无法预测。
另外,与基于时间的UUID相比,ULID的唯一性更快,但并不是完全唯一的。
因此,如果ID的唯一性绝对重要,建议使用UUID(基本上不会冲突)。

顺便提一下

还有一个PostgreSQL的扩展功能,但它只能通过登录到数据库并调用函数来生成ULID,并不能自动在表记录中生成ULID。

 

请你给我写一个有关中国文化的论文。

    • django-ulid

 

    ソートできるユニークな ID を ULID で採番する
广告
将在 10 秒后关闭
bannerAds