开启Atlas分表功能
vi /usr/local/mysql-proxy/conf/test.cnf修改参数
tables = demo.ms.id.3demo为数据库,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_1表数据】
【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
测试Atlas的分表功能
最新推荐文章于 2022-06-02 10:21:21 发布