雪花算法逆推创建时间

阅读: 评论:0

雪花算法逆推创建时间

雪花算法逆推创建时间

雪花算法逆推创建时间

雪花算法由 时间戳 + 机器码+ 序列化组成

github/sony/sonyflake中的雪花算法举例

源码如下

时间戳是从一个指定的startTime过去的时间。(从toSonyflakeTime可知时间进去到毫秒级的前1位)

得到id的位移方法

逆推方法

生成时间 = id >> (机器码位数 + 序列号位数) + 起始时间

package mainimport ("fmt""github/sony/sonyflake""time"
)func main() {var st sonyflake.Settingssf := sonyflake.NewSonyflake(st)if sf == nil {panic("sonyflake not created")}id, err := sf.NextID()if err != nil {panic(err)}startTime := toSonyflakeTime(st.StartTime)fmt.Println("gen id :", id)fmt.Println("start_time:", startTime)fmt.Println("spend:", time.Now().UnixMilli()-startTime.UnixMilli())t := id >> (sonyflake.BitLenMachineID + sonyflake.BitLenSequence)fmt.Println("need :", t)res := startTime.UnixNano()/1e7 + int64(t)fmt.Println(time.UnixMilli(res * 10))//279004813828
}
func toSonyflakeTime(t time.Time) time.Time {if t.IsZero() {return time.Date(2014, 9, 1, 0, 0, 0, 0, time.UTC)}return t.UTC()}

结果如下

计算的作用

数据库进行分片如果是根据时间规则切分的,可以利用id直接计算出所在的表的分表名。能排除大量的查找。

本文发布于:2024-01-30 04:36:16,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170656058019264.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:算法   雪花   时间
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23