Mycat从入门到放弃

Mycat功能边界及使用注意事项

1. { Topic: “Mycat 从入门到放弃” , Author: ” 宋达彬” , Deptartment: E-mail: Skill: ” 互联网业务研发中心 - 平台架构部” , ”[email protected]”, [ ”MySQL”, ”Mycat” ] }
2. { Name: “ 目录” , Content: [ ] } Chapter1: ” 分布式数据库概述” , Chapter2: ”Mycat 原理介绍及分析” ,
3. { Chapter1: ” 分布式数据库概述” , 2000w row Tip: “MySQL” MySQL } 2000 TPS
4. { Chapter1: ” 分布式数据库概述” , Tip: “ 分表 VS 分库” 分表 } 分库 分布 据 数 式 DataBase1 DataBase Table Table_1 DataBase2 Table Table_2 Table_3 Table Table DataBase3 Table 库
5. { Chapter1: ” 分布式数据库概述” , } 垂直分布 水平分布 DataBase DataBase Table1 DataBase1 Table1 Tip: “ 垂直分布 VS 水平分布” Table2 DataBase2 Table2 Table1 Table2 (2000W) (2000W) DataBase1 DataBase2 Table1 Table2 Table1 Table2 (1000W) (1000W) (1000W) (1000W)
6. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ 由来” } DB1 Application DB2 DB1 Application MySQL Protocol Mycat DB2 ! 研发发发发 度增加、不易 发 发 发 发 发 发发 DB2 DB2 ✔ 应用无感知、研发方便
7. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ 单节点操作” } tt_waybill 表 1233 88663 1 waybill_no 12330 88661 12333 88662 DB1 Mycat select * from tt_waybill where id = 12331 Application id id (分片字段) id%3==0 id%3==1 id%3==2 发 发 发 DB1 DB2 DB3 tt_waybill 表 id waybill_no 12331 88663 12334 88664 DB2 (分片方法) tt_waybill 表 id waybill_no 12332 88665 12335 88666 DB3
8. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ 多节点操作” } tt_waybill 表 1233 88661 0 1233 88661 0 id id%3==0 id%3==1 id%3==2 (分片字段) 发 发 发 DB1 DB2 DB3 12330 88661 12333 88662 DB1 tt_waybill 表 0 ROW 非分片字段发 发 浪 发 发发 发 源! 发 id waybill_no 12331 88663 12334 88664 DB2 (分片方法) 0 ROW ! waybill_no Mycat select * from tt_waybill where waybill_no=88661 Application id tt_waybill 表 id waybill_no 12332 88665 12335 88666 DB3
9. 根据 分 片 字 段发行数据操作 !
10. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ 分页操作” Mycat SQL: select * from table limit 2; Application [0,1] 或 [5,6] 或 [20,21] ! 不合逻辑! } DB1 [0,1,2,3,4,10, 11,12,13,14] DB2 [5,6,7,8,9, 16,17,18,19] DB3 [20,21,22,23,24,25, 26,27,28,29] [0,1] 随机 返回 [5,6] [20,21]
11. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ORDER BY 分页操作” Mycat SQL: select * from table order by id limit 2; DB1 [0,1,2,3,4,10, 11,12,13,14] DB2 [5,6,7,8,9, 16,17,18,19] DB3 [20,21,22,23,24,25, 26,27,28,29] [0,1] 最小堆 Application } [5,6] [0,1] [20,21]
12. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ORDER BY 分页操作” Mycat SQL: select * from table order by id limit 5,2; DB1 [0,1,2,3,4,10, 11,12,13,14] DB2 [5,6,7,8,9,15, 16,17,18,19] DB3 [20,21,22,23,24, 25,26,27,28,29] [10,11] 最小堆 Application } [16,17] [10,11] [25,26] ! [10,11] 还是 [5,6] ???
13. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ORDER BY 分页操作” } SQL 改写 limit 0,7 Mycat SQL: select * from table order by id limit 5,2; [0,1,2,3,4,10, 11,12,13,14] DB2 [5,6,7,8,9, 16,17,18,19] DB3 [20,21,22,23,24, 25,26,27,28,29] 0,1,2,3,4, 10,11 0,1,2,3, 4,5,6 Application DB1 5,6,7,8,9, 16,17 最小堆 [5,6] 20,21,22,23 ,24,25,26 ✔ 正确姿发 !!! 发 发发
14. 避免 排序分发 操作 !
15. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ 表关联操作” SQL: select p_name,t_name from player p, team t where p.no = 3 and p.team_id = t.id; DB Application p_name t_name Wade } Heat player 表 team 表 no p_name team_id id t_name 3 Wade 1 2 Cavalier 23 James 2 1 Heat
16. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ 表关联操作” } DB1 SQL: select p_name,t_name from player p, team t where p.no = 3 and p.team_id = t.id; player 表 0 ROW team 表 no p_name team_id id 3 Wade 1 x2 t_name Cavalier Mycat Application 0 ROW DB2 0 ROW ! 逻辑错误!不支持任意表关联! player 表 team 表 no p_name team_id id name 23 James Heat 2 1
17. 不进行 表关联 操作 !
18. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ 分布式事务” } ① begin; ② update tt_table set status = 1; Mycat DB1 COMMIT; ③ commit; Prepare Ready Prepare Application DB2 Rollback ERROR ROLLBACK; ! COMMIT 阶段无法保证一致性! DB3
19. 事发内所有操作在 同一数据库 上 !
20. { Chapter2: ”Mycat 原理介绍及分析” , 根据 Tip: “ 多维度查询” 分 片 字 段发 } 行数据操作 ! ??? 多维度查询
21. { Chapter2: ”Mycat 原理介绍及分析” , Tip: “ 多维度查询” } tt_table query 1 waybill_no NoSQL(Redis) query 2 (分片字段) query 2 task_id waybill_no task_id col1 map_table query 2 col2 ... waybill_no task_id ( 分片字 段)
22. Q&A Thanks!