栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

雪花算法php实现

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

雪花算法php实现

        SnowFlake 算法(雪花算法),是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的。

一、雪花算法
原理图:

1bit-不用:0,这个是无意义的。因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。

41bit-时间戳:表示的是时间戳,41 bit 可以表示的数字多达 2^41 - 1,也就是可以标识 2 ^ 41 - 1 个毫秒值,换算成年就是表示 69 年的时间。

10bit-工作机器id:表示服务器id,代表的是这个服务最多可以部署在 2^10 台机器上,也就是 1024 台机器。

12bit-序列号:表示1毫秒内产生的不同 id,12 bit 可以代表的最大正整数是 2 ^ 12 - 1 = 4096,也就是说可以用这个 12 bit 代表的数字来区分同一个毫秒内的 4096 个不同的 id。

二、php实现雪花算法

分布式系统为什么不用自增id,要用雪花算法生成id?

        为什么数据库id自增和uuid不适合分布式id id自增:当数据量庞大时,在数据库分库分表后,数据库自增id不能满足唯一id来标识数据;因为每个表都按自己节奏自增,会造成id冲突,无法满足需求。              

    分库分表:

        分表就是把一个表的数据放到多个表中,将一个库的数据拆分到多个库中 uuid:UUID长且无序;主键应越短越好,无序会造成每一次UUID数据的插入都会对主键地城的b+树进行很大的修改 在时间上,

    1)uuid由于占用的内存更大,所以查询、排序速度会相对较慢;

    2)在存储过程中,自增长id由于主键的值是顺序的,所以InnoDB把每一条记录都存储在上一条记录的后面。当达到页的最大填充因子时(innodb默认的最大填充因子为页大小的15/16,留出部分空间用于以后修改),下一条记录就会写入新的页面中。一旦数据按照这种方式加载,主键页就会被顺序的记录填满。而对于uuid,由于后面的值不一定比前面的值大,所以InnoDB并不能总是把新行插入的索引的后面,而是需要为新行寻找合适的位置(通常在已有行之间),并分配空间。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/2447.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号