最新消息:欢迎加入小松的QQ群一起讨论一起学习,本站启用小松自己写的redis缓存,文章发布修改自动删除缓存,现在速度杠杠的

测试Atlas的分表功能

Linux 249浏览 0评论

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

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» 测试Atlas的分表功能
本文链接地址:https://www.phpsong.com/2389.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!