Amoeba:水平切分

1、在master2上创建users表
  1. [root@localhost:mydb][09:32:49am] MySQL-> CREATE TABLE `users` (
  2.     -> `user_id` int(11) NOT NULL,
  3.     -> `group_id` int(11) NOT NULL,
  4.     -> `name` varchar(20) DEFAULT NULL,
  5.     -> `address` varchar(50) DEFAULT NULL,
  6.     -> `email` varchar(50) DEFAULT NULL,
  7.     -> PRIMARY KEY (`user_id`)
  8.     -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  9. Query OK, 0 rows affected (0.02 sec)
2、配置rule.xml
  1.          <tableRule name="users" schema="mydb" defaultPools="master1,master2">

  2.                 <rule name="rule1">
  3.                         <parameters>user_id</parameters>
  4.                         <expression><![CDATA[ user_id %2 == 0 ]]></expression>
  5.                         <defaultPools>master1</defaultPools>
  6.                         <readPools>slave1</readPools>
  7.                         <writePools>master1</writePools>
  8.                 </rule>

  9.                 <rule name="rule1">
  10.                         <parameters>user_id</parameters>
  11.                         <expression><![CDATA[ user_id %2 == 1 ]]></expression>
  12.                         <defaultPools>master2</defaultPools>
  13.                         <readPools>slave2</readPools>
  14.                         <writePools>master2</writePools>
  15.                 </rule>
  16.                 
  17.         </tableRule>
  18.         
  19.         <tableRule name="groups" schema="mydb" defaultPools="master2" />
3、插入测试数据
  1. [root@10.10.10.39:mydb][07:59:03pm] MySQL-> insert into users values (1,1,'john','zhejiang','a@163.com');
  2. Query OK, 2 rows affected (0.05 sec)
  3. ullnull

  4. [root@10.10.10.39:mydb][07:59:30pm] MySQL-> select * from users;
  5. +---------+----------+------+----------+-----------+
  6. | user_id | group_id | name | address | email |
  7. +---------+----------+------+----------+-----------+
  8. | 1 | 1 | john | zhejiang | a@163.com |
  9. | 1 | 1 | john | zhejiang | a@163.com |
  10. +---------+----------+------+----------+-----------+
  11. 2 rows in set (0.01 sec)

  12. [root@10.10.10.39:mydb][08:01:27pm] MySQL-> truncate table users;
  13. Query OK, 0 rows affected (0.06 sec)
在amoeba中插入1条记录,却查到了2条一样的记录,在master1和master2上分别都插入记录,且记录相同
然后truncate这条记录,发现master1上的记录删除了,而master2的记录然后存在。
继续插入测试数据
  1. insert into users(user_id,group_id,name,address,email) values (1,1,'john','zhejiang','a@163.com');
  2. insert into users(user_id,group_id,name,address,email) values (2,1,'james','bejing','b@163.com');
  3. insert into users(user_id,group_id,name,address,email) values (3,2,'kitty','shanghai','c@163.com');
  4. insert into users(user_id,group_id,name,address,email) values (4,4,'dave','hubei','d@163.com');
  5. insert into users(user_id,group_id,name,address,email) values (5,4,'mica','jiangsu','e@163.com');
  6. insert into users(user_id,group_id,name,address,email) values (6,3,'chole','zhejiang','f@163.com');
  7. insert into users(user_id,group_id,name,address,email) values (7,4,'ice','shanghai','g@163.com')
查看master1和master2的数据分布情况
master1:
  1. [root@localhost:mydb][12:28:08pm] MySQL-> select * from users;
  2. +---------+----------+-------+----------+-----------+
  3. | user_id | group_id | name | address | email |
  4. +---------+----------+-------+----------+-----------+
  5. | 2 | 1 | james | bejing | b@163.com |
  6. | 4 | 4 | dave | hubei | d@163.com |
  7. | 6 | 3 | chole | zhejiang | f@163.com |
  8. +---------+----------+-------+----------+-----------+
  9. 3 rows in set (0.00 sec):
master2:
  1. [root@localhost:mydb][12:31:10pm] MySQL-> select * from users;
  2. +---------+----------+-------+----------+-----------+
  3. | user_id | group_id | name | address | email |
  4. +---------+----------+-------+----------+-----------+
  5. | 1 | 1 | john | zhejiang | a@163.com |
  6. | 3 | 2 | kitty | shanghai | c@163.com |
  7. | 5 | 4 | mica | jiangsu | e@163.com |
  8. | 7 | 4 | ice | shanghai | g@163.com |
  9. +---------+----------+-------+----------+-----------+
  10. 4 rows in set (0.00 sec)
4、测试
4.1 排序
  1. [root@10.10.10.39:mydb][08:14:19pm] MySQL-> select * from users order by user_id;
  2. +---------+----------+-------+----------+-----------+
  3. | user_id | group_id | name | address | email |
  4. +---------+----------+-------+----------+-----------+
  5. | 1 | 1 | john | zhejiang | a@163.com |
  6. | 3 | 2 | kitty | shanghai | c@163.com |
  7. | 5 | 4 | mica | jiangsu | e@163.com |
  8. | 7 | 4 | ice | shanghai | g@163.com |
  9. | 2 | 1 | james | bejing | b@163.com |
  10. | 4 | 4 | dave | hubei | d@163.com |
  11. | 6 | 3 | chole | zhejiang | f@163.com |
  12. +---------+----------+-------+----------+-----------+
  13. 7 rows in set (0.01 sec)
很乱哦,仔细查看,其实是先读取master2,然后读取master1的数据,而且是分别排序的
4.2 分页
  1. [root@10.10.10.39:mydb][08:17:32pm] MySQL-> select * from users limit 0,3;
  2. +---------+----------+-------+----------+-----------+
  3. | user_id | group_id | name | address | email |
  4. +---------+----------+-------+----------+-----------+
  5. | 1 | 1 | john | zhejiang | a@163.com |
  6. | 3 | 2 | kitty | shanghai | c@163.com |
  7. | 5 | 4 | mica | jiangsu | e@163.com |
  8. | 2 | 1 | james | bejing | b@163.com |
  9. | 4 | 4 | dave | hubei | d@163.com |
  10. | 6 | 3 | chole | zhejiang | f@163.com |
  11. +---------+----------+-------+----------+-----------+
  12. 6 rows in set (0.01 sec)
分页与排序的情况差不多,但是不同的是分页需要在2个分库中同时读取相同的分页数
4.3 join
  1. [root@10.10.10.39:mydb][08:20:10pm] MySQL-> select user_id,a.group_id,name,address,email,group_name,privilege_id
  2.     -> from mydb.users a,mydb.groups b
  3.     -> where a.group_id=b.group_id;
  4. ERROR 1146 (42S02): Table 'mydb.groups' doesn
当表groups在master2上的时候,报错表不存在。
在master1上创建groups表,并插入与master1一样的数据
  1. [root@localhost:mydb][12:32:42pm] MySQL-> CREATE TABLE `groups` (
  2.     -> `group_id` int(11) NOT NULL,
  3.     -> `group_name` varchar(20) DEFAULT NULL,
  4.     -> `privilege_id` int(11) NOT NULL,
  5.     -> PRIMARY KEY (`group_id`)
  6.     -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7. Query OK, 0 rows affected (0.04 sec)

  8. [root@localhost:mydb][12:43:52pm] MySQL-> insert into groups values (1,'admin',1);
  9. Query OK, 1 row affected (0.01 sec)

  10. [root@localhost:mydb][12:44:08pm] MySQL-> insert into groups values (2,'leder',2);
  11. Query OK, 1 row affected (0.01 sec)

  12. [root@localhost:mydb][12:44:08pm] MySQL-> insert into groups values (3,'engineer',4);
  13. Query OK, 1 row affected (0.00 sec)

  14. [root@localhost:mydb][12:44:08pm] MySQL-> insert into groups values (4,'sale',3)
  15.     ->
  16.     -> ;
  17. Query OK, 1 row affected (0.02 sec)
删除master2上的groups表,在次进行join查询
  1. [root@10.10.10.39:mydb][08:27:37pm] MySQL-> select user_id,a.group_id,name,address,email,group_name,privilege_id
  2.     -> from mydb.users a,mydb.groups b
  3.     -> where a.group_id=b.group_id;
  4. ERROR 1146 (42S02): Table 'mydb.groups' doesn
仍然报错表不存在,最后在master1和master2上同时创建groups表,并数据相同
  1. [root@10.10.10.39:mydb][08:21:36pm] MySQL-> select user_id,a.group_id,name,address,email,group_name,privilege_id
  2.     -> from mydb.users a,mydb.groups b
  3.     -> where a.group_id=b.group_id;
  4. +---------+----------+-------+----------+-----------+------------+--------------+
  5. | user_id | group_id | name | address | email | group_name | privilege_id |
  6. +---------+----------+-------+----------+-----------+------------+--------------+
  7. | 1 | 1 | john | zhejiang | a@163.com | admin | 1 |
  8. | 3 | 2 | kitty | shanghai | c@163.com | leder | 2 |
  9. | 5 | 4 | mica | jiangsu | e@163.com | sale | 3 |
  10. | 7 | 4 | ice | shanghai | g@163.com | sale | 3 |
  11. | 2 | 1 | james | bejing | b@163.com | admin | 1 |
  12. | 6 | 3 | chole | zhejiang | f@163.com | engineer | 4 |
  13. | 4 | 4 | dave | hubei | d@163.com | sale | 3 |
  14. +---------+----------+-------+----------+-----------+------------+--------------+
  15. 7 rows in set (0.01 sec)

也就是说没有分片的join表,必须在分片表的每个分库中都存在,也就是说amoeba不支持分库的join查询。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12219480/viewspace-1788852/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12219480/viewspace-1788852/

weixin028基于微信小程序小说阅读器设计+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值