文档章节

MyCat 全局序列号配置(数据库方式)

w
 walle-Liao
发布于 2016/03/08 07:53
字数 412
阅读 139
收藏 0

本次实验 MyCat Scheme.xml 文件如下

本次实验将 MyCat 全局序列号配置在 dn3 节点上面

修改 server.xml配置:

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

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


修改 sequence_db_conf.properties 配置:

配置文件中 GLOBAL=dn3 (GLOBAL 为全局序列的名称,dn3 表示节点)


执行以下 SQL 创建全局 sequence 需要的表,并初始化数据(在 dn3 节点上)

drop table if exists 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;
insert into mycat_sequence(name, current_value, increment) values (' GLOBAL', 100000, 100);  -- 注意这里的 GLOBAL 要大写,对应上 sequence_db_conf.properties 的配置


创建以下函数 (在 dn3 节点上)

-- 获取当前sequence的值 (返回当前值,增量)
DROP FUNCTION IF EXISTS MYCAT_SEQ_CURRVAL;
DELIMITER $$
CREATE FUNCTION mycat_seq_currval(SEQ_NAME VARCHAR(50)) RETURNS VARCHAR(64) CHARSET utf8
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 UTF8
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 UTF8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT WHERE NAME = SEQ_NAME;
RETURN MYCAT_SEQ_CURRVAL(SEQ_NAME);
END$$
DELIMITER ;

测试 sequence

-- 测试 sequence
insert into t_person(id, name) values(next value for MYCATSEQ_GLOBAL, 'test');


更详细的内容请参考 MyCat 权威指南

© 著作权归作者所有

w
粉丝 3
博文 15
码字总数 15775
作品 0
深圳
私信 提问
MyCAT全局序列号-数据库方式

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

HilaryHe
2018/07/23
0
0
MySQL 数据库中间件 MyCAT 基础解析

前言 网络应用持续扩张的过程中,为了处理海量数据往往首先遇到的挑战就是数据存储的扩展 数据存储的扩展一般以切分来实现,切分的技术实现又可分为垂直切分和水平切分: 以表(或Schema)为切...

PeakFang-BOK
2018/11/17
0
0
mycat实现mysql分库分表

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

红隐
2018/05/06
0
0
高性能Mysql中间组件Mycat安装配置

高性能Mysql中间组件Mycat安装配置 由于公司项目需要使用到读写分离,但是官方版本的Mysql-proxy读写分离组件太不稳定且有很多BUG,最终决定使用Mycat作为中间组件,其实读写分离只是Mycat中...

幸运券发放
2018/05/02
0
0
数据库水平切分(Mycat分片路由原理和全局序列号)

分片路由原理 Select * from travelrecord where id in(5000001, 10000001); dn1,dn2,dn3, id=5000001这条数据在dn2上,id=10000001这条数据在dn3上。 全部扫描一遍dn1 dn2 dn3,结果导致性能...

这很耳东先生
2018/08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker搭建Mysql集群、主从同步复制

1、创建数据挂载点: mkdir /opt/mysql-master/mysql、/opt/mysql-master/conf.d、/opt/mysql-slave/conf.d、/opt/mysql-slave/conf.d 2、分别在master、slave节点文件目录conf.d下创建touch......

WALK_MAN
20分钟前
1
0
手把手教你做中间件开发(分布式缓存篇)-借助redis已有的网络相关.c和.h文件,半小时快速实现一个epoll异步网络框架,程序demo

本文档配合主要对如下demo进行配合说明: 借助redis已有的网络相关.c和.h文件,半小时快速实现一个epoll异步网络框架,程序demo 0. 手把手教你做中间件、高性能服务器、分布式存储技术交流群 ...

y123456yz
21分钟前
1
0
阿里技术男的成长史:越想证明自己死得越快……

在上海工作8年后,身为部门经理的钱磊,管理着一家ERP公司的百十来号员工,“再往上爬就是老板和他儿子了……从这个领域的技术角度来讲算是做到了顶。”05年,钱磊就开始关注一家名字奇怪,做...

阿里云云栖社区
25分钟前
2
0
Spring-boot单元测试(私有方法测试)

Spring-boot的单元测试网上有了很多,当项目是可以使用spring-boot正常运行时,只要在测试类上添加如下配置就使用@Autowired的方式进行单元测试 @RunWith(SpringJUnit4ClassRunner.class)@...

琴兽
42分钟前
1
0
spring cloud(第一部)框架概述

关于微服务 近几年,'微服务'这个词越来越多的被身边的人所提及,到底什么是微服务,为什么微服务总是伴随着spring cloud被人们所提及,这里笔者结合多年的技术经历跟大家分享下自己的理解:...

白中墨
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部