MySQL中的UUID

来源:互联网 发布:网络连接器主要 编辑:程序博客网 时间:2024/05/01 23:12

避免主键冲突可以有多种方法,其中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_taken100000               100000               1.87230491638200000               100000               2.42642807961300000               100000               3.65519285202400000               100000               4.23701429367500000               100000               4.88455510139600000               100000               5.57620716095700000               100000               7.50717425346800000               100000               9.49350070953900000               100000               10.15477514271000000              100000               12.07480216031100000              100000               12.2773101331200000              100000               12.28191590311300000              100000               16.98545885091400000              100000               20.38736891751500000              100000               21.86426496511600000              100000               24.42242574691700000              100000               29.68579173091800000              100000               31.54162001611900000              100000               35.46717286112000000              100000               41.4726109505SELECT PERFORMANCE--------------------------------------------------------total_rows           chunk_size           time_taken100000               10000                0.165283203125200000               10000                0.163378000259300000               10000                0.162928104401400000               10000                0.164531946182500000               10000                0.170125961304600000               10000                0.167329072952700000               10000                0.166491746902800000               10000                0.174521684647900000               10000                0.1679961681371000000              10000                0.1717684268951100000              10000                0.1717538833621200000              10000                0.1703970432281300000              10000                0.1759335994721400000              10000                0.1886377334591500000              10000                0.2055118083951600000              10000                0.7641067504881700000              10000                0.5846478939061800000              10000                0.8143808841711900000              10000                0.5493729114532000000              10000                0.635137557983
  • UUID - BINARY(16)
INSERT PERFORMANCE--------------------------------------------------------total_rows           chunk_size           time_taken100000               100000               2.35787940025200000               100000               1.5819132328300000               100000               2.00737380981400000               100000               2.36268806458500000               100000               1.95024132729600000               100000               2.52386879921700000               100000               2.46662926674800000               100000               3.63739991188900000               100000               3.625501871111000000              100000               4.081640958791100000              100000               4.744328975681200000              100000               6.742409706121300000              100000               6.221600532531400000              100000               8.042012214661500000              100000               6.055082321171600000              100000               6.956445217131700000              100000               5.368731975561800000              100000               7.148027896881900000              100000               7.148968219762000000              100000               9.12283611298SELECT PERFORMANCE--------------------------------------------------------total_rows           chunk_size           time_taken100000               10000                0.0722301006317200000               10000                0.0698809623718300000               10000                0.0726082324982400000               10000                0.0731747150421500000               10000                0.0735011100769600000               10000                0.0744516849518700000               10000                0.0759541988373800000               10000                0.0766224861145900000               10000                0.07734251022341000000              10000                0.07739281654361100000              10000                0.07899880409241200000              10000                0.07867383956911300000              10000                0.0779969692231400000              10000                0.08046364784241500000              10000                0.08095407485961600000              10000                0.08114099502561700000              10000                0.0816800594331800000              10000                0.08148598670961900000              10000                0.08132219314582000000              10000                0.0838458538055

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

JPA中的具体表实体设置

参考文章Hibernate和UUID标示符

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

    @Id    @Column(columnDefinition = "BINARY(16)")    private UUID uuid;
0 0
原创粉丝点击