Har*_*mpo 12 php symfony doctrine-orm
好的,所以我只想知道这个注释的行为:
/**
*
* @ORM\Id
* @ORM\Column(name="id", type="guid")
* @ORM\GeneratedValue(strategy="UUID")
*/
protected $id;
Run Code Online (Sandbox Code Playgroud)
当我向表中插入行时,键是否按递增顺序排列?
我知道键不是那么简单00001,000002它的行为就像
007f13ff-ce26-11e4-8e3d-a0b3cce9bb7e00805a63-ce26-11e4-8e3d-a0b3cce9bb7e 0b1b6ca9-d178-11e4-8e3d-a0b3cce9bb7e 但我的问题是,像第一个插入行一样的特定顺序的键是一个比最后一个值更低的字母数字值.总是?
Fra*_*eni 20
简短回答:UUID没有特定的顺序.
UUID是自动增量整数的替代品,它们越来越多地被使用,因为它们具有一些优点.
插入65537记录时,您不会破坏您的应用程序(或类似的2 ^ x + 1,具体取决于ID的原始大小).可能发生的最糟糕的是你有一个重复的标识符,但这非常不理想:https://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates
您可以在存储记录之前在代码中生成它们; 您不必从数据库中获取"last_insert_id".这很好,例如当你还必须在一个不同的表中存储一些相关记录时(当然Doctrine可能会为你处理这个,但这是另一个故事).
您不会将表格中的记录数量提供给能够读取当前订单ID的聪明人:-)
在当前使用的最常见版本(v4)中,UUID是纯随机的,因此它们不是特定的顺序.
版本1 UUID是60位时间戳与48位MAC地址的组合.
当您使用Doctrine UUID策略时,您基本上使用的是数据库特定的实现(即UUID()函数).在MySQL 5.7的情况下,它是一个v1兼容的模式,它产生UUID
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
Run Code Online (Sandbox Code Playgroud)
哪里
aaaaaaaa 是时间戳的低部分bbbb 是时间戳的中间部分cccc 是时间戳的重要组成部分dddd 在调整时间的情况下增加时间唯一性eeeeeeeeeeee 是节点ID(MAC地址)由于时间戳相反,如果您在很短的时间内生成多个UUID,您将对它们进行排序,但从长远来看,它们不会被排序.考虑使用当前秒作为UUID的第一部分.
注意:由于@Etki评论,答案有所改善,这增加了宝贵的贡献并迫使我学习更多关于这个主题的内容.