此代码是否会损害guid的唯一性。我正在尝试使字符串值可以排序。
{{1}}
答案 0 :(得分:2)
GUID很容易排序。但它们并不适用于排序,如果您这样做,则不能依赖GUID的排序列表来匹配其创建顺序。
伪随机性的熵是依赖于实现的,有时是even hardware-dependent。
即使UuidCreateSequential
API函数的文档does not promise依赖任何排序顺序,未来的实现也可能选择下降而不是提升,留下空白或替代。顺序与订单不是一回事。
您创建的字符串不再保证是唯一的,除非您可以强制执行不会有两个时间戳相同(一个好的开始是使用四位数年份!记得2000?)
这是因为我们不知道下一个GUID与前一个GUID的不同之处。如果碰巧在左侧部分被时间戳覆盖,那么你最终可能会得到两个相同的字符串。
一种可能性是仅使用唯一的时间戳。您可以自由地格式化它们,使它们看起来像GUID并解析为GUID(无论出于何种原因)。您可以使用零填充来填充它:
{20180413-2213-2490-0000-000000000000}
最后你的问题可能是X-Y问题。告诉我们您实际需要实现的内容,并且不要犹豫,添加字段,列或实现这两个目标所需的任何内容:唯一键和自定义排序顺序,而不会影响GUID的概念。 / p>