- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
阅读这篇博文后 https://blog.starkandwayne.com/2015/05/23/uuid-primary-keys-in-postgresql/
我想更多地了解 Django 如何生成 uuid,因为我将它们用作我的 pk。那么,根据文档,https://docs.djangoproject.com/es/1.9/ref/models/fields/#uuidfield , Django 依赖于 Python UUID 模块 https://docs.python.org/3/library/uuid.html#uuid.UUID .但是UUID有很多种,我完全不清楚Django中生成的是哪一种,或者如何选择,假设有一个选择。
最后,考虑到博文中指出的碎片化问题,并且假设 uuid_generate_v1mc
不能直接在 Python 或 Django 中使用,有没有办法强制他们使用它?
最佳答案
How does Django and or Python generate a UUID in Postgresql?
But there are many kinds of UUID, and it is not at all clear to me which one is being generated in Django
当你在 Django 中使用 UUIDField
作为主键时,它不会为你生成一个 UUID,你在保存对象之前自己生成它
我不知道从那以后事情是否发生了变化,但上次我使用 UUIDField
时,您必须自己指定 UUID 值(例如,当您创建对象时,Django 不会让您保存一个具有空白 UUID 的对象并让数据库生成一个)。查看 Django 文档示例强化了我的想法,因为它们提供了一个 default=uuid.uuid4()
例如在主键中。
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
^
|__ calls uuid.uuid4()
要比较不同 UUID 版本的属性,请参阅此问题:Which UUID version to use?
对于很多应用来说,UUID4就可以了
如果您只想生成一个 UUID 并继续您的生活,uuid.uuid4()
就像上面的代码片段一样就可以了。 UUID4 是一个随机的 UUID,发生冲突的可能性非常小,您实际上不必担心,尤其是当您没有每秒生成大量冲突时。
Finally, given the fragmentation issue pointed out in the blog post, and assuming
uuid_generate_v1mc
is not available directly in Python or Django, is there a way to force them to use it?
具有随机 MAC 地址的 Python UUID1,如 uuid-ossp
的 uuid_generate_v1mc
您链接的博客提到了 UUID1 的使用。 Python 的 uuid.uuid1()
使用一个参数来代替默认的真实硬件 MAC 地址(48 位)。因为这些随机位是 UUID1 的末尾,所以 UUID1 的第一位可以是基于顺序/时间戳的,以限制索引碎片。
所以
uuid.uuid1(random_48_bits)
应该得到与 uuid_generate_v1mc
类似的结果, 这是一个带有随机MAC地址的UUID1。
要生成随机的 48 位,作为一个虚拟示例,我们可以使用:
import random
random_48_bits = random.randint(0, 2**48 - 1)
试一试:
>>> import uuid
>>> import random
>>> 2 ** 48 - 1
281474976710655
>>> uuid.uuid1(random.randint(0, 281474976710655))
UUID('c5ecbde1-cbf4-11e5-a759-6096cb89d9a5')
现在用它创建一个函数,并将它用作 Django UUIDField
的 default
自定义 UUID,以及来自 Instagram 的示例
请注意,提出您的自定义 UUID 方案并使用可用位来编码对您的应用程序有用的信息是完全可以的。
例如您可以使用一些位来编码给定用户的国家/地区,一些带有时间戳的位,一些用于随机性等。
您可能想阅读如何 Instagram (built on Django and PostgreSQL) cooked up their own UUID scheme to help with sharding .
关于python - Django UUIDField 如何在 Postgresql 中生成 UUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35210753/
我试图再次将反射的 UUID 转换回实际的 UUID 对象,但找不到方法,当我打印反射值时它看起来是正确的,但在尝试转换时我找不到方法。 package main import ( "fmt"
我想知道 UUID 是否是唯一的,即使它们是在不同的系统上生成的,这些系统可能采用不同的算法。例如,如果您在 MySQL 和 .Net 中生成了一堆 UUID,碰撞的可能性会更高,还是所有系统都使用完
是否可以一个接一个地创建两个重复的 UUID?我不熟悉 UUID 是如何生成的,但我猜想如果您在同一毫秒内从同一 MAC 地址创建了两个单独的 UUID,那么它们将完全相同。这是真的吗? 我想我是在问
当我使用 python uuid 模块中的 UUID() 函数检查我们的测试 uuid 之一时,我遇到了这种奇怪的行为。 从 uuid 导入 UUID uuid1 = UUID('00000000-0
开始使用 java.util.UUID。我的问题是如果我有两个 UUID 变量,比如 u1 和 u2,并且我想检查它们是否相等,我可以安全地使用表达式 u1 == u2 还是必须编写 u1 .equa
我浏览了 python UUID 模块的文档。 >>> uuid.uuid4() UUID('82fe5629-6680-4b13-a4e3-7a082f10e038') >>> uuid.uuid4
我正在创建一个程序,我在其中大量使用 UUID 来识别用户和组等内容。鉴于 UUID 已经被占用的可能性极低,我是否应该担心发生碰撞的可能性? 最佳答案 这在很大程度上取决于 A)您的要求 B)底层实
您应该使用哪个版本的 UUID?我看到很多帖子解释了每个版本的含义,但我很难弄清楚什么最适合哪些应用程序。 最佳答案 有两种不同的方式生成 UUID。 如果您只需要一个唯一 ID,则需要版本 1 或版
我知道我们可以轻松提取 uuid 版本号。有没有可靠的方法来提取时间戳、MAC 地址等信息? 谢谢! 最佳答案 符合标准的 UUID 可能是多种变体之一,它看起来像这样: AAAAAAAA-BBBB-
我可以干净地使用私有(private) UUID 变体/版本吗? 我使用我基本上认为是大整数的随机 UUID。现在,我想生成一个“私有(private)”UUID,它不基于众所周知的 5 个变体/版本
我已阅读 man 页面,但我不明白 name 和 namespace 的用途。 For version 3 and version 5 UUIDs the additional command lin
我目前正在项目中使用 boost::uuids::uuid,并且我想序列化包含 boost::uuids::uuid 的对象。我尝试了下面的简单示例,但出现错误: /usr/include/boost
我正在使用 Datastax Java 驱动程序在 Cassandra 数据库中执行基本的插入语句。我的主键列是uuid类型。从我在官方文档中看到的,在 Cassandra 中调用 uuid() 函数
会抛出异常吗? UUID() 是否会悄无声息地失败?是否有任何情况下“myStatus”来自 myStatus = True myUUID = uuid.UUID( someWeirdValue )
在我的 Android 应用程序中,我有这种采用 UUID 的方法。不幸的是,当我这样做时: OverviewEvent overviewevent = eventAdapter.getOvervie
我有一个简单的 mongo 迁移框架,它正在执行一些传递给它的脚本。 现在我想将我的 LUUID 迁移到 UUID。我写了以下内容: function fixIds(collectionName) {
我有一个非常奇怪的问题是我得到一个有效的 UUID 不是一个有效的 UUID,例如: 'fd31b6b5-325d-4b65-b496-d7e4d16c8a93' is not a valid UUI
我正在测试 Goa对于一个 API。我想使用 uuid 作为 ID 数据类型。我在 controller.go 中修改了以下函数: // Show runs the show action. func
我有一个包含 uuid 和系统列的表。我需要一个查询来仅返回具有 system=1 的 uuid,而不返回具有 system= 1 和 2 的 uuid 最佳答案 SELECT * FROM
我很想了解在 Avro 中编码一种非常特定类型的数据的最佳实践:UUID。 最佳答案 到目前为止,我发现的唯一方法是定义自定义 UUID: { "namespace" : "your.namesp
我是一名优秀的程序员,十分优秀!