一、本地文件方式

原理:此方式MyCAT将sequence配置到文件中,当使用到sequence中的配置后,MyCAT会更下classpath中的sequence_conf.properties文件中

sequence当前的值。

配置方式:

  • sequence_conf.properties中配置:

在sequence_conf.properties文件中做如下配置:

#default global sequence

GLOBAL.HISIDS=

#最小值

GLOBAL.MINID=10001

#最大值

GLOBAL.MAXID=20000

#当前值

GLOBAL.CURID=10000

  • server.xml中配置:
<!--sequnceHandlerType=0表示:使用本地文件的方式配置mycat的全局序列号,对应sequence_conf.properties文件sequnceHandlerType=1表示:使用数据库表的方式配置mycat的全局序列号--><property name="sequnceHandlerType">0</property>

  • 配置完成后重启mycat服务

测试:

二、使用数据库方式

原理:在数据库中建立一张表,存放sequence名称(name),sequence当前值(current_value),步长(increment int类型每次读

取多少个sequence,假设为K)等信息;

Sequence获取步骤:

1).当初次使用该sequence时,根据传入的sequence名称,从数据库这张表中读取current_value,和increment到MyCat中,

并将数据库中的current_value设置为原current_value值+increment值;

2).MyCat将读取到current_value+increment作为本次要使用的sequence值,下次使用时,自动加1,当使用increment次

后,执行步骤1)相同的操作.

MyCat负责维护这张表,用到哪些sequence,只需要在这张表中插入一条记录即可。若某次读取的sequence没有用完,系统就

停掉了,则这次读取的sequence剩余值不会再使用。

配置方式:

server.xml配置:

<!--sequnceHandlerType=0表示:使用本地文件的方式配置mycat的全局序列号,对应sequence_conf.properties文件sequnceHandlerType=1表示:使用数据库表的方式配置mycat的全局序列号--><property name="sequnceHandlerType">1</property>

数据库配置:

1) 创建MYCAT_SEQUENCE表

– 创建存放sequence的表

DROP TABLE IF EXISTS MYCAT_SEQUENCE;

– name sequence名称

– current_value 当前value

– increment 增长步长! 可理解为mycat在数据库中一次读取多少个sequence. 当这些用完后, 下次再从数据库中读取.

/*创建存放sequence的表*/CREATE TABLE MYCAT_SEQUENCE (NAME VARCHAR (50),current_value INT NOT NULL,increment INT NOT NULL DEFAULT 100,PRIMARY KEY (NAME)
) ENGINE = INNODB;

– 插入一条sequence

INSERT INTO MYCAT_SEQUENCE (NAME,current_value,increment
)
VALUES('GLOBAL', 100000, 100);

2) 创建相关function

– 获取当前sequence的值 (返回当前值,增量)

-- ----------------------------
-- 函数结构: `mycat_seq_currval`
-- 获取当前sequence的值(返回当前值,增量)
-- ----------------------------DROP FUNCTION
IF EXISTS mycat_seq_currval;CREATE  FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1DETERMINISTIC
BEGINDECLARE retval VARCHAR(64);SET retval="-1,0";SELECT concat(CAST(current_value AS CHAR),",",CAST(increment AS CHAR) ) INTO retval FROM MYCAT_SEQUENCE  WHERE name = seq_name;RETURN retval ;
END

– 设置sequence值

-- ----------------------------
-- 函数结构: `mycat_seq_setval`
-- 设置sequence的值
-- ----------------------------DROP FUNCTION IF EXISTS mycat_seq_setval;CREATE  FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), value INTEGER) RETURNS varchar(64) CHARSET latin1DETERMINISTIC
BEGINDECLARE retval VARCHAR(64);DECLARE inc INT;SET inc = 0;SELECT increment INTO inc FROM MYCAT_SEQUENCE WHERE name = seq_name;UPDATE MYCAT_SEQUENCE SET current_value = value WHERE name = seq_name;SELECT concat(CAST(value as CHAR),",",CAST(inc as CHAR)) INTO retval;RETURN retval;
END

– 获取下一个sequence值

-- ----------------------------
-- 函数结构: `mycat_seq_nextval`
-- 获取下一个sequence的值
-- ----------------------------
DROP FUNCTION IF EXISTS mycat_seq_nextval;
CREATE  FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1DETERMINISTIC
BEGINDECLARE retval VARCHAR(64);DECLARE val BIGINT;DECLARE inc INT;DECLARE seq_lock INT;set val = -1;set inc = 0;SET seq_lock = -1;SELECT GET_LOCK(seq_name, 15) into seq_lock;if seq_lock = 1 thenSELECT current_value + increment, increment INTO val, inc FROM MYCAT_SEQUENCE WHERE name = seq_name for update;if val != -1 thenUPDATE MYCAT_SEQUENCE SET current_value = val WHERE name = seq_name;end if;SELECT RELEASE_LOCK(seq_name) into seq_lock;end if;SELECT concat(CAST((val - inc + 1) as CHAR),",",CAST(inc as CHAR)) INTO retval;RETURN retval;
END

3) sequence_db_conf.properties相关配置,指定sequence相关配置在哪个节点上:

这里设置的是dn1节点,那么上面的函数及表都是建立在dn1节点对应的数据库实例上的

注意:MYCAT_SEQUENCE表和以上的3个function,需要放在同一个节点上。function请直接在具体节点的数据库上执行

测试:

insert into travelrecord(id,name)values(next value for MYCATSEQ_GLOBAL,'hexmith');

insert into travelrecord(id,name)values(next value for MYCATSEQ_GLOBAL,'Mycat');

在前面的测试中,我添加到MYCAT_SEQUENCE表中的数据设置的步长是100,此处吻合。

转载于:https://www.cnblogs.com/doctorJoe/p/5259011.html

Mycat探索之旅(3)----Mycat的全局序列号相关推荐

  1. MyCAT全局序列号-数据库方式

    1.MyCat中的全局序列号介绍 在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一.为此,MyCat 提供了全局 sequence,并且提供了包含本地配置和数据库配置等多种实现方式. ...

  2. Mycat 设置全局序列号

    全局序列号介绍 在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一.为此,MyCat 提供了全局sequence,并且提供了包含本地配置和数据库配置等多种实现方式. 本地文件方式 原理 ...

  3. MyCat:第八章:MyCAT In Action中文版

    MyCAT  In Action中文版 MyCAT介绍 什么是MyCAT?简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的"大数据库集群" 支持事务.ACID.可以替 ...

  4. Mycat关键特性,什么是MYCAT,MYCAT监控,版本架构,长期规划2.0,Mycat高可用方案

    1.Mycat关键特性 1.1.关键特性 • 支持SQL92标准 • 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 • 遵守Mysql原生协议 ...

  5. 应用 | 同学,该学MyCat实际应用案例与MyCat读写分离了

    Hi!我是小小,一个双鱼座的佛系程序猿,今日的blog将会写关于MyCat最后一点学习内容,读写分离,与MyCat实际应用案例和一个小小的例子. MyCat 读写分离 MyCat的读写分离是建立在My ...

  6. Linux 探索之旅 | 第五部分第六课:一朝 Shell 函数倾,斗转星移任我行

    -- 作者 谢恩铭 转载请注明出处 内容简介 前言 函数的作用 函数的定义 传递参数 返回值 变量作用范围 重载命令 函数的设计 总结 第五部分第七课预告 1. 前言 上一课 Linux探索之旅 | ...

  7. c 字符串数组_C语言探索之旅 | 第二部分第四课:字符串

    内容简介 前言 字符类型 显示字符 字符串其实就是字符的数组 字符串的创建和初始化 从 scanf 函数取得一个字符串 操纵字符串的一些常用函数 总结 第二部分第五课预告 1. 前言 上一课 C语言探 ...

  8. C语言探索之旅 | 第二部分第一课:模块化编程

    C语言之父 Dennis Ritchie -- 简书作者 谢恩铭 转载请注明出处 第二部分第一课:模块化编程 上一课是C语言探索之旅 | 第一部分第十课:练习题+习作,至此,我们[C语言探索之旅]的第 ...

  9. ASPNet请求处理机制初步探索之旅Part2核心

    ASPNet请求处理机制初步探索之旅Part2核心 开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反 ...

最新文章

  1. Kafka代码走读-LogCleaner
  2. 为什么成员函数不占用类和对象的空间
  3. [密码学] 密钥分发
  4. javaScript(1):基础部分
  5. linux测试函数耗时tick数,C语言中怎样测验函数执行时间
  6. 动态删除列表中的元素
  7. 疫情下的十大堵城:复工后整体拥堵下降37.3%
  8. 初学 Delphi 嵌入汇编[13] - 地址参数用 [] 取值
  9. 【Axure图标库】Unicons线形字体图标库1200+ 与FontAwesome同类
  10. Warez 3D动画,超牛
  11. web渗透测试入门01
  12. 增加关键词密度不要堆积
  13. docx文档怎么排列图片_怎么把图片文字转换成word?
  14. openstack部署过程5
  15. 美团店铺评价语言处理以及文本分类(logistic regression)
  16. NCRE公共基础知识(一) 计算机系统
  17. 矩阵键盘基于51(UcosII)计算器小项目
  18. qt tableWidget 去掉网格线
  19. Git、Github、Gitee、GitLab学习笔记
  20. 解决java.util.LinkedHashMap cannot be cast to xxx(domain实体类)的问题

热门文章

  1. @ControllerAdvice这个注解主要作用是什么
  2. idea中build项目之后生成的target看不见
  3. 010_SpringBoot视图层技术thymeleaf-变量输出与字符串操作
  4. 002_SpringBoot整合Servlet
  5. 024_JDK的equals方法
  6. 028_CSS外边距
  7. Linux查看谁修改的文件,linux如何查看近来修改的文件
  8. igmpproxy_Linux IGMP PROXY 学习笔记 之二 igmp proxy的处理流程分析
  9. kaggle房价预测特征意思_R语言实战:复杂数据处理和分析之Kaggle房价预测
  10. 员工培训案例分析答案_在职员工培训管理办法案例