InnoDB逻辑存储结构与分区分表分库

本文详细介绍了InnoDB的逻辑存储结构,包括表空间、段、区和页,以及行的存储方式。此外,讨论了数据库分区分表的概念,包括水平和垂直分区、分表的方式及其应用场景。当面临高读写压力时,可以考虑使用分区和分表来提高并发能力和磁盘I/O性能。最后,提到了分库作为应对数据量和访问量增大时的解决方案。
摘要由CSDN通过智能技术生成

InnoDB逻辑存储结构与分区分表


仅作为笔记


前言

仅作为笔记


一、InnoDB逻辑存储结构

  • 逻辑存储的角度来看,所有的数据都被逻辑地存放在一个空间中,称之为表空间。而表空间由段(segment)、区(extent)、页(page)组成,如下所示:
    在这里插入图片描述

表空间

  • InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中

  • 表空间由各个段组成,常见的段有数据段、索引段、回滚段等,每个段都由若干个区构成。

  • 区是由连续地页组成的空间在任何情况下每个区地大小都为1MB,通常为了保证区中页地连续性,InnoDB存储引擎一次向磁盘申请4到5个区,默认情况下,InnoDB存储引擎页地大小为16KB即一个区中一共由64个连续地页

  • 页是InnoDB磁盘管理的最小单位,在InnoDB存储引擎中,默认每个页的大小为16KB,页的大小在设置好了以后不可以被再次更改

  • 数据是按行进行存放的,每个页存放的行记录也是有硬性规定的,最多存放7992行。

二、分区分表分库

  • 读写压力大的时候,可以考虑使用增加Slave机器的方式。
  • 但是当增加了Slave后,已经不适合再增加了并且写压力很大时,使用分表分库。

分区

  • 原理:将表的数据均衡分摊到不同的存储硬件上实际上还是一张表
  • 方式
    水平分区:通过某个属性列来分割。比如:一个包含五年的话费充值清单可以被分区为5个包含一年的的话费清单。
    垂直分区:把某些特定的列划分到特定的分区,减少表的宽度,每个分区都保存了其中列所在的行。
  • 应用场景:单张表的查询很慢。数据量很大

分表

  • 原理:把一张表分解成N个具有独立存储空间的实体表。分解后每个表较少表的宽度或者是数据量
  • 方式
    水平分表:对表的行进行分区,不同分组中物理分隔的数据组合在一起,表中的所有列都可以在每个分区找到,维持了表的属性结构。
    垂直分表:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。
  • 应用场景
    1)单表数据量很大、字段很多
    2)频繁插入或者联合查询时,速度变慢
  • 作用提高单表并发速度、io效率、写效率,读写锁影响的数据量变小,插入数据库需要重新建立索引的数据减少

分区和分表对比

  • 分区是在逻辑层面进行了水平分割,存储的位置虽然变了,但任然是一张表
  • 分表主要是提升单表的并发能力,磁盘的I/O性能
  • 当访问量大,同时表数据比较大的时候,可以两种方式混用。
  • 分表的重点是在数据存取时,如何提高并发能力,而分区是如何突破磁盘的读写能力

分库

  • 应用场景:1)库中表过多,2)单台机器容量不够,3)访问量太大。
  • 分库方法垂直分库(面向跨数据库的事务,join查询等)水平分库
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值