You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

.NET基于UUID V7的GUID是否应具备顺序性?

.NET基于UUID V7的GUID是否应具备顺序性?

你说得太对啦!UUID V7的核心设计初衷之一就是依托时间戳实现顺序生成,从规范层面来说,后生成的UUID V7确实应该比先生成的更大,你的理解完全没问题。

UUID V7把高精度的时间戳(精确到毫秒级别,甚至支持更细的粒度)放在了GUID的前几个字节,而且采用大端序存储——这意味着当你用CompareTo方法比较两个GUID时,会先对比时间戳部分。只要两个GUID的生成时间有先后(哪怕间隔极短),后生成的那个时间戳字段必然更大,整体的GUID比较结果也就会返回1。

针对你给出的这段代码:

var guid1 = Guid.CreateVersion7();
var guid2 = Guid.CreateVersion7();
var isGreater = guid2.CompareTo(guid1);

正常情况下,isGreater确实会始终返回1,也就是guid2一定比guid1“大”。哪怕是在同一毫秒内连续生成多个UUID V7,.NET的实现也会通过内部的递增计数器来保证顺序,不会出现后生成的GUID反而更小的情况。

备注:内容来源于stack exchange,提问作者Ricardo Peres

火山引擎 最新活动