`
gaojingsong
  • 浏览: 1211812 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Why 分库分表 & Why Use Mycat

阅读更多

在互联网时代,海量数据的存储与访问成为系统设计与使用的瓶颈问题,对于海量数据处理,按照使用场

景,主要分为两种类型:联机事务处理(OLTP)和联机分析处理(OLAP)。

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

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

 

 

因此解决分布式的两大绝招是:分库分表,读写分离即主写从读

简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主

机)上面,以达到分散单台设备负载的效果。

数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者

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

垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很

小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。

水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库

中,对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。

 

垂直切分

一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同

的数据库上面,这样也就将数据或者说压力分担到不同的库上面

 

垂直切分的优缺点:

优点:

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

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

数据维护简单。

缺点:

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

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

 事务处理复杂。

由于垂直切分是按照业务的分类将表分散到不同的库,所以有些业务表会过于庞大,存在单库读写与存储瓶

颈,所以就需要水平拆分来做解决。

 

水平切分

相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中

包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中

 

 

水平拆分有优点也就优缺点。

优点:

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

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

应用端改造较少。

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

缺点:

拆分规则难以抽象。

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

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

跨库 join 性能较差。

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

引入分布式事务的问题。

跨节点 Join 的问题。

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

多数据源管理问题。

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

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

库,在模块内完成数据的整合;

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

可能 90%以上的人在面对上面这两种解决思路的时候都会倾向于选择第二种,尤其是系统不断变得庞大复杂

的时候。确实,这是一个非常正确的选择,虽然短期内需要付出的成本可能会相对更大一些,但是对整个系统的扩展性来说,是非常有帮助的。

Mycat 通过数据切分解决传统数据库的缺陷,又有了 NoSQL 易于扩展的优点。通过中间代理层规避了多数

据源的处理问题,对应用完全透明,同时对数据切分后存在的问题,也做了解决方案。

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

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

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

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

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

少使用多表 Join。

分享到:
评论

相关推荐

    mycat 分库分表

    **mycat 分库分表详解** mycat 是一个开源的分布式数据库中间件,它能够将一个大型数据库逻辑上划分为多个小型数据库,实现数据的分布式存储,以解决单机数据库在高并发、大数据量场景下的性能瓶颈问题。mycat 在 ...

    MYCAT分库分表

    ### MYCAT分库分表详解 #### 一、概述 在大数据时代,单一数据库服务器往往难以满足日益增长的数据处理需求。为了提高数据处理能力、优化系统性能,分库分表技术逐渐成为解决这一问题的有效手段之一。Mycat作为一...

    基于Mycat实现Mysql读写分离以及分库分表.doc

    基于Mycat实现Mysql读写分离以及分库分表详解 本文档详细介绍了基于Mycat实现Mysql读写分离以及分库分表的技术,涵盖了Mycat安装、配置、读写分离、分库分表等多方面的知识点。 一、读写分离 Mycat读写分离是指将...

    mycat对mysql数据库进行分库分表demo-mycat-demo-parent.zip

    标题"mycat对mysql数据库进行分库分表demo-mycat-demo-parent.zip"揭示了本示例主要围绕MyCat这一中间件,用于MySQL数据库的分布式处理,特别是分库分表功能。MyCat是一个开源的分布式数据库系统,它能够将一个大型...

    mycat+mysql+jdbc实现根据手机号尾号分库分表存储以及效率对比操作代码()

    标题中的“mycat+mysql+jdbc实现根据手机号尾号分库分表存储”涉及的是分布式数据库中间件Mycat与MySQL数据库以及Java JDBC接口的结合使用。Mycat是一款开源的分布式数据库系统,用于解决大数据量、高并发的场景下的...

    Mycat读写分离、主从切换、分库分表的操作记录- 线上操作手册

    ### Mycat读写分离、主从切换、分库分表的操作记录—线上操作手册 #### 一、Mycat简介及关键特性 Mycat是一个开源的分布式数据库系统,能够作为一个中间件帮助开发者管理和优化数据库资源。随着业务增长和技术演进...

    Mysql优化、MyCat搭建、分库分表、读写分离、负载均衡

    MySQL优化是数据库管理中的关键环节,它涉及到性能提升、资源有效利用和系统...以上就是关于"Mysql优化、MyCat搭建、分库分表、读写分离、负载均衡"的相关知识点,这些内容对于管理和优化大型MySQL数据库系统至关重要。

    【Mycat操作之分库分表入门】

    【Mycat操作之分库分表入门】 Mycat是一款开源的分布式数据库中间件,主要功能是实现数据库的水平扩展,通过分库分表来处理大数据量的问题,减轻单机数据库的压力。它支持MySQL协议,可以透明地将一个数据库集群...

    Mycat分库分表文档及demo.rar

    **Mycat分库分表技术详解** Mycat是一款开源的分布式数据库中间件,它在Java平台上运行,主要用于解决大数据量下数据库的性能瓶颈问题。Mycat的核心功能是实现数据库的分库分表,它能将一个大型的单体数据库拆分成...

    Mycat数据库分库分表

    《Mycat数据库分库分表详解》 在大数据时代,单个数据库处理海量数据的能力逐渐捉襟见肘,这催生了数据库分库分表的需求。Mycat,作为一个开源的分布式数据库中间件,应运而生,为解决大数据场景下的高性能、高可用...

    sharding分库分表之Mycat技术栈.zip

    1. **分库分表**:Mycat 支持水平拆分,即将一张大表按照一定的规则拆分成多个小表,分布在不同的数据库中,以此来提高数据处理效率和系统的并发能力。 2. **读写分离**:Mycat 可以实现读写分离,将读操作和写操作...

    Mycat 数据库分库分表中间件.pdf

    《Mycat数据库分库分表中间件》 在当今大数据时代,单个数据库系统往往无法满足高并发、海量数据的处理需求。为了解决这一问题,Mycat应运而生,它是一款开源的、基于Java开发的数据库中间件,专门用于实现数据库的...

    mycat.zip+分库分表文档

    《Mycat分库分表解决方案详解》 在当今大数据时代,随着业务的快速发展和数据量的急剧增加,单机数据库往往无法满足高并发、大数据量的处理需求,因此,分库分表技术应运而生。Mycat作为一款开源的分布式数据库...

    MySQL 分库分表的实现原理及演示案例

    MySQL分库分表是一种数据库架构优化技术,其目的是为了提高大型数据库系统的性能和可扩展性。在面对大规模数据和高并发访问时,单库单表往往难以满足需求,分库分表就成为了必要之选。分库分表技术可以将数据分散...

    MySQL分库分表技术

    2. **跨库查询**:分库后,部分原先的单表查询变为跨库查询,需要设计中间件(如MyCat、ShardingSphere)或采用JOIN聚合等方式解决。 3. **ID生成**:如何生成全局唯一且分散的ID成为问题,可使用雪花算法或分布式ID...

    MyCat实现MySQL分库分表.docx

    MyCat 实现 MySQL 分库分表 MyCat 是一个开源的 MySQL 中间件,可以帮助实现 MySQL 的分库分表。下面是使用 MyCat 实现 MySQL 分库分表的知识点总结: 一、MyCat 安装 * 使用 wget 命令下载 MyCat 服务器 * 使用 ...

    mycat1.6.5源码,分库分表,分布式

    【标题】"mycat1.6.5源码,分库分表,分布式"涉及到的是一个开源数据库中间件——Mycat,它主要用于解决大数据量下的高性能、高可用性问题,通过分库分表策略来分散数据库负载,实现数据的分布式处理。 【描述】中...

    分库分表mycat.zip

    Mycat是一款基于Java开发的开源分布式数据库中间件,其主要功能是实现数据库的水平扩展,通过分库分表的方式提高系统的并发处理能力。Mycat不仅支持MySQL协议,还能兼容部分Oracle和SQL Server的语法,使得应用程序...

    mysql主从同步+MyCat读写分离+分库分表+Haproxy高可用+Keepalived心跳机制+虚拟IP.rar

    总的来说,这个压缩包包含的资料涵盖了数据库高可用性的多个方面,包括MySQL的主从同步保证数据一致性,MyCat实现读写分离和分库分表提升性能,Haproxy进行负载均衡,Keepalived和虚拟IP保障服务的高可用性和稳定性...

Global site tag (gtag.js) - Google Analytics