# ay-snowflake **Repository Path**: g_night/ay-snowflake ## Basic Information - **Project Name**: ay-snowflake - **Description**: 雪花算法,直接引用即可 - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-06-14 - **Last Updated**: 2024-09-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: go-main ## README # ay_snowflake ## 介绍 雪花算法,可直接引用该包使用, ## 分析 ### 分布式ID的特点 #### 全局唯一性 不能出现有重复的ID标识,这是基本要求。 #### 递增性 确保生成ID对于用户或业务是递增的。 #### 高可用性 确保任何时候都能生成正确的ID。 #### 高性能性 在高并发的环境下依然表现良好。 ```markdown * SnowFlake的结构: * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 * 1位标识,正数是0,负数是1,一般选择0 * 41位时间截(毫秒级),(2 ^ 41)-1 =2199023255551 ms ,除以(1000*60*60*24*365)ms /年= 69年 * 10位的数据机器位,datacenterId和workerId各一半,数据中心和机器分别可以部署512个节点,512 * 512 = 262144 个节点 * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号 * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分) * 每秒能够产生26万ID左右。 ``` ## 使用说明 ```go // 使用说明 func TestExample(t *testing.T) { // 输入 机器id,数据中心id worker, err := aysnowflake.InitSnowFlake(0, 0) if err != nil { fmt.Println(err) return } id := worker.GetId() fmt.Println("id =", id) } ```