分布式id问题

分布式id生成

分布式id问题来源于分库分表,一张表可能多库中存在多表,所以传统自增的主键会出现重复;需要利用分布式来解决,分配主键不重复。
分布式id在分布式的前提下,有以下几点需求:
唯一、高性能、高可用、简单、利于数据库存储查找等
介绍以下几种方式

UUID

UUID生成简单,一行代码,而且本地生成不需要资源;生成直接可用
缺点:过长,纯字符,无规则,不适合数据库主键,影响性能以及数据变动需要改变位置

数据库自增id

维护一张表,向表中插入数据返回自增id;
缺点:数据库会成为分布式高并发的瓶颈,且单机不能保证高可用

数据库集群生成id

几个库一起生成id,通过起点、步长不一致保证唯一
缺点:不利于扩容,需要改动所有机器规则;还不能满足高并发

数据库号段模式

维护一张表,max_id,step,version基本元素,每次取一段数值(id取值)到内存中使用,使用后更新表中max_id值,更新version保证并发正确性

redis

利用redis数字型原子自增(incr),需要注意redis持久化问题

雪花算法

1数字位 41时间戳 10机器位 12序列号
数据位取0为整数,时间戳建议当前-一个固定值可以取更多数据,机器位 机房+机器

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容