跳到主要内容

02、MyCat 实战 - MyCat 中的概念

1.切分

逻辑上的切分. 在物理层面,是使用多库[database],多表[table]实现的切分

1.1 纵向切分/垂直切分

就是把原本存储于一个库的数据存储到多个库上。

由于对数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入的问题。

例如,我们会建立定义数据库 workDB、商品数据库 payDB、用户数据库 userDB、日志数据库 logDB 等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。

优点

1)减少增量数据写入时的锁对查询的影响。
2)由于单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需的检索行数变少,减少了磁盘 IO,时延变短。

缺点:

无法解决单表数据量太大的问题。

1.2 横向切分/水平切分

  • 把原本存储于一个表的数据分块存储到多个表上。当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,进行划分,然后存储到多个结构相同的表,和不同的库上。
  • 例如,我们 userDB 中的 userTable 中数据量很大,那么可以把 userDB 切分为结构相同的多个 userDB:part0DB、part1DB 等,再将 userDB 上的 userTable,切分为很多 userTable: userTable0、userTable1 等,然后将这些表按照一定的规则存储到多个 userDB 上。
  • 优点:
    1)单表的并发能力提高了,磁盘 I/O 性能也提高了。
    2)如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面。
  • 缺点:无法实现表连接查询。

2.逻辑库-Schema

  • Mycat 中定义的 database.是逻辑上存在的.但是物理上是不存在的
  • 主要是针对纵向切分提供的概念.

3.逻辑表-table

  • Mycat 中定义的 table.是逻辑上存在,物理上是不存在的.
  • 主要是针对横向切分提供的概念

4.默认端口

  • MySQL 默认端口是 3306
  • Mycat 默认端口是 8066
  • tomcat 默认端口是 8080
  • Oracle 默认端口是 1521
  • nginx 默认端口是 80
  • http 协议默认端口 80
  • redis 默认端口 6379

5.数据主机 - dataHost

  • 物理 MySQL 存放的主机地址.可以使用主机名,IP,域名定义

6.数据节点 - dataNode

  • 配置物理的 database. 数据保存的物理节点.就是 database

7.分片规则

  • 当控制数据的时候,如何访问物理 database 和 table.
  • 就是访问 dataHost 和 dataNode 的算法.
  • 在 Mycat 处理具体的数据 CRUD 的时候,如何访问 dataHost 和 dataNode 的算法.如:哈希算法,crc32 算法等.