mysql分布式数据主键数据库自增、UUID、雪花算法中如何选择?

目录

1.读写分离架构

2.数据分片架构(Sharding)

3.多主复制架构


首先需要确定MySQL的分布式架构,是读写分离架构、数据分片架构、多主复制架构还是集群复制架构。

1.读写分离架构

  • 架构描述:将数据库分为读库和写库,读库处理查询操作,写库处理更新操作。通过中间件将请求路由到相应的库。
  • 主键方案:通常使用数据库自增主键或UUID。数据库自增主键在写库上生成,然后通过复制机制同步到读库不会出现并发写入主键重复问题。其次根据MySQL底层索引是B+树结构,每个节点就是一页,每页大小为16Kb,每页中的数据是有序的,每层的节点也都是有序排列的,而UUID生成是无序,但是在B+索引树中是有序的,每次写入都有很大可能出现B+索引树裂变重构影响查询性能,所以推荐使用自增主键。

2.数据分片架构(Sharding)

  • 架构描述:将数据水平划分为多个分片,每个分片存储数据的一个子集,并分布在不同的物理节点上。客户端通过中间件或计算层将查询请求路由到相应的分片。
  • 主键方案
    • 分布式ID生成器:如雪花算法(Snowflake),可以生成唯一的、有序的分布式主键,适合按时间排序的场景。雪花算法本质上是通过算法生成一个二进制的64位长整型。它由四个部分组成分别是最高一位为0代表正数因为我们取号是需要正整数的。第二部分是41位的时间戳,单位是毫秒,可以表示大约69.7年。第三部分10位的机器码,可以表示1024个机器。最后一部分12位表示,在一毫秒之内一个机器能够产生4096个号。但是雪花算法是强依赖时间戳的,如果出现时钟回拨,就会出现取号重复问题。

  • UUID:虽然UUID在全局范围内唯一,但由于其无序性和较长的长度(128位),会出现上面描述UUID的问题。

3.多主复制架构

  • 架构描述:在多个节点上设置主节点,每个主节点都可以处理写操作,并将更改同步到其他主节点和从节点。
  • 主键方案:通常使用数据库自增主键,但需要通过某种机制(如步长、偏移量)来避免主键冲突。如果有三个主节点,可以将步长设置为3,然后分别为每个主节点设置不同的偏移量(如1、2、3)。这样,第一个主节点将生成主键1、4、7等,第二个主节点生成2、5、8等,第三个主节点生成3、6、9等。这种方法的一个主要限制是它影响了数据库的扩展性。当需要添加新的主节点时,可能需要重新调整步长和偏移量的设置。或者使用雪花算法来生成全局唯一的主键。在上面已经讲述了它的原理。
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值