如果我们两个数据库组成一个主从模式集群,正常情况下可以解决数据库可靠性问题,但是如果主库挂掉后,数据没有及时同步到从库,这个时候会出现ID重复的现象。我们可以使用双主模式集群,也就是两个Mysql实例都能单独的生产自增ID,这样能够提高效率,但是如果不经过其他改造的话,这两个Mysql实例很可能会生成同样的ID。需要单独给每个Mysql实例配置不同的起始值和自增步长。

第一台Mysql实例配置:

set @@auto_increment_offset = 1;     -- 起始值
set @@auto_increment_increment = 2;  -- 步长

第二台Mysql实例配置:

set @@auto_increment_offset = 2;     -- 起始值
set @@auto_increment_increment = 2;  -- 步长

经过上面的配置后,这两个Mysql实例生成的id序列如下:
mysql1,起始值为1,步长为2,ID生成的序列为:1,3,5,7,9,…
mysql2,起始值为2,步长为2,ID生成的序列为:2,4,6,8,10,…

对于这种生成分布式ID的方案,需要单独新增一个生成分布式ID应用,比如DistributIdService,该应用提供一个接口供业务应用获取ID,业务应用需要一个ID时,通过rpc的方式请求DistributIdService,DistributIdService随机去上面的两个Mysql实例中去获取ID。

实行这种方案后,就算其中某一台Mysql实例下线了,也不会影响DistributIdService,DistributIdService仍然可以利用另外一台Mysql来生成ID。

但是这种方案的扩展性不太好,如果两台Mysql实例不够用,需要新增Mysql实例来提高性能时,这时就会比较麻烦。

现在如果要新增一个实例mysql3,要怎么操作呢?
第一,mysql1、mysql2的步长肯定都要修改为3,而且只能是人工去修改,这是需要时间的。
第二,因为mysql1和mysql2是不停在自增的,对于mysql3的起始值我们可能要定得大一点,以给充分的时间去修改mysql1,mysql2的步长。
第三,在修改步长的时候很可能会出现重复ID,要解决这个问题,可能需要停机才行。
为了解决上面的问题,以及能够进一步提高DistributIdService的性能,如果使用第三种生成分布式ID机制。

分布式ID-数据库多主模式相关推荐

  1. 分布式ID(数据库多主模式,这些知识点你会吗

    CREATE TABLE SEQID.SEQUENCE_ID ( id bigint(20) unsigned NOT NULL auto_increment, stub char(10) NOT N ...

  2. 最新高频Java面试题目分享,分布式ID(数据库多主模式

    三.号段模式 我们可以使用号段的方式来获取自增ID,号段可以理解成批量获取,比如DistributIdService从数据库获取ID时,如果能批量获取多个ID并缓存在本地的话,那样将大大提供业务应用获 ...

  3. 一口气说出 9种 分布式ID生成方式,面试官有点懵了

    写在前边 前两天公众号有个粉丝给我留言吐槽最近面试:"四哥,年前我在公司受点委屈一冲动就裸辞了,然后现在疫情严重两个多月还没找到工作,接了几个视频面试也都没下文.好多面试官问完一个问题,紧接 ...

  4. 分布式 ID的 9 种生成方式

    一.为什么要用分布式 ID? 在说分布式 ID 的具体实现之前,我们来简单分析一下为什么用分布式 ID?分布式 ID 应该满足哪些特征? 1.什么是分布式 ID? 拿 MySQL 数据库举个栗子: 在 ...

  5. 九种分布式ID生成方式

    一.为什么要用分布式ID? 在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征? 1.什么是分布式ID? 拿MySQL数据库举个栗子:在我们业务数据量不大的 ...

  6. 九种分布式ID生成算法详解

    一.分布式ID简介 1.什么是分布式ID? 在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付. 但随着数据日渐增长,主从同步也扛不住了,就需 ...

  7. 分布式系统概念 | 分布式ID:数据库、号段模式、雪花算法(Snowflake)、Redis实现方案

    文章目录 分布式ID 数据库 自增ID 多主模式 号段模式 雪花算法 Redis 总结 分布式ID ID是数据的唯一标识,传统的做法是使用数据库的自增ID,但是随着业务规模的不断发展,数据量将越来越大 ...

  8. 大型互联网公司分布式ID方案总结

    ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innodb存储引擎,UUID太长以及无序,所以并 ...

  9. easyui treegrid获取父节点的id_超简单的分布式ID生成方案!美团开源框架介绍

    目录 阐述背景 Leaf snowflake 模式介绍 Leaf segment 模式介绍 Leaf 改造支持 RPC 阐述背景 不吹嘘,不夸张,项目中用到 ID 生成的场景确实挺多.比如业务要做幂等 ...

  10. 超简单的分布式ID生成方案!美团开源框架介绍

    目录 阐述背景 Leaf snowflake 模式介绍 Leaf segment 模式介绍 Leaf 改造支持 RPC 阐述背景 不吹嘘,不夸张,项目中用到 ID 生成的场景确实挺多.比如业务要做幂等 ...

最新文章

  1. 程序员期末试卷_第三部分复习提纲.doc下载
  2. COLING 2018 ⽤对抗增强的端到端模型⽣成合理且多样的故事结尾
  3. matlab参考答案2011至诚,职高数学试卷答卷答案详解
  4. 小米线刷包需要解压么_【连载】刷机教程之小米手机通用线刷教程
  5. 记录 之 numpy查看数据类型和类型转换
  6. 【数论】ZAP-Queries(P3455)
  7. java metric_java版的Metric工具介绍
  8. Hive的使用之脚本文件
  9. include做配置文件
  10. python中list的切片和range函数
  11. 对程序员来说最难的是写代码吗?
  12. 汇编笔记1:debug
  13. ffmpeg-20160629-git-bin.7z
  14. java linux socket编程_linux下socket编程实例?javasocket编程流程?java socket编程实例代码讲解...
  15. 扩展卡尔曼滤波算法 EKF
  16. 利用ASK/OOK 发射模块,实现信号重放
  17. 网络爬虫---从千图网爬取图片到本地
  18. 人工智能之路学习计划
  19. Mysql数据库使用规范
  20. R语言:优雅、卓越的统计分析及绘图环境

热门文章

  1. 在ios开发中使用 try 和 catch 来捕获错误。
  2. NSArray和NSMutableArray对象的使用
  3. 在Axapta中实现trim函数
  4. ActiveMQ网络连接
  5. python实现定时发送qq消息
  6. Spring AOP capabilities and goals
  7. 移植madplay到jz2440【学习笔记】
  8. 【RPC】你应该知道的 RPC 原理
  9. 剑指OFFER之字符串的排列(九度OJ1369)
  10. Python模块包中__init__.py文件的作用(转载)