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) |