当前位置: 首页 > news >正文

分布式ID选型对比(1)

常见的几种ID生成方式对比:

种类

全局唯一

高性能

高可用

趋势递增

中心服务

缺点

UUID

高(本地生成,(无网络开销)

低(无序,不适用)

无序、字符串

数据库自增

单表唯一

中(宕机就会使业务服务中断)

安全性差,能猜出来规律

对于分库分表场景无法唯一

数据库自增-集群

中(宕机就会使业务服务中断)

通过设置初始值及步长进行自增

不好扩展,增加节点可能导致不唯一

数据库号段模式

低(需要频繁更新表maxId)

中(宕机就会使业务服务中断)

依赖数据库,需要频繁更新数据库maxId

乐观锁方式保证高可用

数据库号段模式+缓存

在号段模式基础上增加缓存buffer

缓存数据同步到数据库需要保证强一致性,增加了复杂度

redis的incr

单模块唯一

多模块不适用

中(宕机就会使业务服务中断)

多服务情况下单台redis无法满足

多redis集群时,主master宕机,会在较短时间内存在ID重复

雪花算法

高(不考虑回拨情况下)

高(本地生成,(无网络开销)

中(趋势递增)

存在时钟回拨问题

多节点时可能需要自定义datacenterId和machineId的生成(IP)

百度uid generator

高(本地生成,(无网络开销)

高(趋势递增)

在雪花算法基础上增加启动服务时获取workId(或初始化workId)

项目启动时间会被拉长,依赖数据库

美团Leaf

高(本地生成,(无网络开销,需要自己实现)

中(中心服务)

高(自定义方式较复杂)

百度uid模式下衍生而来

可以实现自己的ID生成中心,即leaf-server,由该项目提供获取ID的方法供调用,但该方式比较耗IO,性能会有所下降

依赖数据库或zookeper

为了提升性能,需要自己在项目里面自定义实现Leaf server

滴滴TynyId

高(本地生成,(无网络开销,需要自己实现)

中(中心服务)

高(自定义方式较复杂)

美团Leaf模式下衍生而来

可以实现自己的ID生成中心,即TynyId-server,由该项目提供获取ID的方法供调用,但该方式比较耗IO,性能会有所下降

依赖数据库或zookeper

为了提升性能,需要自己在项目里面自定义实现TynyId server

----------------------------------------------------------------------------------------------

数据库自增

一, 引入依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version>
</dependency>
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency>

二, 新建表

CREATE TABLE `auto_generate` (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

三, resources目录下编写自动生成代码配置文件: generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!--mysql 连接数据库jar 这里选择自己本地位置;如果不知道maven本地仓库地址,可以使用EveryThing工具全局搜索mysql-connector-java,找到jar包位置;也可以手动下载一个jar放在指定位置,进行引用。--><classPathEntry location="/Users/lizhihao/.m2/repository/mysql/mysql-connector-java/8.0.19/mysql-connector-java-8.0.19.jar"/><context id="testTables" targetRuntime="MyBatis3"><commentGenerator><!-- 是否去除自动生成的注释,true:是,false:否 --><property name="suppressAllComments" value="true"/></commentGenerator><!--数据库连接的信息:驱动类、连接地址、用户名、密码 --><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/generate_id" userId="root"password="root"></jdbcConnection><!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和NUMERIC 类型解析为java.math.BigDecimal --><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- 指定javaBean生成的位置targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录--><javaModelGenerator targetPackage="org.com.spi.model" targetProject="src/main/java"><!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,

相关文章:

分布式ID选型对比(1)

常见的几种ID生成方式对比: 种类 全局唯一 高性能 高可用 趋势递增 中心服务 缺点 UUID 是 高(本地生成,(无网络开销) 低(无序,不适用) 否 否 无序、字符串 数据库自增 单表唯一 中 中(宕机就会使业务服务中断) 是 否 安全性差,能猜出来规律 对于分库分表场景无法唯一 数据库自…...

T-SQL 高阶语法之存储过程

一&#xff1a;存储过程概念 预先存储好的sql程序&#xff0c;通过名称和参数进行执行&#xff0c;供应程序去调用&#xff0c;也可以有返回结果&#xff0c;存储过程可以包含sql语句 可以包含流程控制、逻辑语句等。 二&#xff1a;存储过程的优点 执行速度更快 允许模块化…...

解决鸿蒙模拟器卡顿的问题

缘起 最近在学习鸿蒙的时候&#xff0c;发现模拟器非常卡&#xff0c;不要说体验到鸿蒙的丝滑&#xff0c;甚至到严重影响使用的程度。 根据我开发Android的经验和在论坛翻了一圈&#xff0c;最终总结出了以下几个方案。 创建模拟器 1、在DevEco Virtual Device Configurat…...

【LeetCode每日一题】【BFS模版与例题】863.二叉树中所有距离为 K 的结点

BFS的基本概念 BFS 是广度优先搜索&#xff08;Breadth-First Search&#xff09;的缩写&#xff0c;是一种图遍历算法。它从给定的起始节点开始&#xff0c;逐层遍历图中的节点&#xff0c;直到遍历到目标节点或者遍历完所有可达节点。 BFS 算法的核心思想是先访问当前节点的…...

设计模式-结构模式-装饰模式

装饰模式&#xff08;Decorator Pattern&#xff09;&#xff1a;动态地给一个对象增加一些额外的职责&#xff0c;就增加对象功能来说&#xff0c;装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。 //首先&#xff0c;定义一个组件接口&#xff1a; public in…...

MySQL:一行记录如何

1、表空间文件结构 表空间由段「segment」、区「extent」、页「page」、行「row」组成&#xff0c;InnoDB存储引擎的逻辑存储结构大致如下图&#xff1a; 行 数据库表中的记录都是按「行」进行存放的&#xff0c;每行记录根据不同的行格式&#xff0c;有不同的存储结构。 页…...

‘grafana.ini‘ is read only ‘defaults.ini‘ is read only

docker安装grafana 关闭匿名登录情况下的免密登录遇到问题 grafana.ini is read only defaults.ini is read only 参考回答&#xff08;Grafana.ini giving me the creeps - #2 by bartweemaels - Configuration - Grafana Labs Community Forums&#xff09; 正确启动脚本 …...

博途PLC 面向对象系列之“输送带控制功能块“(SCL代码)

这篇是面向对象系列之"输送带功能块"的封装,面向对象是系列文章,相关链接如下: 1、面向对象系列之找"对象" https://rxxw-control.blog.csdn.net/article/details/136150027https://rxxw-control.blog.csdn.net/article/details/1361500272、面向对象…...

2024-02学习笔记

1.当我们向Set集合中添加一个已经存在的元素时 当我们向Set集合中添加一个已经存在的元素时&#xff0c;Set集合会如何处理呢&#xff1f;实际上&#xff0c;Set集合不会将重复的元素添加到集合中。当我们向Set集合中添加一个元素时&#xff0c;Set集合会首先判断该元素是否已…...

最新消息:英特尔宣布成立全新独立运营的FPGA公司——Altera

今天&#xff0c;英特尔宣布成立全新独立运营的FPGA公司——Altera&#xff08;2015年6月Intel以 167 亿美元的价格&#xff0c;收购FPGA厂商Altera&#xff09;。首席执行官Sandra Rivera和首席运营官Shannon Poulin分享展示其在超过550亿美元的市场中保持领先性的战略规划&am…...

RC正弦波振荡电路

RC正弦波振荡电路 RC正弦波振荡电路又称文氏电桥振荡电路&#xff0c;可以设计频率为f1/2πRC的正弦波发生器。 RC正弦波振荡电路设计&#xff1a;50Hz,振幅为3.47V 电路分析&#xff1a; 1.起振条件取决于R1, R4&#xff0c;R2与1N4148并联电阻&#xff08;下面简称Rf&#…...

【Git学习笔记】提交PR

step1 克隆一个仓库 git clone .....step2 创建一个分支 (Creating a branch) # 创建并切换到本地新分支&#xff0c;分支的命名尽量简洁&#xff0c;并与解决的问题相关 git checkout -b delete-unused-linkstep3 做出修改 (Make changes) step4 提交修改 # 保存本地修…...

线程池的相关参数

在Java中线程池是一种池化技术&#xff0c;用于管理和复用线程&#xff0c;提高线程的利用率和性能。下面是一些常见的线程池的参数及其解释&#xff1a; 一&#xff1a;线程池的七大参数 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTim…...

图书推荐||Word文稿之美

让你的文档从平凡到出众&#xff01; 本书内容 《Word文稿之美》是一本全面介绍Word排版技巧和应用的实用指南。从初步认识数字排版到高效利用模板、图文配置和表格与图表的排版技巧&#xff0c;再到快速修正错误和保护文件&#xff0c;全面系统地讲解数字排版的技术和能力&…...

前端导出word文件的多种方式、前端导出excel文件

文章目录 纯前借助word模板端导出word文件 &#xff08;推荐&#xff09;使用模板导出 前端通过模板字符串导出word文件前端导出 excel文件&#xff0c;node-xlsx导出文件&#xff0c;行列合并 纯前借助word模板端导出word文件 &#xff08;推荐&#xff09; 先看效果&#xf…...

Linux和Windows操作系统在腾讯云幻兽帕鲁服务器上的内存占用情况如何?

Linux和Windows操作系统在腾讯云幻兽帕鲁服务器上的内存占用情况如何&#xff1f; 对于Linux操作系统&#xff0c;有用户分享了个人最佳实践来解决内存问题&#xff0c;包括使用Linux脚本让服务器每天重启一次&#xff0c;以及建议在不需要时尽量减少虚拟内存的使用。此外&…...

腾讯云4核8G的云服务器性能水平?使用场景说明

腾讯云4核8G服务器适合做什么&#xff1f;搭建网站博客、企业官网、小程序、小游戏后端服务器、电商应用、云盘和图床等均可以&#xff0c;腾讯云4核8G服务器可以选择轻量应用服务器4核8G12M或云服务器CVM&#xff0c;轻量服务器和标准型CVM服务器性能是差不多的&#xff0c;轻…...

1_SQL

文章目录 前端复习SQL数据库的分类关系型数据库非关系型数据库&#xff08;NoSQL&#xff09; 数据库的构成软件架构MySQL内部数据组织方式 SQL语言登录数据库数据库操作查看库创建库删除库修改库 数据库中表的操作选择数据库创建表删除表查看表修改表 数据库中数据的操作添加数…...

PoC免写攻略

在网络安全领域&#xff0c;PoC&#xff08;Proof of Concept&#xff09;起着重要的作用&#xff0c;并且在安全研究、漏洞发现和漏洞利用等方面具有重要的地位。攻击方视角下&#xff0c;常常需要围绕 PoC 做的大量的工作。常常需要从手动测试开始编写 PoC&#xff0c;再到实…...

c1-周考2

c1-第二周 9月-技能1.一个岛上有两种神奇动物&#xff0c;其中神奇鸟类2个头3只脚&#xff0c;神奇兽类3个头8只脚。游客在浓雾中看到一群动物&#xff0c;共看到35个头和110只脚&#xff0c;求可能的鸟类和兽类的只数2.构建一个长度为5的数组&#xff0c;并且实现下列要求3.构…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...