你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

公众号关注 「运维之美

设为「星标」,每天带你玩转 Linux !


你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!


MyCAT 是什么?

  • 一个彻底开源的,面向企业应用开发的大数据库集群

  • 支持事务、ACID、可以替代 MySQL 的加强版数据库

  • 一个可以视为 MySQL 集群的企业级数据库,用来替代昂贵的 Oracle 集群

  • 一个融合内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server

  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

  • 一个新颖的数据库中间件产品

上诉种种都是官网对其定义,是否还是有些模糊,下面我们通过一个分库分表的案例来讲解 MyCAT 中核心的概念和相关名词,案例如下图:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

数据库中间件

MyCAT 是一个介于数据库与应用之间,进行数据处理与交互的中间服务。如下图:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!


通俗点讲,应用层可以将它看作是一个数据库的代理(或者直接看成加强版数据库)。但是由于真正的数据库需要存储引擎,而 MyCAT 并没有存储引擎,MyCAT 服务不保存真正的数据,所以并不是完全意义的分布式数据库系统。所以称 MyCAT 这样类型的数据库中间代理服务的产品为数据库中间件。

逻辑库


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

如图一中,在 MyCAT 服务区中的 db_user 库,只是逻辑上存在的数据库,真正的数据来源还是来源 MySQL 服务区中的两台实际的 MySQL DB 实例。

在 MyCAT 中逻辑库在 {MYCAT_HOME}/conf/schema.xml 用 <schema> 标签定义。如图三:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

逻辑表

既然有逻辑库,肯定将会存在逻辑表,分布式数据库中,对应用来说,读写数据的表就是逻辑表。

逻辑表的数据来源,可以是数据进行切分后,分布在一个或多个分片库中,针对不同的数据分布和管理特点,我们将逻辑表又分为分片表、全局表、全局表、ER 表、非分片表五种逻辑表类型。在 schema.xml 使用 <table> 标签对逻辑表进行定义。

分片表:是指那些原有的很大数据的表,需要切分到多个表,这样,每个分片都有表的一部分数据,所有分片数据的合集构成了完整的表数据,如图一种中MyCAT 服务区的 users 表即是分片表,通过 userID 字段取模的方式进行数据的水平切分。如图四中用户(users)表:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

分片规则:将大数据的表,切分到多个数据分片的策略。如图三中 rule="mod-userID-long",名字为 mod-userID-long 引用的详细规则,将在MyCAT 的 rule.xml 中({MYCAT_HOME}/conf/rule.xml)中进行定义,具体定义规则如图五:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

分片规则 MyCAT 中内置了很多种,比如按时间、按自定义数字范围、十进制取模、程序指定,字符串 Hash,一致性 Hash 等等,总体可将这些分片规则分为离散型和连续型两种分片规则。

离散型分片规则数据分布均衡,对数据的处理并发能力强,但是对于分片的扩缩容存在较大的挑战。连续性分片数据分布较集中,更符合业务特性,但是对数据的处理并发能力受限数据的分布,分片的扩缩容有更好的支持。

全局表:一个真实的业务系统中,往往存在大量的类似数据字典表的表,数据字典表具有以下几个特性:

  • 数据变动不频繁;

  • 数据规模不大,数据量在十万以内;

  • 存在跟其他表(特别是分片表)有一点的关联查询要求。

未了解决表与表的 join 查询,MyCAT 提倡大家将具有上诉特点的表通过数据冗余的方式(全局表的定义)进行解决,即所有的分片都有一份数据的拷贝。通过 MyCAT 对这样的表进行数据的操作时,数据的修改,新增,删除时,所有的分片数据都将受到影响。

ER表:关系型数据库是基于实体关系模型(Entity-Relationship Model)之上,通过其描述了真实世界中事物与关系,MyCAT 中的 ER 表即是来源于此。

根据这一思路,提出了基于 E-R 关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据 Join 不会跨库操作。

如文中的案例,用户表是分片表,用户地址表与用户表之间存在一对多的关系,若通过分片规则,将用户表中的张三分在了分片1,则最好的数据存储方式是将张三的用户地址信息跟随张三一起分配在分片1中。

这样一种表分组的设计方式是解决跨分片数据 join 的一种很好的思路,也是数据切分规划的重要一条规则。ER 表中在 schema.xml 中使用<childTable>标签进行描述和定义,如图六:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

非分片表:一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是那些不需要进行数据切分的表。在schema.xml 中具体的定义,可参见图七:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

分片节点

大数据表进行数据切分后,每个表分片所在的数据库就是分片节点,狭义的理解可以认为一个 DB 实例就是一个节点,在 schema.xml 中使用 <dataNode>进行分片节点的定义如图八:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

节点主机

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

尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机,在schema.xml 中使用 <dataHost> 进行分片节点的定义如图九:

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

来源:简书
原文:http://t.cn/Ai9MFKK0
题图:
来自谷歌图片搜索 
版权:
本文版权归原作者所有
投稿:欢迎投稿,投稿邮箱: [email protected]

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

你可能还喜欢

点击下方图片即可阅读

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

假如服务器上没有 Docker 环境,你还能愉快的拉取容器镜像吗?

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

点击上方图片,打开小程序,加入「玩转 Linux」圈子

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!