一、为什么需要分布式数据据库
随着计算机和信息技术的迅猛发展,行业应用系统的规模迅速扩大,行业应用所产生的数据量呈爆炸式增长,动辄达到数百TB甚至数百PB的规模,已远远超出传统计算技术和信息系统的处理能力,集中式数据库面对大规模数据处理逐渐表现出其局限性。因此,人们希望寻找一种能快速处理数据和及时响应用户访问的方法,也希望对数据进行集中分析、管理和维护。这已经成为迫切需求。
分布式数据库是在集中式数据库的基础上发展起来的,是计算机技术和网络技术结合的产物。分布式数据库是指数据在物理上分布而在逻辑上集中管理的数据库系统。物理上分布是指数据分布在物理位置不同并由网络连接的节点或站点上;逻辑上集中是指各数据库节点之间的逻辑上是一个整体,并由统一的数据库管理系统管理。不同的节点分布可以跨不同的机房、城市甚至国家。
二、分布式数据库的特点
分布式数据库具有透明性、数据冗余性、易于扩展性、自治性等特点,还具有经济、性能优越、响应速度更快、灵活的体系结构、易于集成现有系统等特点。
分布式数据库尽管有着天生的高贵血统,但它依赖调整网络,对事务的处理远没有传统数据库成熟,在很长一段时间内分布式数据存储将与传统数据存储共存。
三、MyCat数据库中间件简介
MyCat是一个彻底开源的面向企业应用开发的大数据库集群,支持事务、ACID,是可以替代MySQL的加强版数据库。MyCat被视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群,它是整合了内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server,是结合了传统数据库和新型分布式数据仓库的新一代企业级数据库产品,也是一个优秀的数据库中间件。
MyCat是通过Cobar改良而生。MyCat支持Oracle、PostgreSQL,从1.3版本开始支持NoSQL(SequoiaDB及MongoDB)并引入了Druid解析器。2016年MyCat发布了1.5版本,2018年发布了 1.6.6版本 。目前MyCat2.0项目已经启动,核心代码已经提交(https://github.com/MyCatApache/MyCat2.git)。
四、MyCat核心概念详解
4.1 逻辑库(schema)
通常在实际应用中,业务开发人员并不需要知道中间件的存在,只需要关注数据库,所以数据库中间件可以被当作一个或多个数据库集群构成的逻辑库。
4.2 逻辑表(table)
既然有逻辑库,就会有逻辑表。在分布式数据库中,对于应用来说,读写数据的表就是逻辑表。逻辑表可以分布在一个或多个分片库中,也可以不分片。
1)分片表
分片表是指将数据量很大的表切分到多个数据库实例中,所有分片组合起来构成了一张完整的表。例如在MyCat上配置t_node的分片表,数据按照规则被切分到dn1、dn2两个节点。
<table name=”t_node” primaryKey=”vid” autoIncrement=”true” dataNode=”nd1,dn2” rule=”rule1” />
2)非分片表
并非所有的表在数量很大时都需要进行分片。非分片表是相对分片表而言的,不需要进行数据切分的表。如下面配置中的t_node只存在于节点dn1上。
<table name=”t_node” primaryKey=”vid” autoIncrement=”true” dataNode=”dn1” />
3)ER表
关系型数据库是基于实体关系模型(Entity Relationship Model)的,MyCat中的ER表便来源于此。基于此思想,MyCat提出了基于E-R关系的数据分片策略,子表的记录与其所关联的父表的记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据关联查询不会跨库操作。
表分组是解决跨分片数据关联查询的一种很好的思路,也是数据切分的一条重要规则。
4)全局表
在一个真实的业务场景中往往存在大量类似的字典表,这些字典表中的数据变动不频繁,而且数据规模不大,很少有超过数十万条的记录。
当业务表因为规模进行分片后,业务表与这些附属的字典表之间的关联查询就成了比较棘手的问题,所以在MyCat中通过数据冗余来解决这类表的关联查询,即所有分片都复制了一份数据,我们把这些冗余数据的表定义为全局表。
数据冗余是解决跨分片数据关联查询的一种很好的思路,也是数据切分规划的另一条重要规则。
4.3 分片节点(dataNode)
将数据切分后,一个大表被分到不同的分片数据库上