实践Mycat

Mycat是一个数据库中间件,处于应用和后端数据库之间,提供负载均衡、高可用、分库分表和聚合等功能。

核心概念

逻辑库

一个抽象出来的数据库,由后端多个数据库(分片节点)组合来提供服务,对于应用而言是透明的,后端的数据库架构被Mycat屏蔽了。分库体现在这里,应用需要的表不完全在一个数据库里面,而是分散在不同的数据库里面,共同为应用提供服务。通过<schema/>定义,dataNode属性指定分片节点。

1
<schema name="TESTDB" dataNode="dn1,dn2,dn3,dn4" checkSQLschema="false" sqlMaxLimit="100">

逻辑表

一张被抽象的表,由后端多张表(数据结构相同,分片节点)组合来提供服务,对应用而言是透明的,分表体现在这里,一张表所有的行不完全在一张表里面,而是分散在多张表里面,通过<table/>定义,dataNode属性指定分片节点,rule属性定义分表的规则(通过<tableRule><function/>),subTables属性定义分表名(好像目前仅支持一个dataNode,不支持多个dataNode)。也成为分片表,区别于传统的不需要分表的表。

逻辑表和逻辑库的分片节点没有绝对的关联,非分片表使用逻辑库指定的默认分片节点,逻辑表也可以自行指定分片节点。

分片节点

真实的数据库,通过<dataNode/>定义。

节点主机

真实的数据库主机或实例,一个节点主机可以包括多个分片节点,通过<dataHost/>定义。

<childTable/>

属性名 类型 数量限制 备注
name String (1)  
joinKey String (1) 子表外键字段
parentKey String (1) 父表被关联字段
primaryKey String (0..1)  
needAddLimit boolean (0..1)