目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

JAVA全系列 教程

3762个小节阅读:7089.4k

收藏
全部开发者教程

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(476)
赞(0)

分布式全局唯一ID解决方案

image-20220601141131313

UUID

Java本身提供了UUID,这是一个唯一的字符串,它可以不依赖其他工具在本地生成。

优点

  • 代码实现简单
  • 本地生成,没有性能问题
  • 全球唯一的,数据迁移容易

缺点

  • 每次生成的ID是无序的,不满足趋势递增
  • UUID是字符串,而且比较长,占用空间大,查询效率低
  • ID没有含义,可读性差

依靠数据库自增字段生成

一个数据库压力大就搞多个数据库,之后搞一个Step步长的概念,每个数据库的自增起始值不同,但是他们的增长Step相同。如下图所示。

image-20220601151013104

优点

返回的分布式ID是趋势递增的id唯一。解决了单点问题,即使一个宕机其他的还可以提供服务。

缺点

单点压力还是很大,因为DB本身写操作就耗时间。最主要的问题还是扩容困难,比如要加一台DB3是很难加进来的,除非停机,将所有DB的id进行修改,同时修改步长。

号段模式

它没有采用新插入记录返回id的方案,而是一个业务类型就是一行数据,用一行数据来维护这个业务的自增id。服务来修改这行数据的max_id,比如当前max_id值是0,那么来给max_id加上1000,如果返回成功,就代表这个服务获得了1-1000这段分布式id,之后将这段缓存在服务内部,用光之后再来表中取。

image-20220601151201409

优点

效率很高,db的压力减小,而且一张表可以维护很多业务的分布式id。

缺点

复杂性提高,需要系统为了这个生成方案对号段进行缓存。

Redis自增key方案

通过incr命令让一个key自增,自增后的值作为分布式id。

img

优点

  • 有序递增,可读性强
  • 性能较高

缺点

  • 占用带宽,依赖Redis

雪花算法(SnowFlake)

SnowFlake生成的是一个Long类型的值,Long类型的数据占用8个字节,也就是64位。SnowFlake将64进行拆分,每个部分具有不同的含义,当然机器码、序列号的位数可以自定义也可以。

img

优点

本地生成,不依赖中间件。 生成的分布式id足够小,只有8个字节,而且是递增的。

缺点

时钟回拨问题,强烈依赖于服务器的时间,如果时间出现时间回拨就可能出现重复的id。

实时效果反馈

1. 分布式全局唯一ID解决方案中属于UUID缺点的是____

A 无序

B 没有可读性

C 占用空间大

D 以上都是正确

2. 分布式全局唯一ID最推荐使用____

A UUID

B 数据库自增

C Redis

D 雪花算法

答案

1=>C 2=> D

 

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2