雪花算法,一文拿捏

1、产生背景

我们先思考三个问题,有助于我们去理解为什么会产生 雪花算法

问题一:在Mysql分布式框架中,为什么不使用自增主键

问题二:为啥不用UUID做主键,会存在什么问题?

下面将会一一的去解释这些问题

(1)在Mysql分布式框架中,为什么不使用自增主键

        首先,即使是做分布式,将数据库做水平分库分表,我们都要保证一个非常非常重要的一点,在不同分库,不同分表中,不能够出现相同的主键,否则的话会出先数据的歧义,那么如果用自增主键的话,首先我们需要保证一点,在不同的分库分表中,依旧需要去保证这个自增主键的唯一性,怎么解决呢?我们只能去规定某一个节点去存储0-5000,然后某一个节点去存储5001-10000,如果是这样的话,不同的节点内的这个自增主键是一定不会冲突的,但是有一点,很笨重,不易去做拓展,凭什么我这个节点就只能存储5000个?第二点,当我录入前5000个时,只会去访问某一个节点,那么去插入数据,这段时间只会往这一个节点去录入,这就违背了负载均衡。

(2)为什么不用UUID去做主键

第一点,UUID太长啦,存储的话不方便

第二点,主键在Innodb的存储引擎下,主键是一定有一个聚簇索引的,UUID是无序的,创建B+树时会因为UUID的无序导致频繁的分裂,很耗费时间

2、雪花算法是基于什么原理实现的

本质上,雪花算法最后的结果是一个64bit长度的long类型的数字,其中第一位为标志位,表示是否可用,然后的41位表示时间戳,unix的时间戳,最长可以表示69年,然后后面的位数可以表示机器号与序列号,然后就可以保证雪花的唯一性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值