gpt4 book ai didi

php - 学说注释类型 ="guid"和策略 ="UUID"行为?

转载 作者:行者123 更新时间:2023-12-03 01:03:02 25 4
gpt4 key购买 nike

好的,所以我只想知道这个注释的行为是做什么的:

/**
*
* @ORM\Id
* @ORM\Column(name="id", type="guid")
* @ORM\GeneratedValue(strategy="UUID")
*/
protected $id;

当我向表中插入行时,键是否按递增顺序排列?

我确实知道按键并不像00001000002那么简单,而且它的行为类似于

  • 007f13ff-ce26-11e4-8e3d-a0b3cce9bb7e
  • 00805a63-ce26-11e4-8e3d-a0b3cce9bb7e
  • 0b1b6ca9-d178-11e4-8e3d-a0b3cce9bb7e

但我的问题是,键是否按特定顺序排列,例如第一个插入的行是比最后一个值更低的字母数字值......总是?

最佳答案

简短回答:UUID 没有特定的顺序。

一些背景

UUID是自动增量整数的替代方案,由于它们具有一些优点,因此越来越多地被使用。

  1. 当您插入 65537 条记录(或类似的 2^x + 1,具体取决于 ID 的原始大小)时,您不会破坏您的应用程序。最糟糕的情况是您有一个重复的标识符,但这不太可能: https://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates

  2. 您可以在存储记录之前在代码中生成它们;您不必从数据库获取“last_insert_id”。这很好,例如当您还必须将一些相关记录存储在不同的表中时(当然 Doctrine 可以为您处理这个问题,但这是另一个故事)。

  3. 您不会将表中的记录数泄露给可以读取当前订单 ID 的聪明人:-)

关于排序

在当前使用的最常见版本(v4)中,UUID 是纯粹随机的,因此它们没有特定的顺序。

版本 1 UUID 是 60 位时间戳与 48 位 MAC 地址的组合。

当您使用 Doctrine UUID 策略时,您基本上是在使用数据库特定的实现(即 UUID() 函数)。对于 MySQL 5.7,它是 v1 兼容模式,生成的 UUID 为

aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

哪里

  • aaaaaaaa 是时间戳的低位部分
  • bbbb 是时间戳的中间部分
  • cccc 是时间戳的高位部分
  • dddd 在时间调整时添加时间唯一性
  • eeeeeeeeeeee 是节点 ID(MAC 地址)

由于时间戳是相反的,如果你在短时间内产生多个UUID,你会对它们进行排序,但从长远来看它们将不会被排序。考虑使用当前秒数作为 UUID 的第一部分。

注意:感谢 @Etki 评论,答案得到了改进,它增加了宝贵的贡献,并迫使我了解有关该主题的更多信息。

关于php - 学说注释类型 ="guid"和策略 ="UUID"行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com