数据库使用自增ID好还是UUID好?为什么?

news2024/11/25 1:26:15

数据库使用自增ID好还是UUID好?为什么?

答:

自增ID

  • 优点:
  1. 数字类型,占用空间小
  2. 数据库自动增量排序,对检索有利,读写速度快(聚簇索引的优势)
  3. 系统编码过程中,可以不指定id,数据库自增
  4. 自增的主键的值是顺序的,所以 Innodb 把每一条记录都存储在一条记录的后面。当达到页面的最大填充因子时候 ( innodb默认的最大填充因子是页大小的15/16,会留出1/16的空间留作以后的修改):下一条记录就会写入新的页中,一旦数据按照这种顺序的方式加载,主键页就会近乎于顺序的记录填满,提升了页面的最大填充率,不会有页的浪费。新插入的行一定会在原有的最大数据行下一行,mysql定位和寻址很快,不会为计算新行的位置而做出额外的消耗,减少了页分裂和碎片的产生
  • 缺点
  1. 因自动增长,当手动插入的时候会出现麻烦,主键冲突的情况会有发生
  2. 分表之后控制不好会出现主键重复现象
  3. 新老数据合并,要是新数据主键也是数字类型,想新老数据区分会出现一些冲突
  4. 不安全,容易暴露信息,如果一个客户id是123456,很容易猜到有客户id是123456.
  5. 如果存在⼤量的数据,可能会超出⾃增长的取值范围

UUID

  • 优点:
  1. 全局唯一性,不用担心重复的现象,对数据的拆分、合并比较友好
  2. 相对安全,不能简单的从uuid获取信息,但是如果自增,则容易暴露信息,如果一个客户id是123456,很容易猜到有客户id是123456.
  • 缺点:
  1. 字符串类型,占用空间比较大
  2. 读写速度慢,而且索引会随着数据量的增加越来越难用
  3. uuid做主键新插入行的时候,写入的目标页很可能已经刷新到磁盘上并且从缓存上移除,或者还没有被加载到缓存中,innodb在插入之前不得不先找到并从磁盘读取目标页到内存中,这将导致大量的随机IO,因为写入是乱序的,innodb不得不频繁的做页分裂操作,以便为新的行分配空间,页分裂导致移动大量的数据,一次插入最少需要修改三个页以上,由于频繁的页分裂,页会变得稀疏并被不规则的填充,最终会导致数据会有碎片

雪花算法

雪花算法:雪花算法是 Twitter 推出的针对分布式环境下的 id 生成算法,其结果是一个 Long 型的 64bit id。具体实现上使用 41bit 作为毫秒数,10bit 作为机器的 id(5bit 是数据中心,5bit 是机器 id),12bit 作为毫秒内的流水号(这意味着每个节点在每毫秒内可以产生 4096 个 id),最后还有一个符号位永远是 0

  • **优点:**不依赖数据库、完全在内存中生成 id、高性能高可用、容量大、每秒可生成数百万个 id、id 递增、后续插入数据库的索引时性能较高
  • **缺点:**严重依赖系统时钟,如果某台机器的系统时钟发生回拨,就有可能会造成 id 冲突甚至 id 乱序
    在这里插入图片描述

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

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

相关文章

知识推理学习笔记

OWL本体语言 基于RDF语法,最规范,最严谨,表达能力最强 一 语法 三元组 二 逻辑基础 描述逻辑:基于对象的知识表示的形式化,是一阶谓词逻辑的一个可判定子集 三 描述逻辑系统 一个描述逻辑包含4个基本组成部分 …

【Python数据存储】零基础也能轻松掌握的学习路线与参考资料

Python是一种高级编程语言,被广泛应用于数据科学中。数据存储是数据科学中至关重要的一环,因为人们需要将收集到的数据保存在一些地方。Python中的数据存储有很多种,因此在学习过程中需要明确自己的需求,掌握不同数据存储方式的优…

深入理解 python 虚拟机:多继承与 mro

深入理解 python 虚拟机:多继承与 mro 在本篇文章当中将主要给大家介绍 python 当中的多继承和 mro,通过介绍在多继承当中存在的问题就能够理解在 cpython 当中引入 c3 算法的原因了,从而能够帮助大家更好的了理解 mro 。 python 继承的问题…

【Linux】shell编程之—函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、概述二、函数的查看和删除1.查看 declare2.删除 declare 三、函数的返回值1.return 返回值2.echo 返回值 四、函数的参数传入与变量范围五、函数的应用1.阶乘2.…

十五、Gateway网关

目录 Zuul网关和gateway网关的区别: Gateway路由配置 1、新建服务网关项目,并在项目pom文件中引入gateway网关依赖 2、在application.yml配置gateway 3、如果不用配置的方式配置gateway路由,还可以通过代码的形式配置 4、启动网关服务&…

达梦:创建用户并授予用户只读权限

需求描述: 1.想创建一个用户,这用户能访问其他3个用户的资源,权限是只读,这种创用户的sql怎么写? 2.怎么修改用户密码呢? 环境: 通用机 一、创建用户并授权 1.创建业务用户步骤 step1:创建用户使…

短期光伏发电量短期预测(Python代码,基于LSTM模型)

一.代码流程(运行视频:短期光伏发电量短期预测(Python代码,基于LSTM模型)_哔哩哔哩_bilibili) 数据预处理: 读取CSV文件,并使用Pandas库将数据加载到DataFrame中。将时间列转换为日期…

PoseiSwap缘何成DEX赛道新宠?POSE价值分析

区块链技术以去中心化、伪匿名以及公开透明作为主要特点,虽然这种意识形态是具备先进性的,但以此为基础所带来的加密原生特性,也正在阻碍着链上世界的发展。作为一种透明、非许可的分布式网络,隐私与合规始终是现阶段,…

【AWK命令】

目录 一、awk的工作原理:二、命令演示1、按行输出文本2、按字段输出文本1、使用三元运算符 三、通过管道,双引号调用shell命令1、查看时间的命令2、getline 获取内容3、OFS输出分割符4、awk来排序数组 一、awk的工作原理: 1、逐行读取文本&a…

华为OD机试真题 Java 实现【日志采集系统】【2023Q1 100分】

一、题目描述 日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。 如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;如果一次上报的条数太多&#xf…

MSQL系列(一) Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/B+Tree

Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/BTree 我们在项目中都会使用索引,所以我们要了解索引的存储结构,今天我们就着重讲解下Mysql的索引结构存储模型,并且看下 二叉树,平衡二叉树,红黑树,B…

沉浸式翻译 – 沉浸式的阅读与学习双语的翻译工具

为何称为沉浸式呢 智能识别网页主内容区进行翻译,与同类插件翻译整个网页不同,降低对原网页的“侵入性”,提升阅读体验,因此得名“沉浸式翻译”。 受宠的缘由 自从谷歌翻译不再对大陆用户提供服务后。内心是一阵酸痛的&#xf…

ML之LoR:基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用案例

ML之LoR:基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用案例 目录 基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用…

网络安全35岁是新时代挑战?

前言 对于一个工作不下于4年的人来说,我觉得我有一定的思考沉淀来回答这个问题。 说说我的一些经历吧。 普通一本毕业,专业是自动化,大学由于挂科太多没拿到学位证到上海找实习,一开始做的是开发,从16年到19年都是做…

如何在线安装Axure插件?

当我们需要进行原型设计时,Axure 成为了专门为此而生的专业级设计产品,也是产品经理必备的工具之一。通过使用 Axure,设计人员可以更好地了解实际项目的实施方式,并与产品经理进行更有效的合作,以评估范围和技术可行性…

HTTP1.1(五)URI编码

一 URI编码 ① ASCII wiki 说明: man ascii 观察 ② 为什么要进行URI编码 RFC3986规定:uri中只允许包含a-zA-Z、0-9、-_.~4个特殊字符以及所有保留字符 URI特殊字符 ③ 保留字符与非保留字符 ④ URI百分号%编码方式 说明: 一般是非…

自学网络安全必经的三个阶段(含路线图)

一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入…

【pytest】html报告修改和汉化

前言 Pytest框架可以使用两种测试报告,其中一种就是使用pytest-html插件生成的测试报告,但是报告中有一些信息没有什么用途或者显示的不太好看,还有一些我们想要在报告中展示的信息却没有,最近又有人问我pytest-html生成的报告&a…

算法 DAY59 单调栈2 503.下一个更大元素II 42. 接雨水 84.柱状图中最大的矩形

503.下一个更大元素II 难点在于如何是实现数组的循环 但使用模拟遍历两次的时候注意始终使用index&#xff0c;别出现越界 class Solution { public:vector<int> nextGreaterElements(vector<int>& nums) {stack<int> st;st.push(0);vector<int>…

图和简单图

图的定义 一个图G定义为一个有序对&#xff08;V,E&#xff09;&#xff0c;记为V&#xff08;V,E&#xff09;&#xff0c;其中 V是一个非空集合&#xff0c;称为顶点集或点集&#xff0c;其元素称为顶点或点。E是由V中的点组成的无序点对构成的集合&#xff0c;称为边集&am…