分布式id的概述与实现

文章目录


前言

随着业务的增长,数据表可能要占用很大的物理存储空间,为了解决该问题,后期使用数据库分片技术。将一个数据库进行拆分,通过数据库中间件连接。如果数据库中该表选用ID自增策略,则可能产生重复的ID,此时应该使用分布式ID生成策略来生成ID。


提示:以下是本篇文章正文内容

一、分布式id技术选型

  • redis,优势是(INCR)生成一个全局连续递增的数字类型主键,劣势是增加了一个外部组件的依赖,redis不可用,则整个数据库将无法插入
  • UUID,优势是全局唯一,mysql也有UUID实现,劣势是36个字符组成,占用空间大
  • snowflake(雪花)算法,优势是全局唯一,数字类型,存储成本低,机器规模大于1024台无法支持。

二、雪花算法

  • snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。

三、在项目中集成雪花算法

mybatis-plus已经集成了雪花算法,完成以下两步即可在项目中集成雪花算法:

  • 在实体类中的id上加入如下配置,指定类型为id_worker
java 复制代码
@TableId(value = "id",type = IdType.ID_WORKER)
private Long id;
  • 在application.yml文件中配置数据中心id和机器id
java 复制代码
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.model.pojos
  global-config:
    datacenter-id: 1
    workerId: 1
相关推荐
(Charon)8 小时前
【Kafka】消息队列学习(二):Topic、Partition与Offset,消息到底存在哪里
分布式·学习·kafka
陈皮波比茶1 天前
分布式任务调度xxl-job
java·分布式
敲代码的嘎仔1 天前
从集群锁失效到异步领券:我用分布式锁 + Redisson + MQ 把领券接口 RT 从 200ms 压到 15ms
java·数据库·redis·分布式·缓存·ai·wpf
lauo1 天前
FDE的终极形态:从“一个人”到“一个网络”
人工智能·分布式
雾隐隐o1 天前
Kafka 集群搭建:从核心概念到多节点部署
分布式·kafka
IT大白鼠2 天前
MySQL 分布式集群系列 · 第八篇(收官)——NDB 集群面试高频题 +架构总结与未来演进
分布式·mysql·面试
IT大白鼠2 天前
MySQL 分布式集群系列 · 第七篇——生产调优实战:NDB 性能、内存、高可用全方位优化
数据库·分布式·mysql
無a伟2 天前
RabbitMq高级特性:TTL,死信队列,延迟队列
java·分布式·rabbitmq
stark张宇2 天前
从 Paxos 到 Raft:一文讲透分布式一致性与复制状态机
分布式·后端
kaoa0002 天前
Linux入门攻坚——89、Hadoop-1-架构及概念
大数据·linux·hadoop·分布式