测试Atlas的分表功能

来源:互联网 发布:java ringbuffer 编辑:程序博客网 时间:2024/05/01 20:56

开启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

<?php$mysql_server_name="192.168.171.132:1234"; //数据库服务器名称$mysql_username="root"; // 连接数据库用户名$mysql_password="123456"; // 连接数据库密码$mysql_database="demo"; // 数据库的名字// 连接到数据库$conn=mysql_connect($mysql_server_name, $mysql_username,$mysql_password);for($i=0;$i<100;$i++){$c=rand(1,100);$strsql="insert into ms(id,age,name)value(".$i.",".$c.",'".rand_name()."')";$result=mysql_db_query($mysql_database, $strsql, $conn);}function rand_name(){for ($i = 1; $i <= 4; $i++) {$str.= chr(rand(97, 122));}return $str;}

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

【ms_0表数据】

ms_0表数据

【ms_1表数据】

ms_1表数据

【ms_2表数据】

ms_2表数据

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
0 0
原创粉丝点击