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

什么是分库分区分表

程序员文章站 2022-07-14 12:21:31
...

一、什么是分库分区分表

分库

      分库就是将一个数据库服务实例按照业务逻辑拆分了多个数据库实例,以满足海量数据的业务请求,一般出现这种情况就是因为高并发、海量数据的请求过来

使单个数据库的实例超出了系统能处理的最大QPS、TPS,即是因为数据库的处理能力满足不了系统性能的要求。所以现在开始实行微服务的架构,将之前的一个单体架构

拆分了多个微服务系统实例,有一半的原因也是因为这样。

分区

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

分表

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

二、常用的单机数据库的瓶颈

问题描述

  • 单个数据量越大,读写锁,插入操作重新建立索引效率越低。
  • 单个数据量太大(一个数据库数据量到1T-2T就是极限)
  • 单个数据库服务器压力过大
  • 读写速度遇到瓶颈(并发量几百)

三、分区

什么时候考虑使用分区?

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

  • sql经过优化

  • 数据量大

  • 表中的数据是分段的

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

分区解决的问题

主要可以提升查询效率

分区的实现方式(简单)

mysql5 开始支持分区功能

CREATE TABLE sales (
    id INT AUTO_INCREMENT,
    amount DOUBLE NOT NULL,
    order_day DATETIME NOT NULL,
    PRIMARY KEY(id, order_day)
) ENGINE=Innodb 
PARTITION BY RANGE(YEAR(order_day)) (
    PARTITION p_2010 VALUES LESS THAN (2010),
    PARTITION p_2011 VALUES LESS THAN (2011),
    PARTITION p_2012 VALUES LESS THAN (2012),
PARTITION p_catchall VALUES LESS THAN MAXVALUE);

四、分表

什么时候考虑分表?

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

  • sql经过优化

  • 数据量大

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

分表解决的问题

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

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

分表的实现方式(复杂)

需要业务系统配合迁移升级,工作量较大

分区和分表的区别与联系

  • 分区和分表的目的都是减少数据库的负担,提高表的增删改查效率。

  • 分区只是一张表中的数据的存储位置发生改变,分表是将一张表分成多张表。

  • 当访问量大,且表数据比较大时,两种方式可以互相配合使用。

  • 当访问量不大,但表数据比较多时,可以只进行分区。

常见分区分表的规则策略(类似)

  1. Range(范围)
  2. Hash(哈希)
  3. 按照时间拆分
  4. Hash之后按照分表个数取模
  5. 在认证库中保存数据库配置,就是建立一个DB,这个DB单独保存user_id到DB的映射关系