赞
踩
逻辑库
对数据进行分片处理后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库群构成了整个完整的数据库存储。MyCat在操作时,使用逻辑库来代表这个完整的数据库集群,便于对整个集群操作。
逻辑表
逻辑表在分布式数据库中,对应用来说,读写数据的表就是逻辑表。
分片表
是指哪些原有的很大数据的表,需要切分到多个数据库的表,每个分片都拥有一部分数据,所有分片构成完整的数据。例如在MyCat配置中的t_node就属于分片表,数据按照规则被分到dn1、dn2两个分片节点上。
<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1,dn2" rule="rule1"/>
非分片表
一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片来说的,就是那些不需要进行数据切分的表。如下配置中t_node,只存在于分片节点dn1上。
<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1"/>
ER表
MyCat提出了基于E-R关系的数据分片策略,子表的数据与所关联的父表数据存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据join不会跨库操作。表分组(Table Group)是解决分片数据join的一种很好思路,也是数据切分规划的一条重要规则。
全局表(字典表)
在业务系统中,往往存在大量的字典表,这些表基本不会动,字典表具有一下特征:
分片节点
也就是将一个大表切分到多个数据库上,这个库就被称为分片节点->dataNode。
节点主机
同一台机器上可以有多个分片数据库,这样一个或多个分片节点所在的机器就是节点主机,为了避免单节点主机并发数限制,尽量将读写压力高的节点均衡的放在不同的节点主机上->dotaHost。
分片规则
一个大表被拆分成多个分片表,就需要有一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,能极大的避免后续数据处理的难度。
<user name="user"> <!--用户名-->
<property name="password">user</property> <!-- 密码-->
<property name="schemas">edu_order</property> <!--可以访问的库名-->
<property name="readOnly">true</property> <!--是否只读-->
<property name="defaultSchema">edu_order</property> <!--默认访问的库名,逻辑苦命-->
</user>
<firewall>
<!--ip白名单,支持通配符-->
<whitehost>
<host host="127.0.0.*" user="root"/>
<host host="127.0.*" user="root"/>
<host host="127.*" user="root"/>
<host host="1*7.*" user="root"/>
</whitehost>
<!--白名单以外的,针对黑名单更低的颗粒度-->
<blacklist check="true">
<property name="selectAllow">false</property>
<property name="selectIntoAllow">false</property>
<property name="updateAllow">false</property>
<property name="insertAllow">false</property>
......
</blacklist>
全局序列号
分库分表后数据库的自增id无法保证全局唯一。MyCat提供了全局sequence。
<system>
<property name="sequnceHandlerType">0</property>
</system>
0:表示使用本地文件方式生成;
1:表示使用数据库方式生成;
2:表示使用本地时间戳方式生成;
3:表示基于zookeeper与本地配置的分布式ID生成器方式生成;
4:表示使用zookeeper递增方式生成;
#default global sequence 全局
GLOBAL.HISIDS= #历史使用的自增id,一般不配置
GLOBAL.MINID=10001 #最小id值
GLOBAL.MAXID=20000 #最大id值
GLOBAL.CURID=15000 #当前id值
#针对某一个表
COMPANY.HISIDS= #历史使用的自增id,一般不配置
COMPANY.MINID=1001 #最小id值
COMPANY.MAXID=2000 #最大id值
COMPANY.CURID=1500 #当前id值
#针对某一个表
ORDER.HISIDS= #历史使用的自增id,一般不配置
ORDER.MINID=1001 #最小id值
ORDER.MAXID=2000 #最大id值
ORDER.CURID=1500 #当前id值
create table mycat_sequence
(
name varchar(64) not null,
current_value bigint(20) not null,
increment int not null default 1,
primary key (name)
) engine=InnoDB;
WORKID=1 #0~31 范围内任意数字
DATAACENTERID=5 #0~31范围内任意数字
schema标签
schema标签用于定义MyCat实例中的逻辑库,MyCat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库。
<!--逻辑库-->
<schema name="edu_order" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema>
<table name="b_order" dataNode="dn1,dn2" rule="b_order_rule" primaryKey="id" autoIncrement="true"/>
<!--数据节点-->
<dataNode name="dn1" dataHost="edu_order_1" database="edu_order_1"/>
<dataHost name="edu_order_1" maxCon="100" mixCon="10" balance="0" writeType="0" dbType="mysql"
dbDriver="native" switchType="1" slaveThreshold="100">
</dataHost>
<dataHost>
<heartbeat>select user()</heartbeat>
</dataHost>
<dataHost name="edu_order_1" maxCon="100" mixCon="10" balance="0" writeType="0" dbType="mysql"
dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="M1" url="192.168.23.155:3306" user="root" password="ziye123">
</writeHost>
</dataHost>
<tableRule name="c_order_rule">
<rule>
<columns>user_id</columns>
<algorithm>partitionByOrderFunc</algorithm>
</rule>
</tableRule>
<function name="partitonByOrderFunc" class="io.mycat.route.function.PartitionByMod">
<property name="count">2</property>
</function>
end...
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。