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

news/2024/9/14 23:43:54 标签: 分布式, 分布式ID

一、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.niftyadmin.cn/n/5632950.html

相关文章

Scala之高阶面向对象编程

Scala之高阶面向对象编程 文章目录 Scala之高阶面向对象编程写在前面继承 封装抽象 单例对象特质基本语法动态混入(方便扩展程序功能)初始化叠加功能叠加 扩展 写在前面 操作系统:Windows10JDK版本:jdk1.8Maven版本:M…

Linux的yum包管理工具(在线安装)

Linux的软件从哪里下载? 我们用的Linux系统都是国外的,所以下载软件自然从国外下载。但是访问国外网址太慢了,有没有什么办法快一点呢? 有! 啊,还有这么美的事情?快点告诉我! 好…

算法练习题06:leetcode793每日温度

单调栈解法 class Solution {public int[] dailyTemperatures(int[] temperatures) {int length temperatures.length;int[] ans new int[length];Stack<Integer> stack new Stack<>();for(int i 0;i<length;i){int temperature temperatures[i];while(!…

【Altium Designer程序开发】生成XML多级数据库文件 V2.0

此工具用于生成多级多节点的XML数据库文件&#xff0c;主要功能用于测试XML文件的生成速度的&#xff0c;运行环境在Altium Designer中&#xff0c;可用于Altium Designer全系列的版本中。 程序界面如下图所示&#xff0c;每一级节点表示每个父Node的子Node的数量&#xff0c;节…

什么是数字人

今天和大家聊一聊数字人是什么&#xff1f; 数字人是人类的奴隶&#xff1f;不&#xff0c;只怕你控制不了他。让数字人去模仿真人代替人类去直播带货&#xff1f;你太低看他了&#xff0c;就好比拿宝剑去切菜&#xff0c;还要责备这个宝剑不好使。 大家好&#xff0c;我是相濡…

【HarmonyOS 4.0】@ohos.router 页面路由

注册页面&#xff0c;在src/main/resources/base/profile/main_pages.json文件新增配置。 {"src": ["pages/Index","pages/AnimateTo"] }导入 router 模块 import router from ohos.router1. router.pushUrl 跳转到应用内的指定页面会将当前页面…

linux网卡重命名命令

在Linux系统中&#xff0c;网卡重命名的命令是ip命令。下面是在不同Linux发行版上进行网卡重命名的命令示例&#xff1a; 1. Ubuntu/Debian系统&#xff1a; 首先&#xff0c;使用ifconfig命令查看当前系统的网卡名称。 然后&#xff0c;使用以下命令修改网卡名称&#xff1a;…

uniapp 封装uni.login 实现全局调用

封装utils app.vue中 使用globalData 注册 utils 页面中使用方法 定义app 调用方法