美文网首页
数据库UUID & 雪花算法 & 自增ID

数据库UUID & 雪花算法 & 自增ID

作者: pan_peter | 来源:发表于2023-08-20 00:13 被阅读0次

MySQL中可以使用UUID么?

他有哪些问题?

因为MySQL使用的是B+树索引,当你插入一条数据时,用UUID作为索引,那么就是无序的,维护B+树索引的开销就比较大!

解决方案

可以通过有序uuid来解决,MySQL 8.0提供uuid_to_bin函数来互换uuid的时间低位和高位
将无序的uuid转为有序的uuid,同时保证了唯一性和有序性,也能解决索引性能下降的问题

UUID是由时间戳、MAC地址、随机数、操作系统唯一标识、CPU序号、网卡地址等多个因素组合

雪花算法

雪花算法确实是依赖时间确切来说是依赖一个全局时间,多节点通讯是属于通过共识算法来解决唯一性的问题,但这里需要解决的是时间所以共识通讯是有延迟的,所以我觉得这里就不能使用传统的时间时钟了,转而使用逻辑时钟更加完美一些

雪花算法中如果机器不多,使用53位存储,因为web页面的js支持最大整型的范围是53位的,超过会丢失精度。
32位秒级时间戳,5位机器编号,16位序列号。
严重依赖服务器的时钟,时钟回拨的话会有重复的可能。
一方面公司不会修改时钟,宁愿直接加服务器。
修改时钟也可以设置序列号初始值的步长,触发回拨就初始序号加步长,设置sequence初始值。

自增ID

使用自增id也会让攻击者推算出表中数据总量等信息,不安全。

自增最大的问题是分布式SHARDING数据到多个库情况下会导致主键冲突吧,需要提供一个跨库唯一主键方案,这时AUTOINC就抓瞎了,单库肯定是没问题的

相关文章

网友评论

      本文标题:数据库UUID & 雪花算法 & 自增ID

      本文链接:https://www.haomeiwen.com/subject/smcsmdtx.html