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 算法等.