`
冷静
  • 浏览: 141561 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

Mycat 设置全局序列号

 
阅读更多

全局序列号介绍

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

 

本地文件方式

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

配置方式:

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

GLOBAL_SEQ.HISIDS=

GLOBAL_SEQ.MINID=1001

GLOBAL_SEQ.MAXID=1000000000

GLOBAL_SEQ.CURID=1000

其中HISIDS表示使用过的历史分段(一般无特殊需要可不配置),MINID表示最小ID值,MAXID表示最大ID值,CURID表示当前ID值。

server.xml中配置:

1
<property name="sequnceHandlerType">0</property>

注:sequnceHandlerType需要配置为0,表示使用本地文件方式。 1表示数据库方式

使用示例:

1
insert into table1(id,namevalues(next value for MYCATSEQ_GLOBAL,‘test’);

缺点:当MyCAT重新发布后,配置文件中的sequence会恢复到初始值。

优点:本地加载,读取速度较快。

 

数据库方式

原理:在数据库中建立一张表,存放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配置:

1
<property name="sequnceHandlerType">1</property>

注:sequnceHandlerType 需要配置为1,表示使用数据库方式生成sequence.

数据库配置:

1) 创建MYCAT_SEQUENCE表

– 创建存放sequence的表

DROP TABLE IF EXISTS MYCAT_SEQUENCE;

– name sequence名称

– current_value 当前value

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

1
2
3
4
5
6
CREATE TABLE MYCAT_SEQUENCE (
NAME VARCHAR (50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 100,
PRIMARY KEY (NAME)
) ENGINE = INNODB;

– 插入一条sequence

1
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES (‘GLOBAL’, 100000, 100);

2) 创建相关function

 

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DROP FUNCTION IF EXISTS `mycat_seq_currval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) 
RETURNS varchar(64) CHARSET latin1
    DETERMINISTIC
BEGIN 
        DECLARE retval VARCHAR(64);
        SET retval="-999999999,null";  
        SELECT concat(CAST(current_value AS CHAR),",",CAST(increment AS CHAR) ) INTO retval 
          FROM MYCAT_SEQUENCE  WHERE name = seq_name;  
        RETURN retval ; 
END
;;
DELIMITER ;

 

– 设置sequence值

1
2
3
4
5
6
7
8
9
10
11
12
13
DROP FUNCTION IF EXISTS `mycat_seq_nextval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64)
 CHARSET latin1
    DETERMINISTIC
BEGIN 
         UPDATE MYCAT_SEQUENCE  
                 SET current_value = current_value + increment 
                  WHERE name = seq_name;  
         RETURN mycat_seq_currval(seq_name);  
END
;;
DELIMITER ;

– 获取下一个sequence值

 

1
2
3
4
5
6
7
8
9
10
11
12
13
DROP FUNCTION IF EXISTS `mycat_seq_setval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), value INTEGER
RETURNS varchar(64) CHARSET latin1
    DETERMINISTIC
BEGIN 
         UPDATE MYCAT_SEQUENCE  
                   SET current_value = value  
                   WHERE name = seq_name;  
         RETURN mycat_seq_currval(seq_name);  
END
;;
DELIMITER ;

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

例如:

USER_SEQ=test_dn1

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

you might want to use the less safe log_bin_trust_function_creators variable

需要对数据库做如下设置:

windows下my.ini[mysqld]加上log_bin_trust_function_creators=1

linux下/etc/my.cnf下my.ini[mysqld]加上log_bin_trust_function_creators=1

修改完后,即可在mysql数据库中执行上面的函数.

使用示例:

1
insert into table1(id,namevalues(next value for MYCATSEQ_GLOBAL,‘test’);

 

本文摘自:《Mycat权威指南》

分享到:
评论

相关推荐

    mycat全局序列号

    NULL 博文链接:https://sanniangmiao.iteye.com/blog/2249091

    Mycat全局序列号示例

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

    Mycat 2 全局序列的前提 SQL

    【Mycat 2】全局序列的前提 SQL

    mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源

    mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源...

    MyCat测试报告(单机MyCAT对比多机MyCAT)1

    测试数据如下: 第一组163264128MyCat 1台 QPS12625.512373.634076.246335.3MyCat 1台 TPS4591.094

    mycat原理使用+mysql主从备份读写分离.rar

    mycat的概念原理介绍,mycat的全局自增、分片策略、简介与安装。通过mycat实现mysql主从备份、在centos中安装,四个阶段优化。

    MYCAT.zip MYCAT.zip

    MYCAT.zip MYCAT.zip MYCAT.zip

    Mycat从入门到精通视频教程

    Mycat从入门到精通视频教程目录介绍: 第1课 Mycat前世今生 Mycat的历史、背后的团队、发展现状、RoadMap等 第2课 Mycat原理与入门 Mycat的原理、主要功能、配置和使用入门 第3课 Mycat故障排查指南 常见...

    MyCat知识点汇总

    该文档主要整理了Mycat的相关内容,包括Mycat简介、安装部署、读写分离搭建、垂直拆分、水平拆分、Mycat安全设置以及Mycat监控工具等内容

    Mycat源码分析

    Mycat源码分析Mycat源码分析Mycat源码分析Mycat源码分析Mycat源码分析

    mycat安装与测试

    mycat的安装与测试,mycat在服务器上的安装方式等,还有分片的一些介绍

    mycat-linux版

    mycat linux版的中间件,mysql分库分表、读写分离,

    mycat实现读写分离

    mycat实现读写分离

    Mycat性能调优指南

    Mycat性能调优指南 各个部分的调优方式和经验参数 MyCAT 性能调优指南 JVM调优: 内存占用分两部分:java堆内存

    mycat从入门到跑路

    Mycat从入门到精通视频教程目录介绍: 第1课 Mycat前世今生 Mycat的历史、背后的团队、发展现状、RoadMap等 第2课 Mycat原理与入门 Mycat的原理、主要功能、配置和使用入门 第3课 Mycat故障排查指南 常见问题 日志...

    MyCat权威指南 更新于2018年7月25

    Mycat 发展到目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端可以支持 MySQL、SQL Server、 Oracle、DB2、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型 NoSQL 方式的存储,未来还会支持更 多类型的...

    Mycat-server-1.6.6.1 + MyCat-Web1.0

    Mycat发展到目前版本,已经不在是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NOSQL方式的存储,未来还会支持更多类型的存储。...

    MyCAT使用手册详细教程

    2015年5月,由核心参与者们一起编写的第一本官方权威指南《Mycat权威指南》电子版发布,累计超过500本,成为开源项目中的首创。 截至2015年7月,超过100个项目采用Mycat,涵盖银行、电信、电子商务、物流、移动应用...

    Mycat文档.zip

    Mycat资料

    Mycat中间件

    mycat mycat mycat mycat mycat中间件 mycat中间件 mycat中间件

Global site tag (gtag.js) - Google Analytics