24MyCat - 全局序列号(数据库方式)

简介: 24MyCat - 全局序列号(数据库方式)

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

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

数据库配置:

1)创建MYCAT_SEQUENCE表

– 创建存放sequence的表

DROP TABLE IF EXISTS MYCAT_SEQUENCE;

– name sequence名称

– current_value 当前value

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

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

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

2)创建相关function

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

DROP FUNCTION IF EXISTS mycat_seq_currval;
DELIMITER
CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET utf-8
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值

DROP FUNCTION IF EXISTS mycat_seq_setval;
DELIMITER
CREATE FUNCTION mycat_seq_setval(seq_name VARCHAR(50),value INTEGER) RETURNS varchar(64) CHARSET utf-8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = value
WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
DELIMITER;

– 获取下一个sequence值

DROP FUNCTION IF EXISTS mycat_seq_nextval;
DELIMITER
CREATE FUNCTION mycat_seq_nextval(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET utf-8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = current_value + increment WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
DELIMITER;
  1. 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数据库中执行上面的函数.

使用示例:

insert into table1(id,name) values(next value for MYCATSEQ_GLOBAL,‘test’);


目录
相关文章
|
8月前
|
存储 中间件 关系型数据库
数据库切片大对决:ShardingSphere与Mycat技术解析
数据库切片大对决:ShardingSphere与Mycat技术解析
712 0
|
SQL Oracle 关系型数据库
数据库系列课程(02)-MyCat读写分离
数据库系列课程(02)-MyCat读写分离
83 0
|
算法 数据库
数据库系列课程(06)-MyCat分片按省操作数据库例子
数据库系列课程(06)-MyCat分片按省操作数据库例子
50 0
|
算法 数据库 索引
数据库系列课程(05)-MyCat分库分表策略
数据库系列课程(05)-MyCat分库分表策略
79 0
|
Linux 网络安全 数据库
数据库系列课程(03)-Linux环境MyCat的安装与配置
数据库系列课程(03)-Linux环境MyCat的安装与配置
168 0
|
存储 中间件 数据处理
05MyCat - 概念 - 数据库中间件
05MyCat - 概念 - 数据库中间件
78 0
|
存储 SQL NoSQL
01MyCat - 数据库切分概述
01MyCat - 数据库切分概述
56 0
|
存储 cobar NoSQL
开源数据库中间件-MyCat初探与分片实践
一个新颖的数据库中间件产品支持mysql集群,或者mariadb cluster,提供高可用性数据分片集群。
236 8
开源数据库中间件-MyCat初探与分片实践
|
分布式数据库
Mycat分布式数据库架构解决方案--配置defaultAccount属性报错解决方案
Mycat分布式数据库架构解决方案--配置defaultAccount属性报错解决方案
170 0
Mycat分布式数据库架构解决方案--配置defaultAccount属性报错解决方案
|
关系型数据库 MySQL 分布式数据库
Mycat分布式数据库架构解决方案--Mycat实现数据库分表
Mycat分布式数据库架构解决方案--Mycat实现数据库分表
103 0
Mycat分布式数据库架构解决方案--Mycat实现数据库分表

热门文章

最新文章