问题标签 [rfc4122]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mongodb - 大型分布式系统中 ObjectId 与 UUID 的冲突概率
考虑到 UUID rfc 4122(16 字节)比 MongoDB ObjectId(12 字节)大得多,我试图找出它们的碰撞概率比较。
我知道这不太可能发生,但在我的情况下,大多数 id 将在大量移动客户端中生成,而不是在有限的一组服务器中生成。我想知道在这种情况下,是否有合理的担忧。
与所有 id 由少量客户端生成的正常情况相比:
- 自文档创建以来,检测冲突可能需要几个月的时间
- ID 是从更大的客户群中生成的
- 每个客户端的 ID 生成率较低
go - 多个 goroutine 中的命名空间 uuid
我想用 go 语言创建一个“无冲突”的唯一 id,用于高度可扩展的应用程序。
维基百科推荐 UUID 的命名空间变体(我只能假设是指版本 3 或 5) 维基百科特别指出:
在分布式应用程序需要唯一标识符的情况下,即使合并来自多个设备的数据,UUID 也不会发生冲突,每个设备上使用的种子和生成器的随机性在应用程序的生命周期内必须是可靠的。如果这不可行,RFC4122 建议使用命名空间变体。
我在这方面遇到了一些困难
版本 3 和 5 需要对数据进行哈希处理,这似乎是不必要的事情,原因如下:
1.1。我的应用程序可能使用相同的数据(我想要不同的 id)
1.2. 我假设在数据泄漏方面,内部 random() 熵被认为是安全的,我不明白为什么需要加密散列(因为我猜散列需要比一些种子计算更多的资源)。
命名空间应该是一个值,可以防止在高并发环境中可能出现的冲突。在 GO 中,goroutine 可以并行运行,并且由于服务器性能高可能使用相同的种子(如维基百科所述)。我假设命名空间的最佳值是 goroutine 的 id,因此可以避免在同一台机器上发生冲突。我找不到任何正确的方法来检索当前 goroutine 执行的唯一 id。
如果实际上维基百科使用命名空间组件恢复到版本 4(随机),我该如何生成这样的 guid?文档没有显示这种选项
TL;DR: 如何在 GOLang 中正确安全且可扩展地生成唯一 ID?
uuid - 实施 RFC 4122 时,基于时间的 UUID 不遵循创建顺序
我正在创建一个自定义算法来将信息嵌入到timeUUID中。在学习RFC 4122时。在规范中,版本 1 UUID 具有以下结构:
我发现时间戳的下半部分(最右边的 32 位)位于 ID 前面,使其成为排序 UUID 时最相关的部分。我不明白的是,在对 UUID 进行排序时,该规范是如何工作的,排序将遵循创建顺序。
为了说明这个问题,请在此处找到两个示例,其中时间戳 t1 > t2 但创建的具有该时间戳的 UUID 将按相反的顺序排列。
转化为以下部分
由于在这种情况下,最低有效字节与顺序无关,为了简化起见,我将忽略它。
使用这些时间戳生成的 UUID 是
显然 UUID1 < UUID2 即使它的时间戳是相反的顺序。
我的分析有什么问题?
python - `uuid.getnode` 在 Anaconda 中返回不同的值
运行uuid.getnode()
时,在 Anaconda 环境中运行时和在“常规”venv 中运行时,我会得到不同的值。
在 venv 中运行时,我得到了计算机的实际 MAC 地址,这与我在虚拟环境(50-xx-xx-xx-xx-xx)之外运行的值相同。
但是,在 Anaconda 环境中运行时,我得到一个不同的(可能是随机的)值。此外 - 当在不同进程的同一环境中运行时,我得到不同的 MAC 地址(ed-xx-xx-xx-xx-xx、65-xx-xx-xx-xx-xx、8b-xx-xx-xx- xx-xx等)。我不得不注意到,根据 的文档uuid.getnode
,返回的值确实是随机的,因为它们代表 multicast-addresses。
谁能解释一下?
有谁知道如何在 python 中获得另一个唯一的跨平台每台计算机标识符而无需额外的软件包?
谢谢!