Mycat分片规则是怎么样的

背景介绍

在大型分布式系统中,一台服务器可能无法满足所有客户端的请求,此时,需要分散压力,将数据分散储存在多台服务器上。如何建立高效可靠的分布式系统,是当前分布式系统研究的热点之一。

Mycat分片规则

Mycat是一款面向MySQL的高可用、高并发、分布式的数据库中间件。它采用的分片规则为按照字段范围划分,可以分为水平分片和垂直分片。

水平分片

水平分片是指将一个表按照某个字段的取值范围,分成多个子表,每个子表存储相应区间的数据。一般情况下,采用数字类型的主键可以保证查询效率。Mycat支持两种水平分片方式,一种是静态分片,另一种是动态分片。

  1. 静态分片
  2. 静态分片是最基本的分片方式,将数据事先固定地分配到各个节点上。

    distribution:
      type: STRONG
      rule: "mod-long:${user_id%3}"
      

    这里使用了mod-long的方式,将user_id%3作为分片依据,分成三个分片。STRONG表示分片节点数与分片值一一对应。

  3. 动态分片
  4. 动态分片是根据数据特性,动态调整数据在分片节点上的存储位置,可以根据业务量、数据特征等对数据进行自动分片。

    distribution:
      type: AUTO_INCREMENT
      fields: task_id
      

    这里使用了自增字段task_id进行分片,Mycat会自动将相邻的task_id范围内的数据放到相邻的节点上。

垂直分片

垂直分片是指将某个表按照字段进行拆分,将不同的字段储存在不同的表中,每个表存储相应的字段。

  1. 纵向拆分
  2. 纵向拆分是指将一个表按照字段分类,将一张表中的字段按照功能划分成不同的表,每个表存储相应的字段。这样做可以减少每个表中存储的字段数、提高查询效率,适用于字段冗余严重的场景。

  3. 横向拆分
  4. 横向拆分是指将一个表中的行按照某种方式分散到多个表中,每个表都包含相同的字段。这样做可以减少一个表中数据的行数、提高查询效率和数据维护效率,适用于表中数据行数过多的场景。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享