MySQL中的UUID

2024-05-02 02:18
文章标签 mysql uuid database

本文主要是介绍MySQL中的UUID,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

避免主键冲突可以有多种方法,其中UUID比较方便而已。

使用UUID

  • 涉及分布式数据库间数据共享与同步的问题

以订单为例,假设有:中心A,中心B,中心C。。。服务器,各服务器均能独立产生订单。最终汇总到中心0服务器中。如果使用自增长主键就会在数据汇聚的时候产生冲突。

UUID可以很好地解决这个问题。

  • JAVA生成UUID

UUID.randomUUID().toString().replaceAll("-","");

UUID的性能问题

由于MySQL的InnoDB类型表在插入数据的时候进行了逐渐排序。因此对于随机UUID在数据量大的时候会出现性能下降的情况

性能损失如图:

这里写图片描述

数据来源MySQL InnoDB Primary Key Choise

提高MySQL中UUID查询性能的方法

很多文章中都提到了将UUID以binary形式存储可以显著提高性能。

如 storing-billions-uuid-fields-mysql-innodb

这篇博文就有详细性能对比:

  • UUID - CHAR(36)

INSERT PERFORMANCE
--------------------------------------------------------
total_rows           chunk_size           time_taken
100000               100000               1.87230491638
200000               100000               2.42642807961
300000               100000               3.65519285202
400000               100000               4.23701429367
500000               100000               4.88455510139
600000               100000               5.57620716095
700000               100000               7.50717425346
800000               100000               9.49350070953
900000               100000               10.1547751427
1000000              100000               12.0748021603
1100000              100000               12.277310133
1200000              100000               12.2819159031
1300000              100000               16.9854588509
1400000              100000               20.3873689175
1500000              100000               21.8642649651
1600000              100000               24.4224257469
1700000              100000               29.6857917309
1800000              100000               31.5416200161
1900000              100000               35.4671728611
2000000              100000               41.4726109505SELECT PERFORMANCE
--------------------------------------------------------
total_rows           chunk_size           time_taken
100000               10000                0.165283203125
200000               10000                0.163378000259
300000               10000                0.162928104401
400000               10000                0.164531946182
500000               10000                0.170125961304
600000               10000                0.167329072952
700000               10000                0.166491746902
800000               10000                0.174521684647
900000               10000                0.167996168137
1000000              10000                0.171768426895
1100000              10000                0.171753883362
1200000              10000                0.170397043228
1300000              10000                0.175933599472
1400000              10000                0.188637733459
1500000              10000                0.205511808395
1600000              10000                0.764106750488
1700000              10000                0.584647893906
1800000              10000                0.814380884171
1900000              10000                0.549372911453
2000000              10000                0.635137557983
  • UUID - BINARY(16)

INSERT PERFORMANCE
--------------------------------------------------------
total_rows           chunk_size           time_taken
100000               100000               2.35787940025
200000               100000               1.5819132328
300000               100000               2.00737380981
400000               100000               2.36268806458
500000               100000               1.95024132729
600000               100000               2.52386879921
700000               100000               2.46662926674
800000               100000               3.63739991188
900000               100000               3.62550187111
1000000              100000               4.08164095879
1100000              100000               4.74432897568
1200000              100000               6.74240970612
1300000              100000               6.22160053253
1400000              100000               8.04201221466
1500000              100000               6.05508232117
1600000              100000               6.95644521713
1700000              100000               5.36873197556
1800000              100000               7.14802789688
1900000              100000               7.14896821976
2000000              100000               9.12283611298SELECT PERFORMANCE
--------------------------------------------------------
total_rows           chunk_size           time_taken
100000               10000                0.0722301006317
200000               10000                0.0698809623718
300000               10000                0.0726082324982
400000               10000                0.0731747150421
500000               10000                0.0735011100769
600000               10000                0.0744516849518
700000               10000                0.0759541988373
800000               10000                0.0766224861145
900000               10000                0.0773425102234
1000000              10000                0.0773928165436
1100000              10000                0.0789988040924
1200000              10000                0.0786738395691
1300000              10000                0.077996969223
1400000              10000                0.0804636478424
1500000              10000                0.0809540748596
1600000              10000                0.0811409950256
1700000              10000                0.081680059433
1800000              10000                0.0814859867096
1900000              10000                0.0813221931458
2000000              10000                0.0838458538055

可以看出性能有了极大的提升。

JPA中的具体表实体设置

参考文章Hibernate和UUID标示符

该方法缺陷在于:主键数据在数据库管理工具中显示为乱码。

@Id@Column(columnDefinition = "BINARY(16)")private UUID uuid;

这篇关于MySQL中的UUID的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/953196

相关文章

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Linux下MySQL8.0.26安装教程

《Linux下MySQL8.0.26安装教程》文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友... 目录1.找到官网下载位置1.访问mysql存档2.下载社区版3.百度网盘中2.linux安装配置1.

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据