Mycat介绍

在了解 Mycat 之前,我们先看下故事前景以及一些分库分表的概念。

海量数据存储问题

随着互联网的发展,数据的量级成指数级增长,从GB到TB到PB,对数据的操作也变得愈加困难,传统的关系型数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一问题,它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。

但是,在有些场合NoSQL的一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的,这个时候NoSQL无法满足使用需求,所以还是需要使用关系型数据库。如果使用关系型数据库,那如何解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储。

什么是数据库分片

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

数据的切分依据其切分规则的类型,可以分为两种切分模式:

垂直(纵向)切分

按照不同的业务对表进行分类,分布到不同的数据库(主机)上面,这样也就将数据或者说压力分散到不同的库上面。

优点:

  • 拆分后业务清晰,拆分规则明确。
  • 系统之间整合或扩展容易。
  • 数据维护简单。

缺点:

  • 部分业务表无法join,提高了系统复杂度。
  • 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
  • 事务处理复杂。

水平(横向)切分

按照某个字段的某种规则,将一张表中的数据拆分到多台数据库(主机)上面。

优点:

  • 不存在单库大数据,高并发的性能瓶颈。
  • 对应用透明,应用端改造较少。
  • 按照合理拆分规则拆分,join操作基本避免跨库。提高了系统的稳定性跟负载能力。

缺点:

  • 拆分规则难以抽象。
  • 分片事务一致性难以解决。
  • 数据多次扩展难度跟维护量极大。
  • 跨库join性能较差。

如何实现数据库分片

当数据库分片后,数据由一个数据库分散到多个数据库中。此时系统要查询时需要切换不同的数据库进行查询,那么系统如何知道要查询的数据在哪个数据库中?当添加一条记录时要向哪个数据库中插入呢?这些问题处理起来都是非常的麻烦。

这种情况下可以使用一个数据库中间件Mycat来解决相关的问题。接下来了解一下什么是Mycat。

什么是Mycat

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

Mycat 是一个数据库中间件,也可以理解为是数据库代理。在架构体系中是位于数据库和应用层之间的一个组件,并且对于应用层是透明的,即应用层感受不到 Mycat 的存在,认为是直接连接的 Mysql 数据库(实际上是连接的 Mycat,Mycat 实现了 Mysql 的原生协议)。

Mycat支持的数据库

MySQL、Oracle、DB2、SQL Server、PostgreSQL等。

Mycat的分片策略

概念说明

  • 逻辑库(schema):

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

  • 逻辑表(table):

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

    分片表:是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。 总而言之就是需要进行分片的表。

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

  • 分片节点(dataNode):

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

  • 节点主机(dataHost):

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

  • 分片规则(rule):

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

这期的 Mycat 简介就先到这啦,下期会详细介绍 Mycat 的安装步骤。


The End

评论