我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mycat系列-概述

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mycat系列-概述

数据库切分概述

OLTP和OLAP

    在互联网时代,海量数据的存储与访问成为系统设计与使用的瓶颈问题,对于海量数据处理,按照使用场景,主要分为两种类型:联机事务处理(OLTP)和联机分析处理(OLAP)。

   联机事务处理(OLTP)也称为面向交易的处理系统,其基本特征是原始数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果。

    联机分析处理(OLAP)是指通过多维的方式对数据进行分析、查询和报表,可以同数据挖掘工具、统计分析工具配合使用,增强决策分析功能。

对于两者的主要区别可以用下表来说明:

 


OLTPOLAP

系统功能 

日常交易处理 

统计、分析、报表

DB 设计

面向实时交易类应用

面向统计分析类应用

数据处理

当前的, 最新的细节的, 二维的分立的

历史的, 聚集的, 多维的集成的, 统一的

实时性

实时读写要求高

实时读写要求低

事务

强一致性

弱事务

分析要求

低、简单

高、复杂


关系型数据库和NoSQL数据库

  针对上面两类系统有多种技术实现方案,存储部分的数据库主要分为两大类:关系型数据库与NoSQL数据库。

  关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据。主流的oracle、DB2、MS SQL Server和mysql都属于这类传统数据库。

NoSQL数据库,全称为Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种NoSQL都有其特有的使用场景及优点。

  Oracle,mysql等传统的关系数据库非常成熟并且已大规模商用,为什么还要用NoSQL数据库呢?主要是由于随着互联网发展,数据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单机单库瓶颈,却又扩展困难,自然无法满足日益增长的海量数据存储及其性能要求,所以才会出现了各种不同的NoSQL产品,NoSQL根本性的优势在于在云计算时代,简单、易于大规模分布式扩展,并且读写性能非常高。

下面分析下两者的特点,及优缺点:

关系型数据库

1) 关系数据库的特点是:

- 数据关系模型基于关系模型,结构化存储,完整性约束。

- 基于二维表及其之间的联系,需要连接、并、交、差、除等数据操作。

- 采用结构化的查询语言(SQL)做数据读写。

- 操作需要数据的一致性,需要事务甚至是强一致性。

2) 优点:

- 保持数据的一致性(事务处理)

- 可以进行join等复杂查询。

- 通用化,技术成熟。

3) 缺点:

- 数据读写必须经过sql解析,大量数据、高并发下读写性能不足。

- 对数据做读写,或修改数据结构时需要加锁,影响并发操作。

- 无法适应非结构化存储。

- 扩展困难。

- 昂贵、复杂。

NoSQL数据库

1) NoSQL数据库的特点是:

- 非结构化的存储。

- 基于多维关系模型。

- 具有特有的使用场景。

2) 优点:

- 高并发,大数据下读写能力较强。

- 基本支持分布式,易于扩展,可伸缩。

- 简单,弱结构化存储。

3) 缺点:

- join等复杂操作能力较弱。

- 事务支持较弱。

- 通用性差。

- 无完整约束复杂业务场景支持较差。

  虽然在云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代,NoSQL只能作为传统数据的补充而不能将其替代,所以规避传统数据库的缺点是目前大数据时代必须要解决的问题。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷,但是由于目前开源或者商用的传统数据库基本不支持大规模自动扩展,所以就需要借助第三方来做处理,那就是本书要讲的数据切分,下面就来分析一下如何进行数据切分。

何为数据切分?

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

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

  垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。

水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。

垂直切分

  一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:

mycat系列-概述


系统被切分成了,用户,订单交易,支付几个模块。

一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或者多个表。而在架构设计中,各个功能模块相互之间的交互点越统一越少,系统的耦合度就越低,系统各个模块的维护性以及扩展性也就越好。这样的系统,实现数据的垂直切分也就越容易。

但是往往系统之有些表难以做到完全的独立,存在这扩库join的情况,对于这类的表,就需要去做平衡,是数据库让步业务,共用一个数据源,还是分成多个库,业务之间通过接口来做调用。在系统初期,数据量比较少,或者资源有限的情况下,会选择共用数据源,但是当数据发展到了一定的规模,负载很大的情况,就需要必须去做分割。

一般来讲业务存在着复杂join的场景是难以切分的,往往业务独立的易于切分。如何切分,切分到何种程度是考验技术架构的一个难题。

下面来分析下垂直切分的优缺点:

优点:

· 拆分后业务清晰,拆分规则明确。

· 系统之间整合或扩展容易。

· 数据维护简单。

缺点:

· 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。

· 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。

· 事务处理复杂。

由于垂直切分是按照业务的分类将表分散到不同的库,所以有些业务表会过于庞大,存在单库读写与存储瓶颈,所以就需要水平拆分来做解决。

水平切分

相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,如图:

mycat系列-概述


拆分数据就需要定义分片规则。关系型数据库是行列的二维模型,拆分的第一原则是找到拆分维度。比如:从会员的角度来分析,商户订单交易类系统中查询会员某天某月某个订单,那么就需要按照会员结合日期来拆分,不同的数据按照会员ID做分组,这样所有的数据查询join都会在单库内解决;如果从商户的角度来讲,要查询某个商家某天所有的订单数,就需要按照商户ID做拆分;但是如果系统既想按会员拆分,又想按商家数据,则会有一定的困难。如何找到合适的分片规则需要综合考虑衡量。

几种典型的分片规则包括:

· 按照用户ID求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中。

· 按照日期,将不同月甚至日的数据分散到不同的库中。

· 按照某个特定的字段求摸,或者根据特定范围段分散到不同的库中。

如图,切分原则都是根据业务找到适合的切分规则分散到不同的库,下面用用户ID求模举例:

mycat系列-概述

既然数据做了拆分有优点也就优缺点。

优点:

· 拆分规则抽象好,join操作基本可以数据库做。

· 不存在单库大数据,高并发的性能瓶颈。

· 应用端改造较少。

· 提高了系统的稳定性跟负载能力。

缺点:

· 拆分规则难以抽象。

· 分片事务一致性难以解决。

· 数据多次扩展难度跟维护量极大。

· 跨库join性能较差。

前面讲了垂直切分跟水平切分的不同跟优缺点,会发现每种切分方式都有缺点,但共同的特点缺点有:

· 引入分布式事务的问题。

· 跨节点Join的问题。

· 跨节点合并排序分页问题。

· 多数据源管理问题。

针对数据源管理,目前主要有两种思路:

A. 客户端模式,在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据库,在模块内完成数据的整合;

B. 通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;

可能90%以上的人在面对上面这两种解决思路的时候都会倾向于选择第二种,尤其是系统不断变得庞大复杂的时候。确实,这是一个非常正确的选择,虽然短期内需要付出的成本可能会相对更大一些,但是对整个系统的扩展性来说,是非常有帮助的。

Mycat 通过数据切分解决传统数据库的缺陷,又有了NoSQL易于扩展的优点。通过中间代理层规避了多数据源的处理问题,对应用完全透明,同时对数据切分后存在的问题,也做了解决方案。下面章节就分析,mycat的由来及如何进行数据切分问题。

由于数据切分后数据Join的难度在此也分享一下数据切分的经验:

第一原则:能不切分尽量不要切分。

第二原则:如果要切分一定要选择合适的切分规则,提前规划好。

第三原则:数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库Join的可能。

第四原则:由于数据库中间件对数据Join实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表Join。

什么是mycat,maycat从哪里来,又是如何解决这些问题的,下一章让我们来作分析。


更多内容关注微信公众号:it_haha

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mycat系列-概述

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

二、Android基础系列学习-概述

AndroidStudio 的安装以及环境部署。 一、安装前准备 确认电脑有Java环境,如果没有就需要先下载JDK进行安装,之后配置下Java的环境变量。具体的JDK安装和配置环境变量可以参考这个帖子:https://blog.csdn.
2022-06-06

Java集合系列之JCF集合框架概述

Java集合框架(Java Collections Framework,JCF)是Java平台提供的一套用于存储、操作和管理对象的集合类库。它包含了一系列接口、抽象类和具体实现类,用于表示和操作不同类型的集合数据结构。JCF提供了一种统一的
2023-09-23

drupal文件系统概述

本文较为详细的讲述了drupal的文件系统。分享给大家供大家参考。具体如下: drupal把文件分为两大类:公共文件系统和私有文件系统。在drupal中,通过管理菜单“配置”->“文件系统”定
2022-06-12

Hadoop生态系统概述

Hadoop生态系统是一个由多个组件组成的开源软件框架,用于存储、处理和分析大规模数据集。该生态系统由Apache Hadoop项目管理,包括以下核心组件:Hadoop Distributed File System(HDFS):分布式文件
Hadoop生态系统概述
2024-02-29

3、MySql第三章,分库分表、MyCat概述及安装登录

MySql第三章,分库分表、MyCat概述及安装登录 先下定论,数据库优化顺序: 1、单库单表;2、单库单表主从复制;3、垂直分库;4、水平分区;5、水平分表; 一、概述 1、为什么要分库分表 数据库的复制能解决访问问题(主从复制),并不能解决大规模的并发写入
3、MySql第三章,分库分表、MyCat概述及安装登录
2017-12-03

oracle 11g 体系结构概述

Oracle 体系结构主要用来分析数据库的组成,工作过程与原理,以及数据在数据库中的组织与管理机制。      Oracle数据库是一个逻辑概念,而不是物理概念上安装了oracle数据库管理系统的服务器。  在oracle数据库管理系统中有3个重要的概念需要理
oracle 11g 体系结构概述
2015-06-16

动易CMS介绍—SiteFactory系统概述

关键字描述:系统 概述 介绍 管理 SiteFactory&trade 应用 PowerEasy®操作系统   Windows XP / Vista / 2000www.cppcns.com / 2003  运行环境   .NET F
2022-06-12

概述Fedora 9更新学习Linux系统

Fedora 9是Linux发行版Fedora的第9个版本,它于2008年5月13日发布。Fedora是一个基于开放源代码的操作系统,它以企业级的稳定性和安全性而闻名。Fedora 9带来了许多新的特性和更新,包括:1. GNOME 2.2
2023-09-22

FAT、HPFS和NTFS文件系统的概述

FAT(File Allocation Table)是一种较早期的文件系统,最初用于DOS操作系统和早期版本的Windows操作系统。它使用了一种称为文件分配表的数据结构来跟踪文件和文件夹的位置和存储。FAT文件系统具有简单、可兼容性强的特
2023-09-08

Oracle系统结构概述二(实例结构)

原文:https://www.cnblogs.com/CX66/p/13966144.html
Oracle系统结构概述二(实例结构)
2015-08-14

编程热搜

目录