分库分表中间件-Mycat

一、分库分表概念

1.为什么要使用分库分表?

移动互联网时代,海量的用户每天产生海量的数量,比如:用户表、订单表、交易流水表。

  • 以支付宝用户为例,8亿;微信用户更是10亿。
  • 订单表更夸张,比如美团外卖,每天都是几千万的订单。
  • 淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。
  • 事实上MySQL单表可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。

正因为有了上述的一些问题,所以要解决单张表数据量过大的问题,于是就产生的分表,将一张表的数据,分散到多张表上,达到减少一张的数据量。

上述显现还存在一个服务器压力问题,比如双11,大量的用户在查询,下单等,此时一个数据库服务承受不了如此大的压力,可能导致宕机,最终导致服务不可用。此时为了解决数据库服务的压力问题,就产生了分库的思路,来减轻单个数据库服务器的压力。

2.分库分表具体操作

2.1 分库

分库的思路就是通过部署安装多个数据库服务,比如我本次在vm里创建了3台服务器,每台服务器分别安装了Mysql服务,然后分别创建一个DB,DB里面需要分库的表结构必须一致。比如:item表

2.2 分表

分表的思路是在同一个数据库里面将一张表分成多张表。比如:customer_order表,分成customer_order1,customer_order2,customer_order3

二、Mycat简介

Mycat是数据库分库分表的中间件,Mycat使用最多的两个功能是:读写分离和分库分表功能,支持全局表和E-R关系(这两个比较实用)。

Mycat官网: http://www.mycat.io

三、Mycat安装

1.下载Mycat软件包,wget Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

2.解压,tar -zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

3.配置service.xml文件

该配置文件里面定义了mycat的启动端口,默认8066。user标签创建用户信息,并指定访问的数据库

如下:root用户的密码是123456,可以访问的逻辑数据库是TESTDB;user用户的密码是user,可以操作的TESTDB,但是只能是读取数据,因为有个readOnly属性为true。

分库分表中间件-Mycat

4.配置schema.xml,是Mycat最重要的配置,里面包括了数据库的信息,分库分表的逻辑等等

第一部分是配置逻辑数据库,<schema>标签,name表示逻辑数据库,<table>指定数据表,属性dataNode是指定数据源的别名,多个用逗号隔开,rule属性表示分片规则,在rule.xml里面定义的。分表的属性是subTables,多个表名可以用逗号隔开,也可以用连续的序号$1-3来表示。

第二部分是配置数据库别名,<dataNode>标签,name数据是别名,在<table>中使用的;dataHost属性是下面配置的数据源名称;database是数据库的名称

第三部分是配置数据库源的信息,包括数据源信息,dbType,数据库的连接信息等。<writeHost><readHost>标签指定了读写分离的配置。

分库分表中间件-Mycat

5.rule.xml,分片规则配置信息,该配置文件定义了几个分片规则,比如:mod-long,表示取模算法,可以配置取模数,sharding_id,按照id的hash值分片,还可以按月,按日进行分片操作等。

6.启动Mycat:bin/mycat start;查看状态:bin/mycat status;停止服务:bin/mycat stop

四、登录mycat

mycat启动之后,就可以像登录mysql一样直接登录,登录之后可以查看到我们的逻辑数据库,以及我们的逻辑表

分库分表中间件-Mycat

分库分表中间件-Mycat

五、java中如何使用Mycat

在Java程序中使用Mycat跟使用mysql数据一样,只需要配置要mycat的ip,端口和数据库名即可正常使用。

分库分表中间件-Mycat