首页
学习
活动
专区
圈层
工具
发布

全局唯一ID--UUID介绍、JAVA中UUID的使用

但这个唯一性是有限的,只在特定的范围内才能得到保证,这和UUID的类型有关(参见UUID的版本)。 UUID的版本UUID具有多个版本,每个版本的算法不同,应用范围也不同。...这个版本的UUID在实际中较少用到。 UUID Version 3:基于名字的UUID(MD5)基于名字的UUID通过计算名字和名字空间的MD5散列值得到。...这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。...UUID Version 4:随机UUID根据随机数,或者伪随机数生成UUID。...nameUUIDFromBytes(byte[])方法, 可以得知 其内部使用的是算法版本分别是4、3; 因为我们更趋向于使用版本3、5的算法实现, 所以在实际生产中,推荐使用 nameUUIDFromBytes方法将自身的唯一id

3.6K20

为什么MySQL不推荐使用uuid或者雪花id作为主键?

p=5090 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment...一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1.使用自增id的内部结构 ? 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。...的生成策略在大数据量的数据插入表现,然后分析了id的机制不同在mysql的索引结构以及优缺点,深入的解释了为何uuid和随机不重复id在数据插入中的性能损耗,详细的解释了这个问题。...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

4.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mysql 自增id和UUID做主键性能分析,及最优方案

    按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字 UUID由以下几部分的组合: (1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个...(2).但是在我们实际到项目中会碰到问题,历史数据表的主键id会与数据表的id重复,两张自增id做主键的表合并时,id一定会有冲突,但如果各自的id还关联了其他表,这就很不好操作。...(3).如果使用UUID,生成的ID不仅是表独立的,而且是库独立的。对以后的数据操作很有好处,可以说一劳永逸。 2.UUID优缺点 缺点: 1....(2).对于InnoDB的主索引,数据会按照主键进行排序,由于UUID的无序性,InnoDB会产生巨大的IO压力,此时不适合使用UUID做物理主键,可以把它作为逻辑主键,物理主键依然使用自增ID。...4.如果非要使用uuid做主键,下面是小建议: 如果是主从即M-S模式,最好是不使用mysql自带函数uuid来生成唯一主键,因为主表生成的uuid要再关联从表时,需要再去数据库查出这个uuid,需要多进行一次数据库交互

    9.3K20

    使用雪花id或uuid作为MySQL主键,被老板怼了一顿!

    磊哥,前几天在做项目demo的时候,使用雪花id或uuid作为Mysql主键,被老板怼了一顿!...一、MySQL和程序实例 1.1 要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1 使用自增id的内部结构 ? 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。...的生成策略在大数据量的数据插入表现,然后分析了id的机制不同在mysql的索引结构以及优缺点,深入的解释了为何uuid和随机不重复id在数据插入中的性能损耗,详细的解释了这个问题。...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

    9.9K32

    使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

    和自增id的索引结构对比 2.1.使用自增id的内部结构 2.2.使用uuid的索引内部结构 2.3.使用自增id的缺点 三、总结 ?...---- 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment...本篇博客的目录 mysql程序实例 使用uuid和自增id的索引结构对比 总结 一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid...的生成策略在大数据量的数据插入表现,然后分析了id的机制不同在mysql的索引结构以及优缺点,深入的解释了为何uuid和随机不重复id在数据插入中的性能损耗,详细的解释了这个问题。...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。 ---- ----

    2.7K10

    使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

    来源:cnblogs.com/wyq178/p/12548864.html ---- 前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一)...,而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...一、mysql和程序实例 1.1 要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机...的生成策略在大数据量的数据插入表现,然后分析了id的机制不同在mysql的索引结构以及优缺点,深入的解释了为何uuid和随机不重复id在数据插入中的性能损耗,详细的解释了这个问题。...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

    1.6K20

    使用雪花 id 或 uuid 作为 MySQL 主键,被老板怼了一顿!

    javaxks.com](https://www.javaxks.com) > 作者 : Yrion ,链接: cnblogs.com/wyq178/p/12548864.html ### 一、MySQL...和程序实例 **1.1 要说明这个问题, 我们首先来建立三张表** 分别是`user_auto_key,user_uuid`,`user_random_key`, 分别表示自动增长的主键, uuid...带着疑问, 我们来探讨一下这个问题: ### 二、使用 uuid 和自增 id 的索引结构对比 **2.1 使用自增 id 的内部结构** !...的生成策略在大数据量的数据插入表现,然后分析了 id 的机制不同在 mysql 的索引结构以及优缺点,深入的解释了为何 uuid 和随机不重复 id 在数据插入中的性能损耗,详细的解释了这个问题。...在实际的开发中还是根据 mysql 的官方推荐最好使用自增 id,mysql 博大精深,内部还有很多值得优化的点需要我们学习。

    3.5K00

    使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

    前言: 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用...# mysql和程序实例 1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key...带着疑问,我们来探讨一下这个问题: # 使用uuid和自增id的索引结构对比 1.使用自增id的内部结构 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。...的生成策略在大数据量的数据插入表现,然后分析了id的机制不同在mysql的索引结构以及优缺点,深入的解释了为何uuid和随机不重复id在数据插入中的性能损耗,详细的解释了这个问题。...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

    2.1K10

    主键的选择:自增id?UUID?雪花算法?

    二、UUID生成主键(32位16进制) uuid:UUID(Universally Unique Identifier,通用唯一识别码)是一种软件建构的标准,用于在分布式计算环境中为元素提供唯一的标识信息...UUID共占128位,分为五段,它具有唯一性、全局性、不变性等特点。...uuid生成主键,需要将testId改成String类型  而在数据库建表的时候testId 不能用bigint了 而是用char(32)就可以了 生成的uuid是这样的 c37da8074d52022661db24bf931990af...它的设计目标是在分布式系统中生成ID,保证ID的唯一性、有序性和趋势递增。雪花算法的核心思想是将一个64位的ID分成多个部分,分别表示不同的信息。...索引性能:由于UUID相对较大,使用UUID作为主键会导致索引变得更大,从而影响查询性能。特别是在执行范围查询或JOIN操作时,性能下降可能会更加明显。

    1.4K10

    分布式ID系列(2)——UUID适合做分布式ID吗

    UUID的生成策略: UUID的方式能生成一串唯一随机32位长度数据,它是无序的一串数据,按照开放软件基金会(OSF)制定的标准计算,UUID的生成用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字...UUID的底层是由一组32位数的16进制数字构成,是故 UUID 理论上的总数为[1565060542.png] ,约等于[1565060554.png],也就是说若每纳秒产生1百万个 UUID,要花100...的值是:24e6f66b3dfb4aba8e3e3801d3327e08 UUID是否适合做分布式id: 如果需求是只保证唯一性,那么UUID也是可以使用的,但是按照上面的分布式id的要求, UUID其实是不能做成分布式...id的,原因如下: 首先分布式id一般都会作为主键,但是安装mysql官方推荐主键要尽量越短越好,UUID每一个都很长,所以不是很推荐 既然分布式id是主键,然后主键是包含索引的,然后mysql的索引是通过...那么UUID可以用到哪些方面呢 比如阿里云每一条短信发送的唯一id,这个是可以的,比如从阿里云官网截图所示: [1565060572.png]

    2.2K40

    MySQL中存储UUID的最佳实践

    在MySQL中有一个UUID () 函数,通常用UUID做唯一标识,需要在数据库中进行存储。使用此函数可以让MySQL生成一个UUID值,并以VARCHAR(36)类型的可读形式返回。...但是对于像MySQL的InnoDB存储引擎来说,使用UUID作为主键(PRIMARY KEY)会带来一些问题。 1、问题阐述 问题一:UUID的长度问题 UUID的长度为36个字符。...如果这样的UUID作为主键的话,不仅会是主键的尺寸很大,而且会使二级索引的尺寸变大,原因是MySQL中的二级索引的value存的是PRIMARY KEY。...由于主键和二级索引的尺寸很大,所以不利于在内存中操作 问题二:UUID的格式问题 MySQL的UUID ()使用的是version 1的UUID,该类型的UUID的特点是基于时间,它是一个128位的数字...那么我们可以使用虚拟列(MySQL5.7的新特性,虚拟列不占用存储空间)来存放文本形式的UUID。 然后,还有如何巧妙地重新排列二进制形式的字节的问题。

    11.2K30

    主键优化:自增ID与UUID的适用场景对比

    作为开发者,我们常面临两种主流方案:自增ID(如MySQL的AUTO_INCREMENT)和UUID(通用唯一标识符)。...工作原理通过数据库内置序列(如MySQL的AUTO_INCREMENT属性)实现单调递增,典型用法: CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT...范围查询需全索引扫描,违背局部性原理 四、实战压测:性能与扩展性对决通过基准测试揭示关键差异(测试环境:MySQL 8.0,SSD存储,100万数据量):场景 自增ID耗时UUID耗时性能差距单条插入...分布式场景反转:undefined 当分片数≥8时,UUID的插入吞吐量反超自增ID(避免中心化ID生成器的网络开销)关键维度说明: 扩展性需求: 单库架构:优先自增ID 多活数据库:强制UUID.../ULID 性能容忍度: 读密集型:自增ID优势明显 异步写场景:可接受UUID代价 安全要求: 对外API:必须UUID防止爬取 内部系统:自增ID更高效 存储成本: 海量日志:慎用UUID

    94211

    Mysql 8.0 更好的支持了 UUID

    定义了5个版本,MySQL 实现的是版本1,由 时间戳、UUID版本、MAC地址构成 好处 MySQL 中使用 UUID 是对 AUTO_INCREMENT PRIMARY KEY的一个很好的替代,有如下好处...keys 在不同 表、库、服务器 中都是唯一的 安全性更好,很难猜 可以离线生成 可以简化数据库复制 不足 但也有不好的地方: 增加了存储空间 增加了问题调试的难度 有性能问题,因为长度更长,并且无序 MySQL...8.0 的处理方法 MySQL8.0 新增了3个函数: UUID_TO_BIN BIN_TO_UUID IS_UUID 通过这3个函数,使我们可以更方便的应用UUID,并且是对上面提到的几点不足的一个解决方案...t (id binary(16) PRIMARY KEY); 插入 INSERT INTO t VALUES(UUID_TO_BIN(UUID())); 查询 SELECT BIN_TO_UUID(...id) FROM t; +--------------------------------------+ | BIN_TO_UUID(id); | +----------------------

    6.1K110

    为啥不能用uuid做MySQL的主键 ?

    在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,...本篇博客的目录 mysql程序实例 使用uuid和自增id的索引结构对比 总结 一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid...带着疑问,我们来探讨一下这个问题: 二、使用uuid和自增id的索引结构对比 2.1.使用自增id的内部结构 image.png 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面...的生成策略在大数据量的数据插入表现,然后分析了id的机制不同在mysql的索引结构以及优缺点,深入的解释了为何uuid和随机不重复id在数据插入中的性能损耗,详细的解释了这个问题。...在实际的开发中还是根据mysql的官方推荐最好使用自增id,mysql博大精深,内部还有很多值得优化的点需要我们学习。

    4.7K20

    唯一ID生成算法剖析引UUID数据库自增ID雪花算法方案对比

    ID 安全性:不暴露系统和业务的信息 一般来说,常用的唯一ID生成方法有这些: UUID: 基于时间戳&时钟序列生成 基于名字空间/名字的散列值(MD5/SHA1)生成 基于随机数生成 数据库自增ID...UUID算法的目的是为了生成某种形式的全局唯一ID来标识系统中的任一元素,尤其在分布式环境下,该ID需要不依赖中心认证即可自动生成全局唯一ID。...各种方案都有其优缺点,技术的使用没有绝对的好坏之分,主要在于是否适合使用场景: 要求生成全局唯一且不会重复ID,不关心顺序 —— 使用基于时间的UUID 如游戏聊天室中不同用户的身份ID 要求生成唯一...ID,具有名称不可变性,可重复生成 —— 使用基于名称哈希的UUID 如基于不可变信息生成的用户ID,若不小心删除,仍可根据信息重新生成同一ID 要求生成有序且自然增长的ID —— 使用数据库自增ID...安全 基于名字哈希的UUID 强唯一性 无序 高可用 自主生成 较安全 数据库自增ID 强唯一性 有序 较高可用 依赖中心主机 暴露数量 数据库批量ID 强唯一性 批量内有序 较高可用 依赖中心主机 暴露数量

    3.1K10
    领券