欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-08-10 09:12:21
分区的概念 数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。 分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还是一张表。另外,分区可以做到将表的数据均衡到不同的地方,提高数据检索的效率,降低数 ......

分区的概念

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

分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还是一张表。另外,分区可以做到将表的数据均衡到不同的地方,提高数据检索的效率,降低数据库的频繁io压力值,分区的优点如下:

1、相对于单个文件系统或是硬盘,分区可以存储更多的数据;

2、数据管理比较方便,比如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可;

3、精准定位分区查询数据,不需要全表扫描查询,大大提高数据检索效率;

4、可跨多个分区磁盘查询,来提高查询的吞吐量;

5、在涉及聚合函数查询时,可以很容易进行数据的合并;

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

分区

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

1、水平分区

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

2、垂直分区

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

 

分表

就是把一张表按一定的规则分解成n个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它。

分库

一旦分表,一个库中的表会越来越多

什么时候考虑使用分区?

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

  • sql经过优化

  • 数据量大

  • 表中的数据是分段的
  • 对数据的操作往往只涉及一部分数据,而不是所有的数据

  •  

    分区解决的问题

    主要可以提升查询效率

  • 什么时候考虑分表?

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

    • sql经过优化

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

    分表解决的问题

    分表后,单表的并发能力提高了,磁盘i/o性能也提高了,写操作效率提高了

    • 查询一次的时间短了
    • 数据分布在不同的文件,磁盘i/o性能提高
    • 读写锁影响的数据量变小
    • 插入数据库需要重新建立索引的数据减少
      • 什么是分片


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

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


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