唯一ID可以标识数据的唯一性。在分布式系统中生成唯一ID的解决方案有很多。常用方法如下:依赖数据库,使用如MySQL自增列或Oracle序列等UUID随机数雪花雪花算法(本文将讨论)1.数据库和UUID方案的不足使用数据库自??身-自增序列:读写分离时,只有master节点可以进行写操作,可能存在单点故障风险库,数据迁移和合并比较麻烦UUID随机数:使用无意义的字符串,UUID是以字符串形式存储,不排序,数据量大时查询效率比较低。有两个相同的雪花。每片雪花都有自己美丽独特的形状,独一无二。雪花算法也意味着生成的ID像雪花一样独一无二。1.雪花算法概述雪花算法生成的ID是纯数字,是按时间排序的。它的原始版本是scala版本,后来又出现了Java、C++等许多其他语言的版本。2、组成结构大致由四部分组成:首空字符、时间戳差、机器(进程)码、流水号。3.特点(自增,有序,适合分布式场景)时间位:可以按照时间排序,有助于提高查询速度。MachineID位:适用于在分布式环境中标识多个节点中的每个节点。可以根据节点数量和部署情况设计分为10位机器位,比如分5位表示进程位等。序列号位:是一系列自增的id,可以支持同一节点在同一毫秒内生成多个ID序列号。12位计数序号支持每个节点每毫秒产生4096个ID序号。雪花算法可以根据项目情况和自身需求进行一定的修改。3.雪花算法的缺点雪花算法的ID在单机系统上是递增的,但是在分布式系统多节点的情况下,不能保证所有节点的时钟不完全同步,所以可能存在是ID未全局递增的情况。4.总结分布式唯一ID的方案有很多种。本文主要讨论雪花算法。组成结构大致分为无效位、时间位、机器位、序号位。其特点是自增、有序、纯数字查询效率高,不依赖于数据库。适用于分布式场景应用,具体实现细节可根据需求进行调整。
