雪花算法!

雪花算法(Snowflake Algorithm)是一种用于生成唯一标识符(ID)的算法,

雪花算法的ID由由三个部分共64位组成


1时间戳:占用41位,精确到毫秒级,可以支持约69年的时间戳。

2工作机器ID:占用10位,用于标识不同的机器,可以支持最多1024台机器。

3序列号:占用12位,用于标识同一毫秒内生成的不同ID,可以支持每台机器每毫秒产生最多4096个ID。

通过将这些部分组合在一起,雪花算法可以在分布式系统中生成全局唯一的ID.由于每个部分的位数是固定的,不同机器生成的ID也是唯一的 可以保证在同一毫秒内生成的ID是唯一的(特点1:唯一性)。

由于时间戳部分占据了较高的位数,因此生成的ID在时间上是有序的。这种有序性有助于在数据库中进行索引和查询操作。(特点2:有序性)

雪花算法的实现简单高效。生成ID的过程主要是基于位运算和位移操作,因此生成ID的速度较快。(特点3:高性能)

缺点就是依赖于系统时钟的准确性    如果系统时钟发生回拨或者不同步,可能会导致生成的ID出现重复或者无序的情况,

需要配置和管理  工作机器的ID:在分布式环境下,为了避免不同机器生成的ID冲突,
        需要为每台机器配置唯一的工作机器ID。这需要额外的配置和管理工作,特别是在动态扩缩容的场景下。。


在集群环境下使用雪花算法生成主键ID,对MySQL插入性能可能会产生一定的影响。这主要取决于以下几个因素:

1单机性能:
    雪花算法生成的ID是有序递增的,在高并发写入场景下,多个线程同时插入数据,可能会导致写入热点集中在某个特定的数据库页上,影响插入    性能。

2分布式环境:
    在分布式环境下,不同的机器生成的ID可能会存在冲突的风险。

3数据库索引:
    雪花算法生成的ID通常作为主键或唯一索引使用,可能会对数据库的索引性能产生一定的影响。特别是在高并发写入场景下,频繁地插入新的    ID可能导致索引的频繁更新,从而影响插入性能。

  11异步处理:可以降低对数据库的写入压力。
  22分库分表:将数据分散到多个数据库表中,可以减轻单个数据库的写入压力
   33 数据库优化:合理设计数据库表结构,可以提升插入性能。


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值