zoukankan      html  css  js  c++  java
  • 数据库的分区、分表、分库、分片的简介

    分区的概念

            数据分区是一种物理数据库的设计技术,它的目的是为了在特定的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)另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。

  • 相关阅读:
    bzoj1051(明星奶牛)
    hdu4081(秦始皇的道路系统)
    bzoj2330(差分约束)
    JPA & Hibernate 注解
    Hibernate中对象的3种状态:瞬时态、持久态、脱管态
    Spring Data JAP 多个不是必填的查询条件处理
    设计模式
    Java远程方法调用(RMI)
    Javascript注意事项四【提高循环性能的策略】
    Javascript注意事项三【使用假值】
  • 原文地址:https://www.cnblogs.com/Army-Knife/p/10582488.html
Copyright © 2011-2022 走看看