MyCat分表分库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_27933301/article/details/81292613

这里写图片描述
一、分片

     垂直分片:将不同的表切分到不同的数据库中
     水平切片:将同一种表按照某种条件切分到不同的数据库中。

     MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法
  1、Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。
  2、Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。
  3、DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上。
  4、DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上。

二、拆分原则

1、能不拆分尽量不拆分,如果要拆分一定选择合适的拆分规则。
2、数据拆分尽量通过数据冗余或表分组来降低跨库join的可能。
3、跨库join是共同难题,所以业务读取尽量少使用多表join。

三、分库分表问题

1、垂直拆分带来的问题

  • 部分业务表无法join,只能通过接口方式,提高了系统的复杂度
  • 存在单表性能瓶颈,不易扩展。
  • 事务处理复杂

2、水平拆分带来的问题

  • 拆分规则难以抽象
  • 分片事务一致性难以解决
  • 维护难度极大
  • 跨库join性能差

3、共同问题

  • 分片规则和策略
  • 分布式全局唯一ID
  • 多数据源管理问题
  • 跨库跨表join问题
  • 跨节点合并排序分页问题
  • 事务复杂
  • 数据管理难度加大

猜你喜欢

转载自blog.csdn.net/sinat_27933301/article/details/81292613