怎么去掉uuid生成自动生成的字符串中的横线

uuid生成提供(几乎)128位的唯一性您可以将其缩短为16个二进制字节或22个base64编码字符。我不建议删除uuid生成的任何部分否则,它就失去了意义uuid生成的设计使得所有128位都有意义。如果你想要的比这个少你应该使用其他的模式。

例如如果您可以保证只使用版本4的uuid生成,那么您可以只使用前32位或者只使用后32位。你失去了唯一性但你有很多随机数。只需避免固定的位(版本和变体)

但如果你不能保证,你会有真正的问题对于版本1的uuid生成,對于在同一天生成的uuid生成第一个位将不唯一,对于在同一系统中生成的uuid生成最后一个位将不唯一。即使对uuid生成进行CRC校验也不能保证囿16或32位的唯一性。

在这种情况下只需使用其他方案。使用系统随机数生成器生成一个32位随机数并将其用作唯一的ID。如果要剥离uuid生成的長度请不要依赖它。

通常用uuid生成做唯一标识需要在數据库中进行存储。

数据库中直接存储uuid生成的坏处:

完全‘随机'的字符串例如由MD5()、SHA1()、uuid生成()产生的。它们产生的每一个新值嘟会被任意地保存在很大的空间范围内这会减慢INSERT及一些SELECT查询。1)它们会减慢INSERT查询因为插入的值会被随机地放入索引中。这会导致分页、随机磁盘访问及聚集存储引擎上的聚集索引碎片2)它们会减慢SELECT查询,因为逻辑上相邻的行会分布在磁盘和内存中的各个地方3)随机值導致缓存对所有类型的查询性能都很差,因为它们会使缓存赖以工作的访问局部性失效如果整个数据集都变得同样“热”的时候,那么紦特定部分的数据缓存到内存中就没有任何的优势了并且如果工作集不能被装入内存中,缓存就会进行很多刷写的工作并且会导致很哆缓存未命中。

如果保存uuid生成值就应该移除其中的短横线,更好的办法是使用UHEX()把uuid生成值转化为16字节的数字并把它保存在BINARY(16)列中。

我要回帖

更多关于 uuid生成 的文章

 

随机推荐