这一节从理论和实践的角度来谈谈mycat如何实现数据库和表的分离。

MyCAT中的表格分类
1.碎片表
切片表是指那些数据量大,需要切片到多个数据库中的表,这样每个切片都有一部分数据,所有切片构成成品数据。有几个dataNode,并且定义了一个规则来指定相应的规则。
2.非碎片表
并非数据库中的所有表都很大,有些表可以拆分。非拆分是相对于拆分表而言的,即那些不需要数据拆分的表。它可以直接存在于某个数据节点上,可以理解为一个片段,
3.ER表
MyCat中的ER表是一种基于E-R关系的数据切片策略。子表的记录存储在与关联的父表记录相同的数据切片中,这确保了数据连接不会跨数据库操作。ER分片是解决跨分片数据连接的好方法,也是数据分片规划的重要规则。对于客户表,客户将购买商品并下订单。这两张表之间有明显的相关性。一定有人下了订单。那位顾客下了订单。客户表有大量数据,订单表也是如此。如果客户A的数据不能放在同一个数据库中,如果我想查询用户A下的订单,就会出现跨数据库join,这是必须避免的。在子数据库和子表中,一定要尽量避免这样会影响性能。利用E-R关系,我们可以把它们的相关数据放在同一个数据库中,用户A的数据和用户A的订单都放在同一个数据库中,这样就不需要跨数据库加入,只需要合并同一个数据库中的用户数据和订单数据即可。可以在其中指明下两个表的关系列。
4.全局表在真实的业务系统中,往往会有大量类似字典表的表,而这些表很少发生变化。
问题:业务表经常需要与字典表连接。当业务表由于其大小而被分割时,业务表和字典表之间的关联跨越数据库。解决方案:在MyCat中,这种表的连接是通过表冗余来解决的,即在其定义中指定的所有dataNode都有一个表的副本。只要是碎片化的,就要放到全局表中,要加一个适合几万条数据的type = "global "类型。一般字典表之类的数据不会超过10万。100,000以下的字典表需要经常与其他片段连接。请制作一个全局表。②碎片化规则。
在conf/rule.xml中定义碎片规则,每个碎片规则都有一个name = "rule1 ",在rule中指定碎片规则,碎片中有一个碎片列id。虽然这里列中有s,但是指定一个,指定算法func1,具体算法在function中。您需要知道如何在rule.xml中配置碎片规则
< XML version = " 1.0 " encoding = " UTF-8 " > id func 1 8 128
实用分段表
光说理论,没有实际练习是学不好的。通过实际练习,你可以通过详细的截图来更好的理解碎片表。分区表不同于以前的读写分离。读写分离是基于mysql的读写分离。所有数据都是一致的,这样更稳定。但是,分区表不同。这些数据都是独立的,不需要设计读写关联的主从。
①三台虚拟机

Mysql数据库安装完毕【参考上一节题目对mycat的介绍】。为了方便修改演示,mycat直接在本地windows上启动mycat来调用虚拟机。
②准备工作
准备数据库服务。
dhhost1: 192.168.3.101
主机2: 192.168.3.102
主机3: 192.168.3.103
创建三个数据库
#在dhhost1上创建数据库db1字符集“utf8 ”;#在dhhost2上创建数据库DB2字符集“utf8 ”;#在dhhost3上创建数据库db3字符集“utf8 ”;
配置server.xml和schema.xml
③非切片法
修改schema.xml以添加语句
创建表t _ shops不为空
);
插入到t _ shops值中;
启动windows的mycat,使用较低版本的navicat,连接mycat,执行sql语句,添加insert,然后查看其他数据库,看表t _ shops是否存在。
因为是非分区表,所以规定db1中只有192.168.3.101有这个表。
④全局表
创建字典表,并将字典表或符合字典表特征的表定义为全局表。Sql语句
创建表t_province不为空

);
修改schema.xml对应的配置,add table添加t_province表信息
这里有一个比较点。配置的primaryKey主键中的事例id必须与sql语句中的一致。
看看是不是每个表都有这个t_province。
PS:这次从实践出发,简单让大家了解一下mycat的表分类以及如何配置,并演示一下对应表分类的应用。


