2019独角兽企业重金招聘Python工程师标准>>>

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

根据切分规则,可以分为两种切分模式:
垂直(纵向)切分;

按照业务,把业务不同的表(或者Schema)来切分到不同的数据库(主机)之上。
        一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面。根据业务模块之间的耦合度情况,来制定垂直切分规则。实施起来思路比较清晰,容易进行。

一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或者多个表。而在构架设计中,各个功能模块相互之间的交互点越统一越少,系统的耦合度就越低,系统各个模块的维护性以及扩展性也就越好。这样的系统,实现数据的垂直切分也就越容易。
      但是往往系统里有些表难以做到完全的独立,存在这扩库join的情况,对于这类的表,就需要去做平衡,是数据库让业务,共用一个数据源,还是分成多个库,业务之间通过接口来做调用。在系统初期,数据量比较少,或者资源有限的情况下,会选择共用数据源,但是当数据发展到了一定的规模,负载很大的情况,就需要必须去做分割。 一般来讲业务存在着复杂join的场景是难以切分的。如何切分,切分到何种程度是考验技术架构的一个难题。

垂直切分优点:
        拆分后业务清晰,拆分规则明确
        系统之间整合或扩展容易
        数据维护简单
垂直切分缺点:
        部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
        受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
        事务处理复杂。

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

水平(横向)切分;

根据表中数据的逻辑关系,将同一个表中数据按照某种条件拆分到多台数据库(主机)上面。
       相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中。

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

几种典型的分片规则包括:
     按照用户ID求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中。
     按照日期,将不同月甚至日的数据分散到不同的库中。
     按照某个特定的字段求模,或者根据特定范围段分散到不同的库中。

水平拆分优点:
        拆分规则抽象好,join操作基本可以数据库做。
        不存在单库大数据,高并发的性能瓶颈。
        应用端改造较少。
        提高了系统的稳定性跟负载能力。
水平拆分缺点:
        拆分规则难以抽象。
        分片事务一致性难以解决。
        数据多次扩展难度跟维护量级大。
        跨库join性能较差

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

引入分布式事务的问题。
        跨节点join的问题。
        跨节点合并排序分页问题。
        多数据源管理问题。

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

A:客户端模式,在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据库,在模块内完成数据的整合;
B:通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;
可能90%以上的人在面对上面这两种解决思路的时候都会倾向于选择第二种,尤其是系统不断变得庞大复杂的时候。确实,这是一个非常正确的选择,虽然短期内需要付出的成本可能会相对更大一些,但是对整个系统的扩展性来说,是非常有帮助的。

对于切分原则,建议如下:

第一原则:能不切分尽量不要切分。
第二原则:如果要切分一定要选择合适的切分规则,提前规划好。
第三原则:数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库Join的可能。
第四原则:由于数据库中间件对数据Join实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表Join。

转载于:https://my.oschina.net/u/3420885/blog/1941929

分布式数据库切分规则介绍相关推荐

  1. 分布式数据库中间件Sharding-JDBC介绍

    前文中介绍了分布式数据库中间件Mycat的一些特性,作为对比本文简要介绍Sharding-JDBC的一些特性以及分片的实现原理,进行对比分析以了解. 1.ShardingSphere介绍 Shardi ...

  2. 分布式数据库——TiDB的介绍和基本原理

    1.TiDB 介绍 1.1 TiDB 介绍 1.1.1 TiDB 是什么? TiDB 是一个分布式 NewSQL 数据库.它支持水平弹性扩展.ACID 事务.标准 SQL.MySQL 语法和 MySQ ...

  3. 分布式数据库中间件Mycat介绍

    从Cobar到Mycat,从闭源到开源,作为一个开源的分布式数据库中间件,Mycat已经被众多开源项目使用.本文简要介绍下Mycat的特性.基本架构以及分库分表和读写分离的配置. 1.Mycat基本介 ...

  4. 开源分布式数据库中间件MyCat架构简介(二)——基于MyCat的分库分表,读写分离,水平切分和垂直切分实现原理

    目录 前言 基于MyCat的分库分表,读写分离,水平切分和垂直切分实现原理 一.关于Mycat 二.Mycat 实现原理 三.MyCat 应用场景 四.MyCat 未来展望 五.Mycat 中相关概念 ...

  5. 分布式数据库中间件介绍

    分布式数据库中间件 在分布式情况下随着用户量的增加,Mysql数据库表逐渐庞大随之而来的问题就是导致数据库性能的下降,当数据量超过500W行那么就可以考虑分库分表了 分库分表概述 什么是分库分表 分库 ...

  6. 分布式数据库中间件的实现原理介绍一:分库分表【转】

    声明:本文并非原创,转自华为云帮助中心的分布式数据库中间件(DDM)服务的产品介绍. 分片是解决数据库存储容量限制的直接途径.分片包括垂直分片与水平分片两种方式. 垂直分片 垂直分片又叫纵向分割,即以 ...

  7. sharding-jdbc(ShardingSphere )、mycat、DRDS 三个分布式数据库中间件的简单介绍(纯理论说明)

    文章目录 1.前言 2.sharding-jdbc 3.mycat 4.DRDS 5.总结 1.前言 一般对于业务记录类随时间会不断增加的数据,当数据量增加到一定量(一般认为整型值为主的表达到千万级, ...

  8. 开源分布式数据库中间件MyCat架构简介(一)——基于MyCat的分库分表,读写分离,水平切分和垂直切分实现原理

    目录 前言 开源分布式数据库中间件MyCat架构简介--MyCat源起 一.数据库切分概述:OLTP和OLAP 二.关系型数据库和NoSQL数据库 三.关系型数据库和NoSQL数据库的特点及优缺点 1 ...

  9. 分布式数据库技术基础:数据分片介绍

    1.数据分片定义 数据分片也成为数据分割,是分布式数据库的特征之一.一般在一个分布式数据库中,全局数据库是由各个局部数据库逻辑组合而成的,反之各个局部数据库是由全局数据库的某种分割逻辑而得的. 数据分 ...

最新文章

  1. mysql 密码 You must reset your password using ALTER USER statement before executing this statement....
  2. nyoj1170最大的数
  3. 第七章之main函数和启动例程
  4. mac hdmi 不能调整音量_如何使用Mac的媒体键在DisplayPortHDMI或Thunderbolt监视器上调整扬声器音量...
  5. Android 编程下 AlarmManager
  6. 12位故去的国家最高科技奖得主:科学寰宇,那些永不陨落的“星”
  7. HDU 4336 Card Collector(容斥原理+状态压缩)
  8. 宿华、程一笑上市演讲:上市是接受更大机遇和挑战的新起点
  9. Pantera Capital CEO:比特币有望在今年夏天达到11.5万美元
  10. 动手做webserver的核心之http解析
  11. Jenkins构建触发器(定时构建项目)
  12. Laravel Event模块分析
  13. lintcode 订单
  14. liger ui 表格
  15. 华为开发者大会2022,发布鸿蒙开发套件
  16. python——田字格
  17. java关闭端口_使用java代码关闭指定端口的程序-windows
  18. 《中国人史纲》读书笔记:第四章 半信史时代 第五章 信史时代
  19. 汶川地震死亡人数5月26日消息
  20. 雅虎通8.3版本发布!

热门文章

  1. 中国江苏省动漫产业发展导向及运营前景规划咨询报告2021-2027年
  2. 全球及中国模块化塑料带行业供需调查及产销形势预测报告2021-2027年版
  3. VC6解决托盘菜单不消失
  4. PInvoke调用导致堆栈不对称
  5. Visual Basic中实现带预览的对话框
  6. 可覆写的函数与创建节点
  7. weex前端式写法解决方案---eros
  8. vue的父子组建之间的通信(-),基于props和$emit之间的传递
  9. express细节点注意
  10. ios 获取当前系统时间