什么时候你真正被迫使用 UUID 作为设计的一部分?

2023-12-13

我真的不明白有什么意义UUID。我知道碰撞的概率是实际上为零, but 实际上为零甚至接近不可能。

有人可以举一个你别无选择只能使用 UUID 的例子吗?从我见过的所有用途中,我可以看到一种没有 UUID 的替代设计。当然,设计可能会稍微复杂一些,但至少它不会出现非零的失败概率。

UUID 对我来说就像全局变量。全局变量有很多方法可以使设计更简单,但这只是懒惰的设计。


我为 Ruby 编写了 UUID 生成器/解析器,因此我认为自己对这个主题相当了解。 UUID 有四个主要版本:

版本 4 UUID 本质上只是从加密安全随机数生成器中提取的 16 字节随机数,并通过一些位操作来识别 UUID 版本和变体。这些发生冲突的可能性极小,但如果使用 PRNG 或者你碰巧运气非常非常非常差,这种情况就有可能发生。

版本 5 和版本 3 UUID 分别使用 SHA1 和 MD5 哈希函数,将命名空间与一段已经唯一的数据组合起来以生成 UUID。例如,这将允许您从 URL 生成 UUID。仅当底层哈希函数也发生冲突时,这里的冲突才可能发生。

版本 1 UUID 是最常见的。他们使用网卡的 MAC 地址(除非被欺骗,否则应该是唯一的),加上时间戳,加上通常的位旋转来生成 UUID。如果机器没有 MAC 地址,则使用加密安全随机数生成器生成 6 个节点字节。如果按顺序生成两个 UUID 的速度足够快,使得时间戳与前一个 UUID 匹配,则时间戳会增加 1。除非发生以下情况之一,否则不应发生冲突: MAC 地址被欺骗;一台机器运行两个不同的 UUID 生成应用程序,同时生成 UUID;两台没有网卡或没有用户级访问 MAC 地址的机器被赋予相同的随机节点序列,并在完全相同的时刻生成 UUID;我们用完了表示时间戳的字节并翻转回零。

实际上,这些事件都不是在单个应用程序的 ID 空间内偶然发生的。除非您在互联网范围内接受 ID,或者在不受信任的环境中,恶意人员在 ID 冲突的情况下可能会做坏事,否则您不应该担心。重要的是要了解,如果您碰巧生成了与我相同的版本 4 UUID,则在大多数情况下,这并不重要。我在与您完全不同的 ID 空间中生成了 ID。我的应用程序永远不会知道碰撞,因此碰撞并不重要。坦率地说,在没有恶意行为者的单一应用程序空间中,地球上所有生命的灭绝早在发生碰撞之前就会发生,即使是在版本 4 UUID 上,即使您每秒生成相当多的 UUID。

另外,2^64 * 16 是 256 艾字节。例如,在单个应用程序空间中发生 ID 冲突的可能性为 50% 之前,您需要存储 256 艾字节的 ID。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么时候你真正被迫使用 UUID 作为设计的一部分? 的相关文章

  • C++ 中独立于平台的 GUID 生成?

    在 C 中以编程方式生成 GUID 或 UUID 而不依赖于特定于平台的工具的最佳方法是什么 我正在尝试为模拟中的对象创建唯一标识符 但不能依赖 Microsoft 的实现 因为该项目是跨平台的 Notes 由于这是针对模拟器的 所以我 并
  • 洋葱结构与六边形结构的比较

    它们之间有什么区别 洋葱 六边形 根据我的理解 它们是相同的 它们专注于应用程序核心的领域 并且应该与技术 框架无关 如果有的话 它们之间有什么区别 另外 我认为使用其中一种架构或什至针对 N 层架构并没有真正的优势 如果做得不好 仅仅遵循
  • android bluetoothadapter.startLeScan,按 UUID 过滤

    我想使用以下命令扫描 BLE 设备startLeScan UUID serviceUuids LeScanCallback callback 方法 现在我有一个UUID 它是一个16位的值 例如 00000000 0000 1000 800
  • 微服务版本控制

    就在运行时支持同一服务的多个版本化部署以及消费者如何使用不同版本而言 适应基于微服务的架构中的版本控制的最佳实践是什么 1 如果我们使用基于路由的版本控制作为提到的方法之一here http niels nu blog 2016 micro
  • 在事务结束时发送事件

    我有一个服务对象的接口 如下所示 为简洁起见进行了简化 public interface ItemService public Item getItemById String itemId int version public void c
  • 使用多个提供程序的客户端应用程序应使用什么设计/模式?

    这是一个与设计相关的问题 假设我们有一个名为 ClientAPI 的公共 API 其中包含一些 Web 方法 例如 CreateAccount GetAccount 根据客户的不同 我们使用许多不同的提供商来满足这些请求 假设我们有 Pro
  • 如何在 Python 中创建 GUID/UUID

    如何在 Python 中创建独立于平台的 GUID UUID 我听说有一种在 Windows 上使用 ActivePython 的方法 但它只是 Windows 因为它使用 COM 有没有使用普通Python的方法 The uuid模块 h
  • 托管扩展性框架 (MEF) 与复合 UI 应用程序块 (CAB)

    我们目前正在考虑在下一个应用程序中使用 CAB 或 MEF 我没有在 Codeplex 上看到任何有关如何处理同级控制通信的事件代理的示例 也许我错过了 MEF 中的控制间通信如何工作 此外 我们计划使用 Infragistics 它为 C
  • 呈现模型与被动视图

    我想知道上述两种模式之间的区别 当您考虑到您需要在表示模型模式中同步代码并且该代码位于表示模型本身中时 那么我认为这些模式非常相似 两者都将事件委托给演示模型 演示者 演示模型和演示者命令域模型 并且也观察域模型 当发生更改时 它们都与视图
  • UUID 作为 MySQL id 列的默认值

    我正在尝试向 MySql 8 0 17 中的现有表添加一列 该列需要包含 UUID 我正在尝试将其设置为默认值 这是我正在执行的语句 ALTER TABLE myTable ADD COLUMN UUID varchar 36 NOT NU
  • SOA架构数据访问

    在我的 SOA 架构中 我有几个世界碳基金服务 我的所有服务都需要访问数据库 我应该创建一个专门的 WCF 服务来负责所有数据库访问吗 或者 如果我的每个服务都有自己的数据库访问权限 可以吗 在一个版本中 我在一项服务中只实例化了一个实体层
  • 如何使用 UUID 生成唯一的正 Long

    我需要为我的数据库主键列生成唯一的长 ID 我以为我可以用UUID randomUUID getMostSignificantBits 但有时它也会产生一些负多头 这对我来说是个问题 是否可以从 UUID 中仅生成正长 将会有数十亿个条目
  • 定时任务应该放在哪一层?

    我正在尝试使用分层架构来实现 DDD 应用程序 我有 基础设施层 实现应用程序的技术特定部分的层 领域层 包含领域模型的层 应用层 包含与领域模型交互的干扰的层 接口层 从外部接收事件的层 经典的 3 层 基础设施 架构非常清晰 但我的应用
  • linq2sql,存储库模式 - 如何从两个或多个表查询数据?

    我使用存储库模式 和 linq2sql 作为数据访问 并拥有例如 ProductsRep 和 CustomersRep 在非常简单的场景中 数据库有两个表 产品 产品 ID 客户 ID 产品名称 日期 和顾客 客户 ID 名字 姓氏 每个存
  • 使用 boost::lexical_cast 将 UUID 转换为字符串时出现 Boost 编译错误

    我有这个代码 它基于 SO 中的几篇文章 boost uuids uuid uuid boost uuids random generator auto uuidString boost lexical cast
  • 除了 Erlang 之外,还有哪些系统是基于“绿色流程”的?

    我正在阅读这个信息页面绿线 维基百科 http en wikipedia org wiki Green thread我想知道 除了 Erlang 之外 还有哪些编程系统依赖于 绿色进程 Edit 绿线 绿色流程 基于绿色流程 Erlang
  • 当我在 MySQL 中使用 UUID 作为主键时,会如何影响性能

    我想知道当我在 MySQL 中使用 UUID 作为主键时 会对服务器的性能产生怎样或多大的影响 我想你正在使用InnoDB 无论如何你应该 因此 请阅读 高性能 MySQL 2ed 第 117 页中的以下章节 一般来说 从性能的角度来看 U
  • sqlalchemy 中的随机 ID(pylon)

    我正在使用 pylons 和 sqlalchemy 我想知道如何将一些随机 id 作为primary key 最好的方法是使用随机生成的 UUID import uuid id uuid uuid4 uuid 数据类型在某些数据库中本机可用
  • JavaFX 中的 MVC 模式与场景生成器

    我是 JavaFX 新手 根据我当前的设置 正在努力创建合适的 MVC 架构 我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类 Startup public class Portal extend
  • 堆分配对象是否有一个永不为空的唯一所有者?

    目前 我正在存储一个集合std unique ptrs 到堆分配的多态类型对象 struct Foo virtual Foo default Collection

随机推荐

  • 如何使用 Fluent API 添加所有者属性的等效项?

    如果不使用 TrackState 上的属性或为发布者 文章指定 OwnsOne 我似乎无法执行此操作 有什么方法可以在不使用属性的情况下将 TrackState 全局标记为自有类型吗 对于通过 google 访问的人 如何使用 Fluent
  • com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3005) 处的 java.lang.NullPointerException

    我今天转移到 macOS 并重新创建了一个非常简单的数据库测试项目来检查我的 mySQL 连接 但我收到 SQL 异常 无法创建与数据库服务器的连接 这是完整的日志 https pastebin com iZrktVKn 我实际上复制了我在
  • 我可以在Maya、Blender中导入tensorflow和keras吗

    我正在参加一个研讨会 我们需要自动装备角色 也许 我们会使用深度学习的方法 任务是识别身体部位 我的问题 有没有办法将 TensorFlow 和 keras 或其他神经网络与 3D 软件连接起来 对于搅拌机 您可以按照本教程进行操作 htt
  • jQuery UI - 滑块 - 如何添加值

    fiddle 我有一套价值观 是否可以在不破坏和重建幻灯片实例的情况下添加新句柄或删除其中一些句柄 就像是 slider slider addValueAt 5 或删除 新值不能等于任何实际值 因此不得超过 12 个值 我已经得到了它的自定
  • Celery工人导入错误:没有名为“项目”的模块

    当我尝试启动工作人员时 我遇到了一个问题 导入错误 没有名为 项目 的模块 回溯 最近一次调用最后一次 File usr local bin celery line 11 in
  • 根据未来结果排序

    我试图按未来布尔值对列表进行排序 我有一个 ID 列表 我需要查询外部服务以查明它们背后是否有上下文信息 我用来执行此操作的方法返回一个可选的 future 通过使用分区方法 我希望创建两个 ID 列表 一个包含上下文信息 另一个不包含上下
  • 按前缀过滤数组的本机函数

    假设我有一个包含以下成员的数组 car porsche car mercedes car toyota motorcycle suzuki motorcycle honda motorcycle motoguzzi 如何获得一个包含所有元素
  • 使用 PrettyFaces 调用 FileUploadListener 时重建 ViewScoped bean

    我已经插入了一个
  • 有没有办法在不创建变量的情况下调用需要指针的函数?

    我有这个函数调用 uint32 t func uint32 t a uint32 t b 我想用这样的整数文字来调用它 func 0 b where b is a uint32 t 有什么方法可以在不创建中间变量的情况下做到这一点 IE 我
  • R get() 函数错误

    我正在尝试填充一组 矩阵 对象 名称保存在列表中 我可以 使用 get 返回具有给定名称的对象 但我 当我使用 get 定义矩阵时遇到函数问题 我试图填充的对象 Create list of matrix names list names
  • 超出最大调用堆栈大小 - 没有明显的递归

    我花了大约 12 个小时查看这段代码 并摆弄它 试图找出哪里存在递归问题 因为我收到了 超出最大调用堆栈大小 错误 但还没有找到它 请比我聪明的人帮助我 到目前为止 我发现当我制作这个物体时 spot a circle 对象 问题消失了 但
  • 如何在主窗体之前显示辅助窗体?

    我有一个应用程序提示用户在表单中输入密码 但是 主窗体显示在次窗体之后 如何使主窗体在用户输入密码之前不显示 Edit main form public Form1 new InputPswrd Show InitializeCompone
  • 内存泄漏工具告诉我零泄漏,但内存占用量不断增加

    我正在 SDK 3 2 中对我的应用程序进行一些内存分析 我使用 泄漏 分析器来查找所有内存泄漏 并将它们全部堵住 这是一个滚动视图导航控制器应用程序 其中有图块 您单击一个图块将进入新的图块视图 依此类推 我可以深入许多级别并一直回到顶部
  • 在App Store中更改应用程序名称

    我有一个名为 X 的应用程序 它已经在应用商店获得批准 现在由于某些原因我希望它被称为 X Pro 我应该在 plist 或 ITC 中编辑什么来更改此名称 我想我应该更改bundle name或bundle display name 但是
  • 解析和打印 PHP 代码

    我最好想要一个允许我解析 PHP 的解决方案from PHP 但欢迎任何解决方案 作为我正在寻找的示例 Ruby 具有 除其他外 ruby parser gem Edit 我希望从 PHP 代码生成某种抽象语法树 除非我弄错了 否则我完全意
  • 从 grails 中的 gsp 页面进行 ajax 调用

    我是阿贾克斯新手 我正在尝试从 gsp 页面向控制器操作发送请求 但我失败了 它没有调用控制器操作并且页面正在重新加载 任何人都可以看看这个并提供帮助 这是我的查看页面如下 gt gt gt
  • 通过 GPS 位置获取城市的 WikiData 标识符

    我想获取特定 GPS 位置的城市 定居点 表示给定范围内最接近的一个或最多是最接近的 我在维基媒体数据示例中找到了一些示例查询 我尝试采用然后但我只得到错误或超时 这是我当前的查询 SELECT WHERE city wdt P31 wdt
  • JavaScript 交通灯

    img src assets red gif
  • 传递以字符 [ 开头的 JSON 请求会出现错误:GET 操作的请求格式无效 [重复]

    这个问题在这里已经有答案了 当我传递以以下开头的 JSON 请求时 我收到错误消息 GET 操作的请求格式无效 这是我的要求 在 PostMan 中同样可以正常工作 equipmentNumber 76576 systemIdentifie
  • 什么时候你真正被迫使用 UUID 作为设计的一部分?

    我真的不明白有什么意义UUID 我知道碰撞的概率是实际上为零 but 实际上为零甚至接近不可能 有人可以举一个你别无选择只能使用 UUID 的例子吗 从我见过的所有用途中 我可以看到一种没有 UUID 的替代设计 当然 设计可能会稍微复杂一