如何生成分布式系统中数据的唯一编号

前言:在MySQL数据库中,生成数据的唯一标识是使用自增主键(primary key auto_increment)进行的,但是在分布式系统中,是由多个MySQL服务器构成的集群,这个方法是无法实现唯一性的,那么在分布式系统中如何实现唯一编号的生成呢。

以商品编号为例,当新增一个商品时,需要给商品分配一个商品编号,这个商品记录时要存放在某一个数据库中的,这就要考虑这个商品编号要与其他数据库中商品的编号不相同。

第一步,使用时间戳。

假设新增的商品速度较慢,以时间戳表示唯一商品的编号,每一次新增的商品的编号都不一样,这就可以实现编号唯一性了。

第二步,加上机房编号/主机编号。

很明显,新增的商品的时机是不确定的,且速度很快,很大可能同一毫秒内新增好几个商品,这时就需要别的标识进行维护唯一性了,可以在时间戳的基础上加上数据库的主机编号,即使是同一时间新增多个商品,其主机编号也可能不一样,这样就更能保证商品编号的唯一性了。

第三步,再加上随机因子。

即使使用时间戳加上主机编号,也还有概率多个商品在同一毫秒同一主机上新增,此时就要再进一步确保唯一性了,因此可以给每个新增商品都加上一个随机因子,此时两个新增商品的编号一致的概率就会大大降低了,但是依旧有可能存在编号碰撞的概率,但是概率极小,对于工程师来说,可以忽略不计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值