概述
- 对比下使用UUDI 和 自增主键的优缺点
UUID
- 缺点:
- io:UUID由于主键是随机生成,插入的位置很有看了不在内存中缓存,将会产生大量的随机IO
- 页分裂:由于插入是乱序的,而在 Innodb 的页上存储的数据是有序的,所以会频繁导致叶分裂,这时候会移动大量的数据
- 磁盘空间占用大:生成新页后,可能在很长的一段时间内都不会产生新的插入操作
- 优点:
- 适合 分布式
自增主键
- 优点
- io:自增主键在插入的适合,有较大可能不会产生磁盘io,那个页已经在内存中了
- 页分裂:大大减少页分裂的产生,由于是递增的,当某一页的达到最大填充因子(15/16)的时候,会自动生成新的页,不会发生数据的移动操作
- 磁盘: 非常紧凑,每一页基本上都用满了才写下一页
- 缺点
- 分布式情况下较难实现
- 一直解决方案是,多台机子,自增的数量不同,2台机子,每一台自增+2
折中
- 雪花算法
- 雪花算法可以在分布式情况下,通过时间戳保持自增,同时可以给不同的机子设定不同的序列号,近似于自增主键
- 缺点:
- 时间同步较为麻烦