开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 分片 - 水平拆分 - 概述及案例场景】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/756/detail/13262
MyCat - 分片 - 水平拆分 - 概述及案例场景
内容介绍:
一、概述
二、案例场景
三、准备工作
一、概述
什么是水平拆分以及水平拆分和垂直拆分之间的区别。
水平拆分指的是根据表中数据的逻辑关系,将同一张表中的数据按照某种条件拆分到多台数据库(主机)上。
注意是同一张表中的数据拆分到多台数据库上面,也就意味着多台数据库当中存储的表结构一样,但是表结构当中存储的数据是不一样的。这一块和垂直拆分是有区别的。
垂直拆分指的是各个数据库当中,存储的表结构是不一样的。但是水平拆分各个数据库当中存储的表结构一样,但是里面存储的数据不一样。
下面示意图展示的是在垂直拆分示意图基础上进行了水平拆分。
用户系统、订单系统、支付系统,这三个系统都有单独的数据库,属于垂直拆分。纵向来看订单表,如果这个表的数据量比较大,可以考虑使用水平拆分,将这一张表当中的数据分散存储到多台数据库上。
纵向的订单系统的数据库、订单表,分割到三个数据库上面,三个数据库上都会有这张订单表。但是三台数据库的订单表当中,存储的数据是不一样的,从而就可以来完成可数据库的扩容。
二、案例场景
1、案例一
如上图所示:左侧应用程序直接去访问 MySQL 。
在应用程序当中,通常会去记录当前系统中的一些日志信息。而对于日志,每一天系统都会产生大量的日志。长年累月日志表里边的数据量会变得非常巨大,大到三台服务器已经存储不下这一张表的数据了。那么就需要考虑对这一块的数据库进行分片处理。此时垂直拆分已经不能满足需求,要使用水平拆分。
右侧是应用程序。水平拆分使用 MyCat 进行水平拆分。原来应用程序直接访问MySQL,而这一块应用程序是访问的是 MyCat 。最上面的这个是 MyCat 当中的逻辑库,在逻辑库中有一张逻辑表,这张逻辑表的数据将会分散存储在三个节点,分别是 dateNote1、dateNote2、dateNote3 。这三个数据节点对应的就是三个数据库服务。即原来在一张表当中存储的数据,现在仍然在一张表存储,但是它拆分到三个数据库当中来进行存储的,起到一个横向扩容的作用,并且它可以充分的利用这三台数据库服务器的 cto 以及磁盘等相关资源。
通过水平拆分之后,在这三台服务器上都会有张日志表,但是它们存储的数据是不一样的。对于应用程序而言,不用关心哪一块的日志存储到哪个数据库了,只需要关心在这一块儿要去操作的是 MyCat ,而操作 MyCat 与操作 MySQL 一样。所以对于应用程序来说,基本不需要任何修改。
2、案例二
tb_log 这张表当中的数据量很大,所以会把这张表进行水平拆分,拆分到三个数据库当中,意味着三个数据库当中都会有 tb_log 这张表,而每一个节点当中存储的数据是不一样的。
三、准备工作
1、准备三台数据库实例
192.168.192.157
192.168.192.158
192.168.192.159
157、158、159 三台数据库服务器已经准备好,需要在三排的数据库实例上去创建一个 log_db 数据库。
2、在三台数据库实例中创建数据库
执行建库语句creat database log_db DEFAULT CHARACTER SET utf8mb4;
creat database log_db
设置默认字符集为 utf8mb4,如下图已创建好 log_db (157)数据库。
输入creat database log_db DEFAULT CHARACTER SET utf8mb4
语句,执行完毕后,log_db (158)数据库创建成功。
同理创建 log_db (159)数据库。
分别在 157、158、159 三排数据库实例上创建了一个数据库 log_db。案例的环境准备好后,接下来要完成数据库表水平拆分的配置。