测试Atlas的分表功能


开启Atlas分表功能

vi /usr/local/mysql-proxy/conf/test.cnf

修改参数

tables = demo.ms.id.3

demo为数据库,ms为表,age为字段,3为分表的个数
ps:表序号是从0开始的
修改之后重启Atlas

/usr/local/mysql-proxy/bin/mysql-proxyd test restart

下面开始创建3个表

CREATE TABLE `demo`.`ms_0` (
`id` INT(8) NOT NULL primary key AUTO_INCREMENT , 
`age` INT(3) NOT NULL,
`name` varchar(10) not null)
ENGINE = InnoDB;

CREATE TABLE `demo`.`ms_1` (
`id` INT(8) NOT NULL primary key AUTO_INCREMENT , 
`age` INT(3) NOT NULL,
`name` varchar(10) not null)
ENGINE = InnoDB;

CREATE TABLE `demo`.`ms_2` (
`id` INT(8) NOT NULL primary key AUTO_INCREMENT , 
`age` INT(3) NOT NULL,
`name` varchar(10) not null)
ENGINE = InnoDB;

写一个test.php的文件,用程序执行sql

 
  

根据上面的配置以id字段分表
执行结果

【ms_0表数据】

测试Atlas的分表功能_第1张图片

【ms_1表数据】

测试Atlas的分表功能_第2张图片

【ms_2表数据】

测试Atlas的分表功能_第3张图片

PS:当通过Atlas执行(SELECT、DELETE、UPDATE、INSERT、REPLACE)操作时,Atlas会根据分表结果(id%3=k),定位到相应的子表(ms_k)。例如,执行select * from ms where id=13;,Atlas会自动从ms_10这张子表返回查询结果。但如果执行SQL语句(select * from ms;)时不带上id,则会提示执行ms 表不存在

问题:这里我发现一个问题id=1的有两条数据的问题

TRUNCATE TABLE `ms_0`;
TRUNCATE TABLE `ms_1`;
TRUNCATE TABLE `ms_2`;

测试tables = demo.ms.name.3
测试结果
如果表的字段是字符型,不分表,插入ms0


QQ交流群:136351212
查看原文: http://www.phpsong.com/2389.html

你可能感兴趣的:(测试Atlas的分表功能)