最全常见分布式ID生成方案

news2024/9/9 1:23:33

分布式ID需求背景

  • 分布式ID用于在数据量庞大、分库分表后的场景,确保数据记录的唯一性和避免数据冲突。

1. UUID

  • 实现原理:由32位16进制数和4个“-”组成,基于时间戳、硬件标识符、随机数生成。
  • 优点:本地生成,无需网络,生成性能高。
  • 缺点:无序、不适合索引、ID长,存储效率低。
  • 网络依赖性:无。

2. 数据库单点自增序列

  • 实现原理:利用中央数据库表的自增主键生成ID。
  • 优点:简单可靠,保证顺序性。
  • 缺点:单点风险,性能瓶颈,不适合高并发。
  • 网络依赖性:高。

3. 数据库集群下递增序列

  • 实现原理:集群模式,每台数据库生成自增ID,设置起始值和步长。
  • 优点:解决单点故障问题。
  • 缺点:不利于扩容,高并发下性能问题,可能导致ID不连续。
  • 网络依赖性:高。

4. 数据库号段模式

  • 实现原理:应用服务节点从中央数据库获取ID段,本地缓存使用。
  • 优点:减少数据库访问压力,提高性能。
  • 缺点:存在单点故障风险,可能导致ID浪费。
  • 网络依赖性:相对较低。

5. 雪花算法(Twitter Snowflake)

  • 实现原理:64位long类型ID,基于时间戳、节点机器ID、序列号。
  • 优点:ID有时间顺序,生成快。
  • 缺点:依赖机器时钟,可读性差。
  • 网络依赖性:通常无需网络交互。

6. Redis集群使用自增命令

  • 实现原理:利用Redis的INCR和INCRBY命令生成有序ID。
  • 优点:快速、简单、支持高并发。
  • 缺点:依赖外部Redis服务,需要额外维护。
  • 网络依赖性:高。

7. 利用Zookeeper生成唯一ID

  • 实现原理:通过Zookeeper的znode数据版本生成序列号。
  • 优点:保证ID唯一性和顺序性,适合分布式环境。
  • 缺点:增加系统复杂性,需要外部依赖。
  • 网络依赖性:高。

框架实现示例

  • 美团Leaf-segment:双buffer,异步预分发方式生成ID。
  • 滴滴Tingid:基于号段模式,支持多主节点,内存中生成ID。
  • 微信序列号生成方案:与用户uin绑定,分号段共享存储。
  • 阿里Tddl-sequence:基于DB数据段算法,本地生成序列。
  • 百度UidGenerator:基于Snowflake算法,支持自定义位数和生成策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【案例】区分是平行眼还是交叉眼,以及平行眼学习方法

案例一: 交叉眼:看到凸出的“灌水”,即文字好像显示在屏幕前面。PS:看的时候眼睛是斗鸡眼,容易疲劳 平行眼:看到凹陷的“灌水”,即文字好像显示在屏幕后面。PS:看的时候眼睛是平视…

前端JavaScript处理小数精度问题(最佳实践)

前言: 针对于小数精度问题,本次我们主要推荐两种方式,一种是简单的函数封装,一种是使用第三方库big.js。 方法一: 自封装函数搭配parseFloat和toFixed解决小数精度问题,仅适用于解决一般性小数精度问题&…

Java面试八股之简述spring的自动装配

简述spring的自动装配 Spring框架的自动装配(Autowiring)是一种机制,它允许Spring IoC容器自动满足Bean的依赖关系,而无需显式指定依赖注入的方式。这极大地简化了配置,并有助于减少配置错误。 Spring支持多种自动装…

硅纪元视角 | 苹果AI训练数据大曝光,坚持用户隐私第一

在数字化浪潮的推动下,人工智能(AI)正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展,捕捉行业动态;提供深入的新闻解读,助您洞悉技术背后的逻辑;汇聚行业专家的见解,…

鲁迅曾经说过?现在没有中间派!以后也没有!——早读(逆天打工人爬取热门微信文章解读)

今天用了AI的风格模方,鲁迅的,开头那一小段改写,大家觉得如何? 引言Python 代码第一篇 续上第二篇 十点读书 “新型不孝”正在蔓延,很多父母浑然不知,还逢人就炫耀子女有出息结尾 引言 最近 我发觉自己的作…

手摸手教你撕碎西门子S7通讯协议02--socket连接

1、S7协议通讯流程回顾 1)建立Socket连接:进行TCP三次握手 这里是指要建立socket的tcp连接,是tcp连接而不是udp连接,tcp连接是可靠连接,tcp连接就是要有稳定的IP地址,它是通过字节方式进行通讯&#xff…

OpenSSL SSL_connect: Connection was reset in connection to github.com:443

OpenSSL SSL_connect: Connection was reset in connection to github.com:443 目录 OpenSSL SSL_connect: Connection was reset in connection to github.com:443 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

云计算 华为云服务

配置虚拟私有云 云平台架管理 跳板机配置 ansible 管理主机 dnf install -y ansible-core glibc-langpack-zh ssh-keygenchmod 0400 /root/.ssh/id_rsa ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.1.125 ansible --version 代理 Yum 仓库 dnf install -y nginx vim /et…

MySQL使用教程 最最最实用的零基础教程 直接从安装开始教!!!!

数据构成了我们日益数字化的社会基础。想象一下,从移动应用和银行系统到搜索引擎,再到如 ChatGPT 这样的先进人工智能聊天机器人,这些工具若没有数据支撑,将寸步难行。你有没有好奇过这些海量数据都存放在哪里呢?答案正…

虚拟现实辅助工程技术在电气安全培训中的变革力量

近年来,随着数字化进程的不断加快,虚拟现实辅助工程(VAE)技术在各行各业中的应用愈发广泛。在电气安全培训领域,虚拟现实辅助工程技术正逐渐成为一种具有变革力量的工具。这项技术的引入不仅为电气工作者提供了更为安全…

会计财务公司代理小程序源码系统 带手机端 完整的源代码包以及搭建部署教程

系统概述 会计财务公司代理小程序源码系统是一款专为会计财务公司量身定制的小程序解决方案。该系统结合了财务管理、代理记账、税务筹划等核心功能,旨在帮助企业提高工作效率,优化客户服务体验。通过这款小程序,企业可以为客户提供更加便捷…

数据库管理-第225期 Oracle DB 23.5新特性一览(20240730)

数据库管理225期 2024-07-30 数据库管理-第225期 Oracle DB 23.5新特性一览(20240730)1 二进制向量维度格式2 RAC上的复制HNSW向量索引3 JSON集合4 JSON_ID SQL函数5 优化的通过网络对NVMe设备的Oracle的原生访问6 DBCA支持PMEM存储7 DBCA支持标准版高可…

【EasyAi】一个开箱即用,每一个Java开发者都可以使用的人工智能AI框架

前言 EasyAi对于Java的用处,等同于在JavaWeb领域spring的意义一样——做一个开箱即用,让每一个开发者都可以使用EasyAi,来开发符合自己人工智能业务需求的小微模型,这就是它的使命! EasyAi介绍 EasyAi无任何依赖&…

【无标题】web+http协议+nginx搭建+nginx反向代理(环境准备)

一.Web 为用户提供互联网上浏览信息的服务,web服务是动态的,可交互的。 1.安装httpd yum -y install httpd 2.启动 systemctl start httpd 3.关闭防火墙 systemctl stop firewalld [rootrs html]# echo "我手机号是" > …

一篇文章掌握Python爬虫的80%

转载:一篇文章掌握Python爬虫的80% Python爬虫 Python 爬虫技术在数据采集和信息获取中有着广泛的应用。本文将带你掌握Python爬虫的核心知识,帮助你迅速成为一名爬虫高手。以下内容将涵盖爬虫的基本概念、常用库、核心技术和实战案例。 一、Python 爬虫…

昇思 25 天学习打卡营第 21 天 | MindSpore CycleGAN图像风格迁移互换

1. 背景: 使用 MindSpore 学习神经网络,打卡第 21 天;主要内容也依据 mindspore 的学习记录。 2. CycleGAN 介绍: MindSpore 的 CycleGAN 的图像风格迁移互换 论文地址 论文中文翻译地址 主要流程: 我们有一个转换…

做前端4年了,才明白技术的本质不过是工具而已

四年前,我踏上了前端开发的道路,从HTML和CSS到JavaScript,从jQuery到React,每一步都走得踏实而坚定。随着经验的积累,技术的进步,我逐渐认识到,所谓的“技术”,无非是实现目标的一种…

[C++探索]初始化列表,static成员,友元函数,内部类,匿名对象

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…

Docsify:快速用Markdown文档搭建网站的利器

Github官方地址:Docsify 什么是Docsify? 对于经常写博客的人来说,markdown大家都不陌生。今天介绍一个在最近需求中碰到的软件Docsify,通过它能够将Markdown直接转换为网页。话不多说,下面直接介绍它的快速用法。 D…

(二)延时任务篇——通过redis的key监听,实现延迟任务实战

前言 本节内容是关于使用redis的过期key,通过开启其监听失效策略,模拟订单延迟任务的执行流程。其核心原理是通过使用redis订阅与发布的方式,将过期失效的key通过广播的方式,发布给客户端,客户端可以监听此消息进而消…