【Mycat1.6中间件之表分类】

 

 

1、逻辑表

既然有逻辑库,那么就会有逻辑表,分布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表,可

以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。

2、分片表

分片表,是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所

有分片构成了完整的数据。例如在 mycat 配置中的 t_node 就属于分片表,数据按照规则被分到 dn1,dn2 两个分片节点(dataNode)上。

<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1,dn2" rule="rule1" />

3、非分片表

一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是那

些不需要进行数据切分的表。如下配置中 t_node,只存在于分片节点(dataNode)dn1 上。

<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1" />

4、ER 表

关系型数据库是基于实体关系模型(Entity-Relationship Model)之上,通过其描述了真实世界中事物与关

系,Mycat 中的 ER 表即是来源于此。一个真实的业务系统中,往往存在大量的类似字典表的表格,它们与业务表之间可能有关系,这种关系,可以理解为“标签”,而不应理解为通常的“主从关系”,这些表基本上很少变动,可以根据主键 ID 进行缓存根据这一思路,提出了基于 E-R 关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据 Join 不会跨库操作。MyCAT 借鉴了 NewSQL 领域的新秀 Foundation DB 的设计思路,Foundation DB 创新性的提出了 Table Group 的概念,其将子表的存储位置依赖于主表,并且物理上紧邻存放,因此彻底解决了 JION 的效率和性能问题,根据这一思路,提出了基于 E-R 关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。

<table name="customer" dataNode="dn1,dn2" rule="sharding-by-intfile">

<childTable name="orders" joinKey="customer_id" parentKey="id"/>

</table>

表分组(Table Group)是解决跨分片数据 join 的一种很好的思路,也是数据切分规划的重要一条规则。

5、全局表

一个真实业务系统中,往往存在大量的类似字典表的表,这些表基本上很少变动,字典表有以下几个特性:

• 变动不频繁

• 数据量总体变化不大

• 数据规模不大,很少有超过数十万条记录。

对于这类的表,在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关

联,就成了比较棘手的问题,所以 Mycat 中通过数据冗余来解决这类表的 join,即所有的分片都有一份数据的拷贝,所有将字典表或者符合字典表特性的一些表定义为全局表。

数据冗余是解决跨分片数据 join 的一种很好的思路,也是数据切分规划的另外一条重要规则。

字典表具有以下几个特性:

• 变动不频繁

• 数据量总体变化不大

• 数据规模不大,很少有超过数十万条记录。

鉴于此,MyCAT 定义了一种特殊的表,称之为“全局表”,全局表具有以下特性:

• 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性

• 全局表的查询操作,只从一个节点获取

• 全局表可以跟任何一个表进行 JOIN 操作

猜你喜欢

转载自gaojingsong.iteye.com/blog/2338712
今日推荐