开发者学堂课程【全面讲解开源数据库中间件 MyCat 使用及原理(四):MyCat - 分片 - 数据库分片配置】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/758/detail/13329
MyCat - 分片 - 数据库分片配置
内容介绍:
一、分析配置文件的定义
二、逻辑表分析
一、分析配置文件的定义
1.分析:
<schemaname="V_SHOP"checkSQLschema="false" sqlMaxLimit="100">
在 MyCat 中,配置了一个逻辑库,名为 V_SHOP 。
sqlMaxLimit="100" 限制分页为 100 条,
checkSQLschema="false"
与数据库名的校验问题有关。
二、逻辑表分析
在逻辑库下声明了很多逻辑表:
1.关于基础信息的全局表:
//区域表
<table name="tb_areas" dataNode="dn1, dn2, dn3, dn4" primaryKey="areaid" type="globa1"/>
//省份表
<table name="tb_provinces" dataNode="dn1 , dn2 , dn 3 , dn4" primaryKey="provinceid"type="globa1"/>
//市
<table name="tb_cities" dataNode="dn1 , dn2 ,dn3 , dn4" primar yKey="cityid" type="globa1"/>
//数据字典表,存储的是系统中的基本信息
<table name="tb_dictionary" dataNode="dn1, dn2 , dn3 , dn4" primaryKey="id" type="globa1"/>
type="globa1"/ 表示为全局表
基础信息表要声明为全局表,全局表意味着四个表结构在四个节点中
都存在:
上面的 dn1 , dn2 , dn 3 , dn4 对应数据节点:
<dataNodename="dn1"dataHost="host1" database="v_goods"/>
<dataNodename="dn2"dataHost="host2"dat abase="v_order"/>
<dataNode name="dn3" dataHost="host3" dat abase="v_log”/>
<dataNode name="dn4" dataHost="host4" database="v_log”/>
也就是上面的四张表在该四个节点中都会存在。
2.关于商品模块涉及的表结构:
<tablename="tb_brand" dataNode="dn1" primaryKey="id"/>
<tablename="tb_category"dataNode="dn1" primaryKey="id"/>
<table name="tb_sku" dataNode="dn1" primaryKey="id"/>
<table name="tb_spu" dataNode="dn1" primaryKey="id”/|I
商品模块涉及的表结构会存储在第一个节点,所以配置的 dataNode 为 dn1
3.与订单相关的表结构:
<table name="tb_order" dataNode="dn2" primaryKey="id"/>
<tablename="tb_order_item"dataNode="dn2" primaryKey="id"/>
<tablename="tb_order_log"dataNode="dn2" primaryKey="id"/>
存在第二个节点
4.第三个节点和第四个节点中都是存储的 tb_operatelog
下面的逻辑表会分散存储在 dn3 和 dn4 两个节点
<table name="tb_operatelog"dataNode="dn3,dn4" primar yKey="id" rule="log-sharding-by-murmur" />
</schema>
如果插入一条数据,要存储到 dn3 还是 dn4 需要配置对应的分片规则。
5.思考用什么分片规则
打开 operatelog 表:
该 id 是采用了一个分布式 id 生成器,并且是 long 类型的数据。
取模分片可用,得到当前的 id 值,然后模于当前的数量。
范围分片,范围分片指的是 0-500 条记录向第一个界面中传,这里不适合,因为该 id 并不是组件自增的。
枚举分片也不适合,枚举分片主要适用于年龄、状态(如果状态为 1,存储第一个节点,如果状态为 2,存储到第二个节点)
范围求模分片,因为其涉及到范围,所以不适合。
我们要通过分析,找到适合的分片规则。
对当前的案例,可以采用一致性 hash 分片,意味其会根据 hash 算法来决定当前的 id 被分到哪个节点。
6.节点主机中的配置:
部分代码:
//最大连接数、最小连接数、负载均衡策略
<dataHost name="host1" maxCon="100o" minCon="10" balance="o"
writeType="o"dbType="mysq1"dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHosthost="hostM1" ur1="192.168.192.158:3306"user="root" password="itcast"> </writeHost>
</ dataHost>
当前第一个节点对应的是 158:3306
第二个节点对应 159:3306
第三个节点对应 160:3306
第四个节点对应 161:3306
这就是当前对核心的配置文件的分析,这份配置文件中的逻辑库、逻辑表这一部分的配置完全根据我们之前分析的架构图。