Macat数据库中间件入门

码途寻霓使
• 阅读 3740

一.什么是数据切分

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

数据切分一般分为两种:垂直切分水平切分


二.垂直切分

按照应用程序功能模块来分多个数据库,就是垂直拆分。

Macat数据库中间件入门

优点
◆ 数据库的拆分简单明了,拆分规则明确;

◆ 应用程序模块清晰明确,较为简单,整合容易;

◆ 数据维护方便,容易定位


缺点
◆ 部分表关联无法在数据库级别完成,需要在程序中完成,存在跨库join的问题。对于这类的表,就需要去做取舍,是数据库让步业务,共用一个数据源,还是分成多个库,业务之间通过接口来做调用处理;初期数据量比较少,或者资源有限的情况下,会选择共用数据源,但是当数据发展到了一定的规模,负载很大的情况,就需要必须去做分割。

◆ 对于访问极其频繁且数据量超大的表仍然存在性能瓶颈,不一定能满足要求;

◆ 事务处理相对更为复杂;

◆ 切分达到一定程度之后,扩展性会遇到限制;

◆ 过多切分可能会带来系统过度复杂而维护困难。


三.水平拆分

为了解决垂直拆分带来的问题,(一般来说是基于解决超大表性能瓶颈问题,查询很慢,读写分离模式只有一台主机,若遇到高并发插入,一台主机承受不住压力),引入了水平拆分。

水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,数据的水平切分理解为是按照数据记录行来切分,将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,也就是俗称分库分表。
Macat数据库中间件入门

水平切分的优点

◆ 表关联基本能够在数据库端全部完成;----不需要通过应用程序来关联表查询合并

◆ 不会存在某些超大型数据量和高负载的表遇到瓶颈的问题;----分多库多表则不管是查询还是插入都不存在性能瓶颈问题

◆ 事务处理相对简单;

◆ 应用程序端整体架构改动相对较少;----对程序基本透明


水平切分的缺点

◆ 切分规则相对更为复杂,很难抽象出一个能够满足整个数据库的切分规则;

◆ 后期数据的维护难度有所增加,人为手工定位数据更困难;

◆ 应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难。

◆ 跨节点合并排序分页问题

◆ 多数据源管理问题


四.Mycat简介

Mycat是一个数据库代理,MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储

Mycat并不存储数据,只做数据路由,我们也可以简单认为Mycat就是数据库中间件。

Macat数据库中间件入门

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


五.Mycat重要概念

逻辑库(schema):存在在mycat里面的虚拟库

逻辑表(table):存在在mycat里面的虚拟表

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

非分片表:不需要进行数据切分的表

ER表:子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据Join不会跨库操作。

表分组(Table Group):是解决跨分片数据join的一种很好的思路,也是数据切分规划的重要一条规则

全局表:例如字典表,每一个数据分片节点上有保存了一份字典表数据
数据冗余是解决跨分片数据join的一种很好的思路,也是数据切分规划的另外一条重要规则

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

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

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

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

上述基本概念后续再看案例介绍

点赞
收藏
评论区
推荐文章
京东面试官:呦,你对中间件 Mycat了解的还挺深~
1.数据切分概念数据的切分根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)(https://jq.qq.com/?wv1027&k0IsBuUb0)之上,这种切可以称之为数据的垂直(纵向)切分;另外一则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切
Wesley13 Wesley13
3年前
mysql数据库分库分表shardingjdbc
分库分表理解   分库分表应用于互联网的两个场景;大量数据和高并发,通常策略有两种:垂直分库,水平拆分  垂直拆分:是根据业务将一个库拆分为多个库,将一个表拆分为多个表,例如:将不常用的字段和经常访问的字段分开存放,在实际开发由于跟业务关系紧密,所以一般采用水平拆分。  水平拆分:则是根据分片算法讲一个库拆分为多个库,来进行维护,
Stella981 Stella981
3年前
Mycat全局Sequence详解
Mycat全局Sequence详解在分布数数据库设计环节,将一个大表切分成各个子表,并且存储到各个数据节点上,如何保持一条数据记录的全局唯一性是一个关键性问题。mycat提供了一种全局sequence的机制,并且提供了多种实现方案。该文将对Mycat这一块进行讨论,以理清mycat这一块的设计思路。mycat当前提供了master分支提供了三种全局s
Wesley13 Wesley13
3年前
mysql中间件
一.分类为:负载均衡类和数据切分类1.负载均衡中间件提供了请求的转发,降低了单节点的负载,如haproxy,mysqlproxy,mysqlrouter2.数据切分中间件按照不同的路由算法分发sql语句就形成了数据切分,如mycat,atlas,oneproxy,proxysql1.mycatA.开源免费
Easter79 Easter79
3年前
Springboot2.x + ShardingSphere 实现分库分表
之前一篇文章中我们讲了基于Mysql8的读写分离(文末有链接),这次来说说分库分表的实现过程。概念解析垂直分片按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的
Stella981 Stella981
3年前
Mycat适配oracle,各种坑
注:文中使用版本为Mycat1.6.5。1、Mycat正如官方所说,Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。由于前面讲的对数据进行分片处理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。当然,Mycat没有自己的存储引擎,并
Wesley13 Wesley13
3年前
MySQL_分库分表
分库分表数据切分  通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。数据的切分同时还能够提高系统的总体可用性,由于单台设备Crash之后,仅仅有总体数据的某一部分不可用,而不是全部的数据。切分模式  数据的切分(Sharding)依据其切分规则的类
Wesley13 Wesley13
3年前
MySQL 分库分表方案
数据库分库分表前言今天有朋友问到了数据库分库分表,他们都说数据库达到了瓶颈,需要重构,但是毫无头绪,现在做个概念总结(期待后期的实操吗?)会从以下几个方面说起:第一部分:实际网站发展过程中面临的问题。第二部分:有哪几种切分方式,垂直和水平的区别和适用面。第三部分:目前市面有的一些开源产品,技术,它们的优缺点是
Stella981 Stella981
3年前
Quick Sort(三向切分的快速排序)(Java)
1//三向切分的快速排序2//这种切分方法对于数组中有大量重复元素的情况有比较大的性能提升34publicstaticvoidmain(Stringargs)5{6ScannerinputnewScanner(System.in);7
Wesley13 Wesley13
3年前
PHP快速排序(原地切分)
        快速排序是一种分治的排序算法,采用递归的思想,将数组元素分为两部分,选择切分元素,左右扫描数组,将大于切分元素的数据放在右边,小于切分元素的数据放在左边,直到扫描指针相遇,切分结束,同时递归调用,直到数组有序。      代码如下:<?phpfunctionquick_sort(array&$array,$l
Wesley13 Wesley13
3年前
mysql可扩展第二部分
  数据分片主要是将数据按照一定的规则分为几个完全不同的数据集合的方式成为数据分片。数据的切分可以是数据库内的,将数据库中的一张表切分为几个不同的数据库表。也可以是数据库级别的,将数据库中的表划分为多个表,这些表存储在不同的数据库服务器上。该部分主要用来介绍数据库级的数据分片。切分规则将具有相关的数据保存在同一个分片上可以提高数据查询效率。数据库分片的路由规