Mycat是一个数据库中间件,处于应用和后端数据库之间,提供负载均衡、高可用、分库分表和聚合等功能。
核心概念
逻辑库
一个抽象出来的数据库,由后端多个数据库(分片节点)组合来提供服务,对于应用而言是透明的,后端的数据库架构被Mycat屏蔽了。分库体现在这里,应用需要的表不完全在一个数据库里面,而是分散在不同的数据库里面,共同为应用提供服务。通过<schema/>定义,dataNode属性指定分片节点。
1 | |
逻辑表
一张被抽象的表,由后端多张表(数据结构相同,分片节点)组合来提供服务,对应用而言是透明的,分表体现在这里,一张表所有的行不完全在一张表里面,而是分散在多张表里面,通过<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) |