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

前面和大家介绍了 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

智能推荐

大屏可视化之适配和布局_大屏还原ui适配宽度-程序员宅基地

文章浏览阅读5k次,点赞5次,收藏53次。前言在做可视化大屏的时候,我们首先要保证UI图的比例不变,例如16:9的UI图,但大屏的比例可能是2:1,很多时候大屏的比例往往很少能与UI图的比例一模一样的,这个时候我们就要利用公式换算来适配大屏。例如16:9的UI图:适配大屏当页面首次加载时,判断视口的宽高,如果视口的宽/高 > 16/9 则说明视口宽度比较设计图宽,实际的显示宽度应该等于视口的高度*16/9。如果视口的宽/高 < 16/9 则说明视口高度比设计图高,实际的显示宽度应该等于视口的宽度,显示高度应等_大屏还原ui适配宽度

centos7挖矿病毒(xmrig,javs)清理_xmrig miner怎么彻底清除-程序员宅基地

文章浏览阅读3.3k次。1. 查看计划任务ls /var/spool/cron删除异常任务其配置项。如果当前系统之前并未配置过计划任务,可以直接删除计划脚本目录即可:rm -rf /var/spool/cron/*2. 查看密钥认证文件删除木马创建的密钥认证文件,如果当前系统之前并未配置过密钥认证,可以直接清空认证存放目录:rm -rf /root/.ssh/*如果有配置过密钥认证,需要删除指定的黑客创建的认证文件即可。3. 修复 SSH 配置项一般默认脚本中进行修改的 PermitRootLogin、R._xmrig miner怎么彻底清除

产品经理如何与研发工程师相处?-- Julie Zhuo_研发是把想法变成现实的桥梁-程序员宅基地

文章浏览阅读358次。原作者:Julie Zhuo,前Facebook产品设计副总裁原文地址:https://medium.com/the-year-of-the-looking-glass/how-to-work-with-engineers-a3163ff1eced很久以前,我当过项目经理。之后,我成为了工程师。最近7年,我担任产品设计师。每天我都与这三个岗位的人一起工作。每天,我都能发现新的方式来理解这产品研发背后的三大支柱的职责、挑战和艺术。研发工程师是魔术师,他们只需要轻轻动几下手指调整像素,瞧,一个能运作的产_研发是把想法变成现实的桥梁

利用虚拟机实时迁移技术可以实现服务器的,VMware vMotion虚拟机的实时迁移技术概述...-程序员宅基地

文章浏览阅读3k次。vMotion可在主机之间迁移正在运行的虚拟机,因此进行计划内服务器维护时无需中断应用的使用。概览vSphere vMotion 能在实现零停机和服务连续可用的情况下将正在运行的虚拟机从一台物理服务器实时迁移到另一台物理服务器上,并且能够完全保证事务的完整性。 vMotion 是创建动态、自动化并自我优化的数据中心所需的关键促成技术。即时迁移正在运行的虚拟机轻松管理和安排实时迁移即时迁移正在运行的..._vmware 虚机 漫游 实时性

文档词频矩阵_对论文“从词向量到文档距离”的理解-程序员宅基地

文章浏览阅读184次。文章:From Word Embeddings To Document Distances研究背景在此之前,文档的两种最常见的表述方式是通过袋词(BOW)或词频-逆文档频率(TF-IDF)。但是无法解决近义词之间的距离问题,即是BOW和TF-IDF无法表达词语的含义。由于word2vec的出现,近义词的问题解决了,通过word2vec将词语表示成向量,用两向量的距离表示两词语的距离可以很好的区分“..._文档词频矩阵

Oracle中单引号与双引号的使用及动态拼接_oracle拼接单引号-程序员宅基地

文章浏览阅读1.6k次,点赞9次,收藏13次。Oracle中单引号与双引号的使用及动态拼接。_oracle拼接单引号

随便推点

php跨域问题怎么解决办法,跨域问题的解决方案 php-程序员宅基地

文章浏览阅读107次。本文通过设置Access-Control-Allow-Origin来实现跨域。例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com。如果直接使用ajax访问,会有以下错误:1 XMLHttpRequest cannot load http://server.runoob.com/server.php. No ‘Access-Control-All..._php火狐跨域问题

《C语言程序设计》第五版谭浩强课后答案 第九章《用户自己建立数据类型​》习题答案 (大一大二、考研、计算机二级必看)_c程序设计第五版谭浩强课后答案第九章-程序员宅基地

文章浏览阅读3k次,点赞7次,收藏29次。第九章《用户自己建立数据类型​》习题答案 1.定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。2.写一个函数days,实现第1 题的计算。由主函数将年、月、日传递给days函数,计算后将日子数传回主函数输出。3.编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输人这些记录,用print函数输出这些记录。4.在第3题的基础上,编写一个函数input,用来输人5个学生的数据记录。5.有10个学生,_c程序设计第五版谭浩强课后答案第九章

安装mysql6.3步骤_Mac下安装mysql5.7.18的详细步骤-程序员宅基地

文章浏览阅读65次。一、工具我们需要现在两个工具:MySQL 服务器(mysql-5.7.18)、MySQL GUI(mysql-workbench)MySQL 服务器包含了MySQL 的整个运行环境,安装了它就能通过命令行让 MySQL 运行的很好了。当然如果你不喜欢命令行,可以下载一个 GUI工具来管理 MySQL。GUI的功能很丰富,包括权限设置,创建数据库、创建表格等等。二、安装1.MySQL 服务器下载地址..._mysql workbench 6.3安装

Unity3D之AR开发(一)_关于unity3dar-程序员宅基地

文章浏览阅读1.6k次。第一种方法:高通AR(Vuforia) Vuforia插件下载地址(官网):https://developer.vuforia.com/downloads/sdkVuforia实现图片识别1、新建项目,导入Vuforia插件2、将默认摄像机删除,将Vuforia/Prefabs中的ARCamera和ImageTarget预置体拖到场景中。并进行调整3、将要识别的图片..._关于unity3dar

【医学+深度论文:F25】2018 CVPR Enhanced Optic Disk and Cup Segmentation with Glaucoma Screening from Fundus_cvpr fundus-程序员宅基地

文章浏览阅读462次。25 2018 CVPREnhanced Optic Disk and Cup Segmentation with Glaucoma Screening from Fundus Images using Position encoded CNNsMethod : 分割 + 分类Dataset :Architecture : Unet(DenseNet)+ DenseNet201/ResN..._cvpr fundus

鸿蒙是linux内核吗,谈华为鸿蒙内核和操作系统-程序员宅基地

文章浏览阅读772次。作者|陆首群出品 |COPU开源联盟(ID:COPU2004)谈到华为自研鸿蒙内核和操作系统,从华为透漏出来的信息来看,有点自相矛盾、扑朔迷离!我曾说过:真真假假,虚虚实实!这里有技术原因,也有外部原因。一开始(大概是 2016 年左右),华为的说法:其自研的首款操作系统是搭载物联网(IoT)的(这时要求操作系统小型化、实时性、响应快,采用微内核), 连任正非都坚持这个说法。当时我就看出来,华为..._鸿蒙内核是linux吗

推荐文章

热门文章

相关标签