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
- MySQL中的UUID
- MySQL中的UUID外部取值时错误
- mysql uuid
- Mysql的UUID
- Mysql的UUID
- Mysql 存储 UUID
- MySQL UUID函数详解
- MySQL uuid的使用
- mysql uuid以及gtid
- mysql中使用UUID
- mysql中uuid函数
- Mysql生成UUID
- mysql生成UUID
- Mysql生成UUID
- iOS5中的UUID
- iOS5中的UUID
- oracle 中的UUID
- Java中的UUID
- Kth Largest Element in an Array
- Shell Script - 追踪与debug
- 宝宝心声
- 分层驱动将IRP分解成多个IRP
- 面向对象(02)
- MySQL中的UUID
- Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析
- NavigationView+Toolbar
- DevExpress XPO 常用功能
- DB Query Analyzer 6.04 is distributed, 78 articles concerned have been published
- HDU 5365(不是地球人)
- HDU 1114
- DevExpress ORM Tool (XPO)
- I Hate It