分布式数据库如何实现主键全局自增?-程序员宅基地

前面和大家介绍了 MyCat 中数据库不同的分片规则,从留言中看出大家对分布式数据库中间件还挺感兴趣,因此今天就再来一篇,聊一聊主键全局自增要如何实现。

关于数据库分库分表的问题,我们前面还有几篇铺垫的文章,阅读前面的文章有助于更好的理解本文:


  1. 提高性能,MySQL 读写分离环境搭建(一)

  2. 提高性能,MySQL 读写分离环境搭建(二)

  3. MySQL 只能做小项目?松哥要说几句公道话!

  4. 北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下!

  5. What?Tomcat 竟然也算中间件?

  6. 分布式数据库中间件 MyCat 搞起来!

  7. 数据库分库分表,分片配置轻松入门!


问题

主键自增这应该算是一个非常常见的需求,在单机数据库中,这个需求一个 auto_increment 就能实现,但是在数据库集群中,这个需求却变复杂了,因为存在多个数据库实例 ,各自都是主键自增,合在一起就不是主键自增了。

最简单的思路

最简单的办法莫过于通过设置主键自增的步长和起始偏移量来处理这个问题。默认情况下,主键自增步长为 1 ,如果我们有三个数据库实例,我们可以将主键自增步长设置为 3 ,这样对于第一个数据库实例而言,主键自增就是 1、4、7、10...,对于第二个数据库实例而言,主键自增就是 2、5、8、11...,对于第三个数据库实例而言,主键自增就是 3、6、9、12....。

MSSQL 可以直接在 SQL 中指定主键的自增步长和起始偏移量,但是 MySQL 则需要修改数据库配置才能实现,因此这里不推荐使用这种方式。

MyCat 的办法

MyCat 作为一个分布式数据库中间,屏蔽了数据库集群的操作,让我们操作数据库集群就像操作单机版数据库一样,对于主键自增,它有自己的方案:

  1. 通过本地文件实现

  2. 通过数据库实现

  3. 通过本地时间戳实现

  4. 通过分布式 ZK ID 生成器实现

  5. 通过 ZK 递增方式实现

今天我们就先来看看看如何通过 ZK 递增的方式实现主键全局自增。

配置步骤如下:

  • 首先修改主键自增方式为 4 ,4 表示使用 zookeeper 实现主键自增。

server.xml

640?wx_fmt=png

  • 配置表自增,并且设置主键

schema.xml

640?wx_fmt=png

设置主键自增,并且设置主键为 id 。

  • 配置 zookeeper 的信息

在 myid.properties 中配置 zookeeper 信息:

640?wx_fmt=png

  • 配置要自增的表

sequence_conf.properties

640?wx_fmt=png

注意,这里表名字要大写。

  1. TABLE.MINID 某线程当前区间内最小值

  2. TABLE.MAXID 某线程当前区间内最大值

  3. TABLE.CURID 某线程当前区间内当前值

  4. 文件配置的MAXID以及MINID决定每次取得区间,这个对于每个线程或者进程都有效

  5. 文件中的这三个属性配置只对第一个进程的第一个线程有效,其他线程和进程会动态读取 ZK

  • 重启 MyCat 测试

最后重启 MyCat ,删掉之前创建的表,然后创建新表进行测试即可。

好了,本文主要向大家介绍了 MyCat 实现主键全局自增的方案。不知道大家有没有 GET 到呢?有问题欢迎留言讨论。


640?wx_fmt=gif

IntelliJ IDEA 调试指北

Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?

@ResponseBody 总是乱码?这个问题得好好捋一捋!

数据库分库分表,分片配置轻松入门!

前后端分离时代,Java 程序员的变与不变!

分布式数据库中间件 MyCat 搞起来!

What?Tomcat 竟然也算中间件?

我的第一本书,被选作大学教材了!

北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下!

MySQL 只能做小项目?松哥要说几句公道话!


640?wx_fmt=png

640?wx_fmt=png你点的每个在看,我都认真当成了喜欢
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012702547/article/details/99543909

智能推荐

M1芯片的Mac在开发iOS项目时遇到的问题汇总(模拟器无法运行,Cocoapods错误等)_oc cocospods 安装依赖库之后不能使用模拟器了-程序员宅基地

文章浏览阅读2.3k次。--pod install时报错,且错误提示中有“ffi”字眼,提示错误:/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.3/lib/ffi/library.rb:275: [BUG] Bus Error at 0x00000001042fc000 ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.arm64e-darwin20]解决方案:juejin.cn/post/698064…--pod repo upd_oc cocospods 安装依赖库之后不能使用模拟器了

编辑器VSCode使用心得-程序员宅基地

文章浏览阅读540次。工欲善其事必先利其器,趁手的工具会使我们开发事半功倍。市面上的编辑器我用过许多,编辑器使用经历Notepad++,(开源)这个应该是最轻量级的吧,查看代码还好,编辑代码就算了官网地址:https://notepad-plus-plus.org/Brackets,(开源)这个也不错,github-star:30k了,上次发布版本是6月..._vscode nextick

C++获取当前时间 (std::chrono)_std::chrono 获取当前时间-程序员宅基地

文章浏览阅读4.4w次,点赞23次,收藏80次。在C++11之前要获取当前时间,大多数情况下要使用C语言的time库:#include <iostream>#include<time.h> #include <sstream>int main(){ time_t now = time(NULL); tm* tm_t = localtime(&now); std::string..._std::chrono 获取当前时间

创建Maven项目时提示web.xml is missing and <failOnMissingWebXml> is set to true错误解决方案_spring boot war web.xml is missing and <failonmiss-程序员宅基地

文章浏览阅读8k次,点赞5次,收藏4次。问题描述:创建Maven项目时,出现web.xml is missing and is set to true错误,如图1。图1解决方案:1.在视图Project Explorer中,选择Deployment Descriptor项目并鼠标右键。2.选择Generate Deployment Descriptor Stub,如图2。图2图3_spring boot war web.xml is missing and is set to true

wincc 服务器项目 单用户,WINCC 单用户多用户 客户机服务器 工程师操作员 这三个概念如何区分啊...-程序员宅基地

文章浏览阅读3.4k次。WINCC单用户多用户客户机服务器工程师操作员这三个概念如何区分啊。我在MPI网络中,设置两个单用户WINCC分别和一个PLC通讯,这算什么呢?最佳答案1.单用户就是本机直接和plc连接,和其他电脑没有任何关系的,也就是每台电脑单独和PLC通讯,电脑死机或关机时,其它操作站均能正常使用。2.多用户一般是c/s结构用的,上位机之间存在影响的,如服务器故障会影响到客户机的,多用户系统的..._wincc单用户和多用户区别

以太网芯片W5500的移植_w5500移植-程序员宅基地

文章浏览阅读1.6k次。W5500在单片机上的移植代码的移植代码的修改讲解为W550做客户端的例子,首先W5500作为一个以太网的芯片与单片机是通过SPI接口进行通信的。代码的移植首先我们要去W5500的官网去下载它的程序。因为我们是以太网通信,所以我们需要这几个函数。reset_break_gpio_init(); // 复位与中断管脚初始化spi_gpio_init(); //SPI管脚初始化spiinitailize(); _w5500移植

随便推点

免安装mysql启动3534错误处理_mysql 免安装版本启动时 3534出错_mysql-程序员宅基地

文章浏览阅读295次。上午在win7下安装MYSQL,只到“net start mysql”这一步报错:3534的错误:于是在百度中搜索关键字“mysql服务无法启动3534”。参考以下两个链接中的方法,解决了3534启动失败的问题:mysql服务无法启动3534错误。http://jingyan.baidu.com/article/219f4bf7e978fcde442d38a9.htmlhttp://blog.cs..._免安装mysql启动失败

评测了10款画流程图软件,这4款最好用!(完全免费)_好用的流程图软件免费-程序员宅基地

文章浏览阅读5.1w次,点赞58次,收藏295次。最近在做项目和复习的时候,用了不少流程图软件给我帮了大忙,所以今天就来分享分享你在网上搜索一下流程图软件,能找到很多很多:但这些软件多数并不是专门绘制流程图的软件,它可能是一些思维导图软件、或者说一些产品交互原型图软件,使用时或多或少有些麻烦。而且,普遍这些软件缺点也很多,比如:只有在线版:ProcessOn(https://www.processon.com)导出功能收费:迅捷流程图软件体积庞大:VISIO就没有一款简单易用、绿色免费的流程图软件吗?阿虚花了不少时间,挨着_好用的流程图软件免费

在CentOS6.9安装Azkaban3.50.0_centos6.9 azkaban-程序员宅基地

文章浏览阅读1.4k次。cd /data/install_pkgwget https://github.com/azkaban/azkaban/archive/3.50.0.tar.gztar -zxvf 3.50.0.tar.gzvi /data/install_pkg/azkaban-3.50.0/azkaban-common/src/main/java/azkaban/utils/EmailMessage..._centos6.9 azkaban

Java项目基于ssm+vue.js的学生宿舍维修服务平台附带文章和源代码设计说明文档ppt-程序员宅基地

文章浏览阅读586次,点赞23次,收藏30次。博主介绍:CSDN特邀作者、985计算机专业毕业、某互联网大厂高级全栈开发程序员、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序、前端、python等技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导、面试辅导、简历修改。精彩专栏 推荐订阅2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐。

ultralytics的YOLOv8改为自用版本_from ultralytics.utils.plotting import annotator, -程序员宅基地

文章浏览阅读944次。由于需要用pyqt给yolov8做一个界面,而ultralytics一层嵌一层,不是很好用,所以对它的这个源码进行精简,具体代码我放到了这里,ultralytics使用的版本是8.0.54。具体代码如下,需要根据自己的情况来修改data的配置文件以及权值文件,在代码的49和50行。_from ultralytics.utils.plotting import annotator, colors, save_one_box modul

c++陈维兴第三版3.35_C++面向对象程序设计教程第3版—陈维兴,林小茶课后习题答案...-程序员宅基地

文章浏览阅读1.1k次。C++面向对象程序设计教程课后题答案1、1什么就是面向对象程序设计?面向对象程序设计就是一种新的程序设计范型、这种范型的主要特征就是:程序=对象+消息面向对象程序的基本元素就是对象。主要结构特点就是:第一,程序一般由类的定义与类的使用两部分组成;第二,程序中的一切操作都就是通过向对象发送消息来实现的。1、2什么就是对象?什么就是类?对象与类之间的关系就是什么?对象就是描述其属性的数据以及对这些数据..._c++面向对象程序设计 陈维兴,林小茶课后习题

推荐文章

热门文章

相关标签