Vb.net GUID可排序字符串唯一性
此代码是否会破坏guid唯一性。我试图使字符串值可以排序Vb.net GUID可排序字符串唯一性,vb.net,Vb.net,此代码是否会破坏guid唯一性。我试图使字符串值可以排序 Guid.Parse(Now.ToString("yyMMddHH-mmss-fff") & guidi.ToString.Substring(17)) <System.Runtime.CompilerServices.Extension> _ Public Function NewSeqGUID(guidi As Guid) As Guid guidi = Guid.Parse(Now.ToString("
Guid.Parse(Now.ToString("yyMMddHH-mmss-fff") & guidi.ToString.Substring(17))
<System.Runtime.CompilerServices.Extension> _
Public Function NewSeqGUID(guidi As Guid) As Guid
guidi = Guid.Parse(Now.ToString("yyMMddHH-mmss-fff") & guidi.ToString.Substring(17))
Return guidi
End Function
Guid.Parse(Now.ToString(“yymmddh mmss fff”)&guidi.ToString.Substring(17))
_
公共函数NewSeqGUID(guidi作为Guid)作为Guid
guidi=Guid.Parse(Now.ToString(“yymmddh mmss fff”)&guidi.ToString.Substring(17))
归归归地
端函数
guid易于排序。但是它们不是用来排序的,如果你这样做了,你就不能依靠排序后的guid列表来匹配它们的创建顺序。它们的伪随机性的熵有时依赖于实现 即使
UuidCreateSequential
API函数的文档可以依赖任何排序顺序,未来的实现可能会选择下降而不是上升、留下间隙或替代。顺序和顺序不是一回事
您创建的字符串不再保证是唯一的,除非您可以强制执行任何两个时间戳都不会相同(一个好的开始是使用四位数的年份!还记得2000吗?)
这是因为我们不知道下一个GUID与上一个GUID的不同之处。如果它恰好位于被时间戳覆盖的左侧部分,那么最终可能会得到两个相同的字符串
一种可能是只使用唯一的时间戳。您可以自由地格式化这些文件,使它们看起来像GUID,并解析为GUID(无论出于何种原因)。您可以使用零填充来填充它:
{20180413-2213-2490-0000-000000000000}
最后,你的问题可能是一个X-Y问题。告诉我们更多关于您实际需要实现的内容,并毫不犹豫地添加字段、列或实现这两个目标所需的任何内容:唯一键和自定义排序顺序,同时不影响GUID的概念。第一个始终引发异常,第二个不编译,所以关于它的独特性的问题根本没有意义。您不能创建一个GUID来开始使用该代码,无论是否唯一。我不确定您要做什么,但这不会创建唯一的GUID。这应该做什么?这对我一点用都没有。另外,
Guid.ToString()
已可排序。请发布您正在使用的实际代码,您的意图是这是对guid概念的一个彻底的巴斯德化。您不能滚动自己的guid并仍将其称为guid。这完全违背了guid的全部观点。如果您想要自己的可排序id,那么只需定义您的id并将“guid”排除在外。不,这些将不再是guid。您的数据库中可能需要一个可排序列,它同时是主键或复制id?告诉我们更多关于引导您走出死胡同的应用程序的信息。客户端希望导出的文本值可以排序。我只去了2年的领域,因为要求未来的记录,不认为这将持续到3000年。文本值中有更多的alpha和毫秒似乎更有效地使其独特。我只想告诉他们,如果不损害数据完整性,这种情况是不会发生的。我明白你的困境。这不是客户的合理要求,他们真的应该有第二列对数据进行排序。如上所述,如果您可以添加一个查找机制来保证时间戳是唯一的,您不需要将其用作复制id,或者需要防止与其他地方创建的类似数据集发生冲突,并且项目的数量不会耗尽“地址空间”,那么您就可以满足他们的请求Id可以在不同的系统中生成,但不能保证它们在创建时会连接到服务器。将存储时间戳标记信息,这是正在使用的排序。我收到他们的请求,他们希望ID可以排序。但是由于重复ID的代价,请求是不可行的。