数据库的分区、分表、分库、分片的简介

分区的概念

        数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操做中减小数据读写的总量以缩减响应时间。sql

分区并非生成新的数据表,而是将表的数据均衡分摊到不一样的硬盘,系统或是不一样服务器存储介子中,实际上仍是一张表。另外,分区能够作到将表的数据均衡到不一样的地方,提升数据检索的效率,下降数据库的频繁IO压力值,分区的优势以下:数据库

一、相对于单个文件系统或是硬盘,分区能够存储更多的数据;服务器

二、数据管理比较方便,好比要清理或废弃某年的数据,就能够直接删除该日期的分区数据便可;并发

三、精准定位分区查询数据,不须要全表扫描查询,大大提升数据检索效率;函数

四、可跨多个分区磁盘查询,来提升查询的吞吐量;性能

五、在涉及聚合函数查询时,能够很容易进行数据的合并;优化

1、什么是分区、分表、分库

分区

就是把一张表的数据分红N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的设计

一、水平分区

这种形式分区是对表的行进行分区,经过这样的方式不一样分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。全部在表中定义的列在每一个数据集中都能找到,因此表的特性依然得以保持。

二、垂直分区

这种分区方式通常来讲是经过对表的垂直划分来减小目标表的宽度,使某些特定的列被划分到特定的分区,每一个分区都包含了其中的列所对应的行。
举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不常常被访问,这时候就要把这些不常用的text和BLOB了划分到另外一个分区,在保证它们数据相关性的同时还能提升访问速度。
在数据库供应商开始在他们的数据库引擎中创建分区(主要是水平分区)时,DBA和建模者必须设计好表的物理分区结构,不要保存冗余的数据(不一样表中同时都包含父表中的数据)或相互联结成一个逻辑父对象(一般是视图)。这种作法会使水平分区的大部分功能失效,有时候也会对垂直分区产生影响。

 

分表

就是把一张表按必定的规则分解成N个具备独立存储空间的实体表。系统读写时须要根据定义好的规则获得对应的字代表,而后操做它。对象

分库

一旦分表,一个库中的表会愈来愈多索引

何时考虑使用分区?

  • 一张表的查询速度已经慢到影响使用的时候。

  • sql通过优化

  • 数据量大

  • 表中的数据是分段的
  • 对数据的操做每每只涉及一部分数据,而不是全部的数据

  •  

    分区解决的问题

    主要能够提高查询效率

  • 何时考虑分表?

    • 一张表的查询速度已经慢到影响使用的时候。

    • sql通过优化

    • 数据量大
    • 当频繁插入或者联合查询时,速度变慢

    分表解决的问题

    分表后,单表的并发能力提升了,磁盘I/O性能也提升了,写操做效率提升了

    • 查询一次的时间短了
    • 数据分布在不一样的文件,磁盘I/O性能提升
    • 读写锁影响的数据量变小
    • 插入数据库须要从新创建索引的数据减小
      • 什么是分片


        简单来讲,就是指经过某种特定的条件,将咱们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。
        数据的切分(Sharding)根据其切分规则的类型,能够分为两种切分模式。

        (1)一种是按照不一样的表(或者Schema)来切分到不一样的数据库(主机)之上,这种切分能够称之为数据的垂直(纵向)切分

        (2)另一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。

相关文章
相关标签/搜索