js 通过时间戳以及随机数生成 uuid
@toc
一. 简介
UUID 简介: UUID 的全称是 Universally Unique Identifier,即通用唯一识别码。它是一个用于计算机系统中以保证在一定范围(例如在同一台机器、同一个网络中或者在多个网络之间)的全局的唯一性标识符。标准的 UUID 格式由 32 个 16 进制数字组成,以连字符分为五组,形成一个 36 字符(32 个字符和 4 个连字符)的字符串。例如:123e4567-e89b-12d3-a456-426614174000。
二.版本规范
UUID 的规范由开放软件基金会(Open Software Foundation, OSF)的一部分,即分布式计算环境(Distributed Computing Environment, DCE)所定义。目前的标准由 RFC 4122 定义,该标准描述了 UUID 的不同变体和版本。
UUID 可以保证时间和空间的唯一性,它基于时间、机器的网络地址(例如,MAC 地址)、随机数或伪随机数等元素生成。UUID 有五个版本,每个版本有不同的生成方法:
版本 1(基于时间的 UUID):结合当前时间戳、机器的 MAC 地址以及一些随机或伪随机的序列来生成 UUID,确保在时间和空间上的唯一性。
版本 2(DCE 安全的 UUID):与版本 1 相似,但增加了 POSIX UID/GID 等和特定于 DCE 的信息来生成 UUID。
版本 3(基于名字的 UUID,使用 MD5 散列):通过散列命名空间和名字生成 UUID,它使用 MD5 散列算法。
版本 4(随机 UUID):使用随机数或伪随机数生成 UUID。这个版本不依赖于机器的硬件特征,因此无法保证其在时间和空间的唯一性,但实际中,因其极高的随机性,使得碰撞的可能性非常低。
版本 5(基于名字的 UUID,使用 SHA-1 散列):在 UUID 版本 3 的基础上,用 SHA-1 散列算法代替 MD5,生成方式和版本 3 一样。每个 UUID 版本都有特定的使用场景,但在实际应用中,版本 1 的时间基和版本 4 的随机数基 UUID 是最常用的。版本 3 和版本 5 在需要通过名字生成一致而唯一的 UUID 时使用。
UUID 的标准形式包括 32 个 16 进制的数,以连字符分为 5 组,形式为 8-4-4-4-12 这样的 32 个字符:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx。其中’M’表示 UUID 版本,‘N’表示 UUID 变体。RFC 4122 要求这些 UUIDs 的变体被设置为 10xx(即二进制的’10’,其中 x 是上述的任何位),以便和其他 UUIDs 的变体相区分。
三.应用场景
分布式系统:在分布式系统中,可以通过 UUID 生成独一无二的标识,避免数据标识的冲突。
数据库的主键:在数据库中,使用 UUID 作为记录的主键可以保证在合并或是多数据库之间同步时的唯一性。
文件命名:为了避免文件命名冲突,特别是在网络共享环境中,可以使用 UUID 生成唯一的文件名。
网络协议:某些协议需要唯一的操作标识,例如在一些版本的 RPC(远程过程调用)中,就会用到 UUID。
软件组件的标识:在大型软件系统中,为了保证组件的唯一性,开发者也会使用 UUID。
四.优缺点
1.优点:
全局唯一性:UUID 的设计能够保证全球范围内的唯一性,这在分布式系统中尤其有价值。
易生成:UUID 可以在没有中央管理机构的情况下生成,简化了系统的设计和实施。
匿名性:UUID 不包含关于生成它的计算机的信息,维护了用户和数据的匿名性。
2.缺点:
大小和空间利用:UUID 的存储大小为 128 位,显著大于传统的 32 位或 64 位整数主键,对存储空间和索引效率有一定影响。
可读性差:由于其复杂的结构,UUID 对于人类来说很难识别和记忆。
性能问题:在一些数据库中,使用 UUID 作为主键索引的效率可能低于传统的自增主键,尤其是在排序和插入操作时。
综合来看,UUID 在需要确保唯一性或在分布式系统下管理标识时非常有用,但在考虑高性能数据库操作时,可能需要评估其带来的潜在性能影响。
五.代码示例
1.代码:
2.解析:
版权声明: 本文为 InfoQ 作者【木偶】的原创文章。
原文链接:【http://xie.infoq.cn/article/21d60cd4dfb85c511aa5e6699】。文章转载请联系作者。
评论