浅谈常见的分布式ID生成方案

ops/2025/1/16 3:35:59/

一、UUID

UUID是通用唯一标识码的缩写,其目的是让分布式系统中的所有元素都有唯一的辨识信息,而不需要通过中央控制器来指定唯一标识。

优点:
(1)降低全局节点的压力,使得主键生成速度更快;
(2)生成的主键全局唯一;
(3)跨服务器合并数据方便。

缺点:
(1)UUID占用16个字符,空间占用较多;
(2)不是递增有序的数字,数据写入IO随机性很大,且索引效率下降。

二、数据库主键自增

MySQL数据库设置主键且主键自动增长。

优点:
(1)INT和BIGINT类型占用空间较小;
(2)主键自动增长,IO写入连续性好;
(3)数字类型查询速度优于字符串。

缺点:
(1)并发性能不高,受限于数据库性能;
(2)分库分表,需要改造,复杂;
(3)自增-数据和数据量泄露。

三、Redis自增ID

Redis计数器,原子性自增。

优点: 使用内存,并发性能好 。

缺点:
(1)数据丢失;
(2)自增-数据量泄露。

四、雪花算法

大名鼎鼎的雪花算法,分布式ID的经典解决方案。雪花算法生成的ID组成如下所示:
(1)符号位,占用1位。
(2)时间戳,占用41位,可以支持69年的时间跨度。
(3)机器ID,占用10位。
(4)序列号,占用12位。一毫秒可以生成4095个ID。
在这里插入图片描述

优点:
(1)不依赖外部组件;
(2)性能好。

缺点: 时钟回拨。


http://www.ppmy.cn/ops/105587.html

相关文章

C++学习笔记(4)

121、自动类型转换 对于内置类型,如果两种数据类型是兼容的,C可以自动转换,如果从更大的数转换为更小的数, 可能会被截断或损失精度。 long count 8; // int 转换为 long double time 11; // int 转换为 double int side 3.33 …

78. 子集

目录 一:题目: 二:代码: 三:结果: 一:题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集 (幂集)。 解集 不能 包含重复…

Vue 数据监听工作原理及三大重要模块分析

Vue 数据监听 在 Vue 中,数据监听是通过其响应式系统实现的。下面是其工作原理及代码示例: 一、工作原理 对象属性劫持: Vue 使用 Object.defineProperty() 方法来对数据对象的属性进行劫持(也称为代理)。当访问或修…

使用docker部署tensorrtllm推理大模型baichuan2-7b

简介 大模型的推理框架,我之前用过vllm和mindie。近期有项目要用tensorrtllm,这里将摸索的过程记录下,特别是遇到的问题。 我的环境是Linuxrt3090 准备docker环境 本次使用docker镜像部署,需要从网上拉取: docker …

MAC 、 IP ARP

MAC地址 基本概念 MAC地址是以太网的MAC子层所使用的地址——数据链路层 使用点对点信道的数据链路层不需要使用地址 使用广播信道的数据链路层必须使用地址来区分各主机 实现同一个广播信道上的不同主机之间的通信 每个主机都必须要有一个唯一的表示——一个数据链路层地址…

音质好的开放式耳机推荐?盘点开放式蓝牙耳机排行榜前十名

作为测评时长两年半的蓝牙耳机测评专家,我觉得开放式蓝牙耳机的音质还是挺不错的,主要是因为下面两点原因: 能提供更自然的听感‌:因为‌开放式耳机设计是没法避免声音不外泄的,而且同时也会进入小部分的环境噪音&…

【AI】Pytorch_损失函数优化器

建议点赞收藏关注!持续更新至pytorch大部分内容更完。 本文已达到10w字,故按模块拆开,详见目录导航。 整体框架如下 数据及预处理 模型及其构建 损失函数及优化器 本节目录 损失函数创建损失函数 (共18个)nn.CrossEnt…

SQL-多表查询

1、多表关系 一对多、多对一:在多的一方建立外键,指向一的一方。 多对多:至少两个外键,通过中间表维护。 一对一 2、多表查询概述 3、内连接 4、外连接 5、自连接 6、联合查询 7、子查询 8、多表查询案例 # 1、多表关系 #…