【面试场景】MySQL分布式主键选取
文章目录
- 一. MySQL的自增主键
- 二. UUID
- 三. 雪花ID(推荐)
我的博客地址
一. MySQL的自增主键
适合单表的情况, 在分布式分库分表下可能会有一些问题
-
主键冲突问题
在分布式系统中,多个数据库节点独立生成自增主键,很容易出现重复的主键值。例如,多个节点都从1开始递增,会导致主键冲突 -
全局唯一性无法保证
自增主键仅在单个数据库实例中唯一,无法保证在分布式环境下的全局唯一性。这使得在跨节点操作时容易出现重复主键
二. UUID
主要的缺点: UUID是随机生成的,没有顺序性,这会导致数据库的B树索引结构不够紧凑。在插入数据时,由于UUID的随机性,索引页可能会频繁分裂,导致索引碎片化。这种碎片化会增加磁盘I/O操作,降低查询性能。此外,UUID的无序性也使得范围扫描变得低效
解决: 使用有序UUID
MySQL 8.0引入了uuid_to_bin函数,可以将UUID的时间高位和低位进行互换,从而生成有序的UUID。这种方式既保留了UUID的唯一性,又解决了无序性问题,同时还能优化索引性能。
三. 雪花ID(推荐)
-
工作原理
雪花算法生成的是一个64位的整数ID,由以下几部分组成:- 符号位(1位):始终为0,表示生成的ID是正整数。
- 时间戳(41位):记录生成ID的时间戳(毫秒级),可以支持大约69年的时间。
- 机器ID(10位):共10位,用于区分不同的数据中心和机器,支持最多1024个节点。
- 序列号(12位):在同一毫秒内生成不同的ID,支持每毫秒生成4096个不同的ID。
-
优点
- 全局唯一性:通过时间戳、数据中心ID、机器ID和序列号的组合,确保生成的ID在全局范围内是唯一的。
- 有序性:由于ID中包含时间戳,生成的ID大致有序,便于排序。
-
缺点
- 依赖服务器时间:如果服务器时钟回拨,可能会导致生成重复的ID。
- 时间戳位数有限:虽然41位时间戳可以支持69年,但对于某些长期运行的系统可能需要调整。
-
解决时钟回拨问题
- 外部时间同步机制
利用NTP(网络时间协议)或PTP(精确时间协议)来校正系统时钟,尽量避免时钟回拨 - 等待重试策略
当检测到时钟回拨时,服务可以暂时拒绝生成新的ID,等待一段时间后重试, 直到系统时钟恢复到正常状态(至少大于或等于上次生成ID时的时间戳)。这种方法可以确保ID的严格递增性,但可能会在时钟调整期间暂停服务,对系统性能造成一定的影响。 - 扩展位
在ID结构中增加额外的位来处理时钟回拨。例如,可以使用额外的位来记录时钟回拨的次数,从而避免ID重复。即可以将机器码拆分成时钟序列(3位)和机器码(7位),通过调整时钟序列来处理回拨。
- 外部时间同步机制
相关文章:
【面试场景】MySQL分布式主键选取
文章目录 一. MySQL的自增主键二. UUID三. 雪花ID(推荐) 我的博客地址 一. MySQL的自增主键 适合单表的情况, 在分布式分库分表下可能会有一些问题 主键冲突问题 在分布式系统中,多个数据库节点独立生成自增主键,很容易出现重复的主键值。例如ÿ…...
执行git stash drop stash@{x} 时出现error: unknown switch `e‘ 的解决方式
原因: 在 PowerShell 或某些 Shell 中,{} 是特殊符号,stash{0} 会被解析成 stash 0,而 后的字符可能被误认为选项(如 -e),使 Git 收到意外的 -e 参数,导致报错 unknown switch ‘e’。 解决方…...
链表和 list
一、单链表的模拟实现 1.实现方式 链表的实现方式分为动态实现和静态实现两种。 动态实现是通过 new 申请结点,然后通过 delete 释放结点的形式构造链表。这种实现方式最能体 现链表的特性; 静态实现是利用两个数组配合来模拟链表。一个表示数据域&am…...
windows 蓝牙驱动开发-传输总线驱动程序常见问题
以下是驱动程序开发人员在开发总线驱动程序以支持蓝牙功能时可能会遇到的一些常见问题和方案。 我的串行总线驱动程序遇到了一些错误。 它意味着什么? 代码 10-49:设备管理器生成的错误代码。 代码 51:当串行总线驱动程序具有相关的控制器…...
Qt修仙之路2-1 炼丹初成
widget.cpp #include "widget.h" #include<QDebug> //实现槽函数 void Widget::login1() {QString userusername_input->text();QString passpassword_input->text();//如果不勾选无法登入if(!check->isChecked()){qDebug()<<"xxx"&…...
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue宠物预约上门服务预约平台
开题报告 本研究论文旨在构建并阐述一个基于 SpringBoot 和 Vue 技术栈开发的宠物上门服务预约平台的设计与实现。该平台集成了丰富的功能模块,为用户提供一体化的便捷服务体验。首先,用户能够通过注册并登录系统,享受个性化的服务流程。在平…...
无线AP之详解(Detailed Explanation of Wireless AP)
无线AP是什么? 市场上的AP基本上分为两大类:单纯型AP和扩展型AP。扩展型AP除了基本的AP功能之外,还可能带有若干以太网交换口、路由、NAT、DHCP、打印服务器等功能。 无线AP也就是一个无线交换机 无线路由器就是一个带路由功能的无线AP&am…...
Spring Boot Actuator与JMX集成实战
在微服务架构中,监控和管理应用的运行状态是至关重要的。Spring Boot Actuator 提供了一种便捷的方式来监控和管理 Spring Boot 应用,而 JMX(Java Management Extensions)则是一种用于管理 Java 应用的标准技术。本文将通过一个实…...
mac环境下,ollama+deepseek+cherry studio+chatbox本地部署
春节期间,deepseek迅速火爆全网,然后回来上班,我就浅浅的学习一下,然后这里总结一下,我学习中,总结的一些知识点吧,分享给大家。具体的深度安装部署,这里不做赘述,因为网…...
camera光心检测算法
1.概要 光心检测算法,基于opencv c实现,便于模组厂快速集成到软件工具中,适用于camera模组厂算法评估组装制程镜头与sensor的偏心程度,便于工程师了解制程的问题找出改善方向。 2.技术介绍 下图为camera模组厂抓取的bayer-raw经过…...
【MySQL】向后兼容设计规范(无回滚场景)
MySQL 向后兼容设计规范(无回滚场景) 在 不支持数据库回滚 且需保证 长期向后兼容性 的系统中,需通过 架构设计 和 流程管控 规避风险。以下是关键设计规范: 一、变更流程规范 变更分类分级 变更类型风险评估等级审批流程测试要求…...
还搞不透stm32单片机启动过程?一篇文章几百字让你彻底看懂!
1.stm32启动 1.1 msp和pc的初始值,第一步: 2.boot的值就被锁定了 可以根据实际绑定的值变动, 这里补充一点boot1和0的原理: 1.2来点刺激的: 这里我插入一个链接: 【明解STM32】一文搞明白STM32芯片存储…...
无界构建微前端?NO!NO!NO!多系统融合思路!
文章目录 微前端理解1、微前端概念2、微前端特性3、微前端方案a、iframeb、qiankun --> 使用比较复杂 --> 自己写对vite的插件c、micro-app --> 京东开发 --> 对vite支持更拉跨d、EMP 方案--> 必须使用 webpack5 --> 很多人感觉不是微前端 --> 去中心化方…...
DeepSeek辅助段落扩写的能力怎么样?
DeepSeek-R1在学术写作的诸多细节层面展现出了显著的应用价值。接下来我们将通过一系列具体案例,深入探讨该工具如何在扩写、翻译、发表以及内容改进等关键环节为学术写作提供有力支持。在提问环节,DeepSeek-R1能够高效地简化提示词,并精准地…...
分形的魅力:数学与艺术的完美结合
分形的魅力:数学与艺术的完美结合 分形(Fractal)是一种神奇的数学结构,它以其无限的复杂性和自相似性吸引了无数科学家、艺术家和数学爱好者。分形不仅仅是数学中的一个概念,它还广泛应用于自然科学、计算机图形学和艺…...
如何通过工业智能网关进行数控机床数据采集?
数控机床数据采集过程是一个从物理连接到数据处理的完整链条,涉及设备连接、数据采集、预处理和传输的复杂过程,包含通信协议匹配、设备配置、数据采集设置、数据预处理和传输等多个环节。天拓四方自主研发的TDE工业智能网关作为这一过程中的核心设备&am…...
水波效果
水波效果指在计算机图形学中模拟水面波纹的视觉效果,通常用于游戏、动画或者其他虚拟场景中。主要用于体现水体的动态感,比如水的波动、反射、折射、透明等,可以让人感觉像真实的水一样流动闪耀。 核心特点就是: 动态波纹光学特…...
康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案
随着自动驾驶技术的快速发展,车辆准确感知周围环境的能力变得至关重要。BEV(Birds-Eye-View,鸟瞰图)感知技术,以其独特的视角和强大的数据处理能力,正成为自动驾驶领域的一大研究热点。 一、BEV感知技术概…...
【重新认识C语言----结构体篇】
目录 -----------------------------------------begin------------------------------------- 引言 1. 结构体的基本概念 1.1 为什么需要结构体? 1.2 结构体的定义 2. 结构体变量的声明与初始化 2.1 声明结构体变量 2.2 初始化结构体变量 3. 结构体成员的访…...
#渗透测试#批量漏洞挖掘#Splunk Enterprise for Windows 任意文件读取漏洞( CVE-2024-36991)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
别再让C盘爆红了!Windows 11上Ollama安装与模型存储路径修改保姆级教程
Windows 11上Ollama安装避坑指南:彻底解决C盘空间焦虑 每次看到C盘飘红,就像看到手机电量只剩5%一样让人焦虑。特别是当你兴冲冲地安装Ollama准备体验本地大模型时,却发现默认安装路径无情地吞噬着宝贵的C盘空间。本文将带你从零开始…...
国产MCU实战:华大HC32F460串口DMA+超时中断,替代STM32空闲中断的完整配置流程
国产MCU实战:华大HC32F460串口DMA超时中断的工程化实现指南 在嵌入式开发领域,国产MCU的崛起为开发者提供了更多选择。华大半导体的HC32F460系列以其出色的性能和灵活的配置,成为许多项目中替代STM32的理想选择。本文将深入探讨如何在这款芯片…...
OpenClaw夜间任务优化:Qwen3-32B+RTX4090D镜像低负载模式配置
OpenClaw夜间任务优化:Qwen3-32BRTX4090D镜像低负载模式配置 1. 问题背景与优化动机 去年12月,我开始用OpenClawQwen3-32B模型搭建个人自动化工作流。最初配置的定时备份任务每晚11点准时运行,但很快发现两个问题: 电费异常&am…...
Matlab APP Designer避坑指南:字符进度条不更新的解决方案
Matlab APP Designer避坑指南:字符进度条不更新的解决方案 在Matlab APP Designer开发过程中,进度条是用户交互体验的重要组成部分。许多开发者都遇到过这样的困扰:精心设计的字符进度条在运行时却"卡住"不动,直到整个计…...
Face3D.ai Pro多场景落地:VR会议、元宇宙社交、AI主播协同方案
Face3D.ai Pro多场景落地:VR会议、元宇宙社交、AI主播协同方案 1. 引言:从2D照片到3D数字人的技术突破 想象一下,你只需要上传一张普通的自拍照,就能瞬间获得一个精细的3D数字人形象。这个数字人不仅外形逼真,还能在…...
Pixel Fashion Atelier部署教程:华为云ModelArts平台上的Ascend NPU适配实践
Pixel Fashion Atelier部署教程:华为云ModelArts平台上的Ascend NPU适配实践 1. 项目概述 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站,采用独特的像素艺术风格界面设计。与传统AI工具不同,它将图像生成…...
SpringBoot整合ANIMATEDIFF PRO:企业级API网关设计
SpringBoot整合ANIMATEDIFF PRO:企业级API网关设计 动画生成服务在企业级应用中面临高并发挑战,如何构建稳定可靠的API网关成为关键问题 1. 企业级动画生成服务的挑战与需求 在现代企业应用中,AI动画生成服务已经成为内容创作、营销推广、教…...
深度解析ShardingCore:EF Core分库分表架构实战与性能优化指南
深度解析ShardingCore:EF Core分库分表架构实战与性能优化指南 【免费下载链接】sharding-core high performance lightweight solution for efcore sharding table and sharding database support read-write-separation .一款ef-core下高性能、轻量级针对分表分库…...
SenseVoice-Small模型在.NET生态中的集成实践
SenseVoice-Small模型在.NET生态中的集成实践 1. 项目背景与价值 语音识别技术正在快速融入各种应用场景,从智能客服到会议转录,从语音助手到内容创作,处处都能看到它的身影。对于.NET开发者来说,如何在熟悉的生态中集成高质量的…...
# 状态通道实战:用Solidity实现高效链下交易与链上结算 在区块链世界中,**扩展性瓶颈**一直是开发者绕
状态通道实战:用Solidity实现高效链下交易与链上结算 在区块链世界中,扩展性瓶颈一直是开发者绕不开的话题。传统智能合约每笔交互都需上链,不仅成本高昂,还导致网络拥堵。而**状态通道(State Channel)**技…...
