在介绍mycat之前,首先来了解一下数据库切分。
对于海量数据处理,按照使用场景,主要分为两类:联机事务处理(OLTP)联机分析处理(OLAP)

  • 联机事务处理也称为面向交易的处理系统,其基本特征是原始数据可以立即传送到计算中心进行处理,并在很短时间内给出处理结果。
  • 联机分析处理是指通过多维的方式对数据进行分析,查询和报表,可以同数据挖掘工具,统计分析工具配合使用,增强决策分析功能。

1 数据切分

简单来说,就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库上,以达到分散单台设备负载的效果。

数据的切分根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库之上,这种切分可以称之为数据的垂直切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库上面,这种切分称为水平切分

注意:
第一:能不切分尽量不要切分。
第二:如果要切分一定要选择合适的切分规则,提前规划好。
第三:数据切分尽量通过数据冗余或表分组来降低跨库join的可能。
第四:由于数据库中间件对数据join实现优劣难以把握,而且实现高性能难度极大,业务读取尽量少用join

2 Mycat主要功能

2.1 数据库读写分离,主从切换

通过Mycat可以自动实现写数据时操作主数据库,读数据时操作从数据库,这样能有效地减轻数据库压力,也能减轻IO压力。

实现读写分离,当主出现故障后,Mycat自动切换到另一个主上,进而提供高可用的数据库服务,当然需要部署多主多从的模式。
在这里插入图片描述

2.2 数据库分库分表

分库分表指的是对数据库数据的拆分,分为两种:水平拆分和垂直拆分

水平切分(横向切分)
根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库服务器上面 。

垂直切分(纵向切分)
按照不同的表来切分到不同的数据库服务器之上。

3 mycat的应用场景

Mycat发展到现在,适用的场景已经很丰富,应用场景如下:

  • 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换。
  • 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片。
  • 报表系统,借助于Mycat的分表能力,处理大规模报表的统计。
  • 替代Hbase,分析大数据。
  • 作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择。

4 mycat的原理

Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析,路由分析,读写分离分析,缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终返回给用户。

5 Mycat的一些概念

Mycat是数据库中间件,就是介于数据库和应用之间,进行数据处理与交互的中间服务。由于对数据进行分片处理之后,从原有的一个库,被划分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。
在这里插入图片描述
有了数据库中间件,应用只需要集中于业务处理,大量的通用的数据聚合,事务,数据源切换都由中间件来处理,中间件的性能与处理能力将直接决定应用的读写性能,所以一款好的数据库中间件至关重要。

5.1 逻辑库(schema)

通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库

5.2 逻辑表(table)

对应用来说,读写数据的表就是逻辑表。逻辑表,可以是数据切分后,分布在一个或多个分库中,也可以不做数据切分,不分片,只有一个表构成。

5.3 分片表

是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。
在这里插入图片描述
如图所示,apply_form,apply_info就是分片表,数据按照规则被分配到8个节点上。

5.4 非分片表

一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片表是相对分片表来说的,就是那些不需要进行数据切分的表

在这里插入图片描述
如下user_userinfo表只存在分片节点dn1上面。

5.5 E-R表

关系型数据库是基于实体关系模型之上,通过其描述了真实世界中事物与关系,Mycat中的ER表即是来源于此。根据这一思路,提出了基于E-R关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖父表,通过表分组保证数据join不会跨库操作
表分组(Table Group)是解决跨分片数据join的一种很好的思路,也是数据切分规划的重要一规则。

5.6 全局表

一个真实的业务系统中,往往存在大量的类似字典的表,这些表基本上很少变动,字典表具有以下几个特性。

  • 变动不频繁
  • 数据量总体变化不大
  • 数据规模不大,很少有超过数十万条记录

对于这类的表,在分片的情况下,当业务表因为规模而进行分片以后,业务部与这些附属的字典表之间的关联,就成了比较棘手的问题,所以mycat中通过数据库冗余来解决这类表的join,即所有的分片都都有一些数据的备份,所有将字典表或者符合字典表特性的一些表定义为全局表
数据冗余是解决跨分片数据join的一种很好的思路,也是数据库切分规划的另外一条重要规则。

5.7 分片节点

数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode).

5.8 节点主机

数据切分后,每个分片节点不一定会独占一台机器,同一机器上面可以有多个分片,这样一个或多个分片节点所在的机器就是节点主机,为了避免单节点主机并发数限制,尽量将读写压力高的分片节点均衡放置在不同的节点主机

5.9 分片规则(rule)

数据切分后,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据分片选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。

5.10 全局序列号

数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence)

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐