关系表的数据组织

关系数据库在磁盘上的存储方式

存储对象:

如何表示数据库中的一个数据项?

image-20220719090725529

不同数据类型采用不同存储方式

每个DBMS都有自己的数据类型系统(来源)

  • 内嵌数据类型
  • 用户自定义

数据类型:

  • Scalar数据类型
  • 复合数据类型

基础、很难搞对

数据类型:一组相同属性值的集合

  • 型:类
  • 值:对象

包括如下属性:

  • 语法定义
  • 合法输入(值域、格式)
  • 输出
  • 操作符、函数
  • 内部存储:数据库大小

语法定义

image-20220719091216536

image-20220719091254101

如果是结构体,我们需要定义输入和输出的解析函数

内部存储

复杂的需要存储扁平化,节约空间

image-20220719091641562

操作

image-20220719092024846

字符类型需要注意

image-20220719092725530

记录

image-20220719093319634

image-20220719093456282

image-20220719093625434

pgsql不区分定长和变长。

image-20220719094012468

元组内存结构

image-20220719094059738

元组描述信息

image-20220719094147469

image-20220719094516823

image-20220719094618820

一位一位地扣字节:32 = 15+15+2

image-20220719094952496

image-20220719095359200

image-20220719095713567

image-20220719095900255

更新:创建一个指针,腾出一个地方(溢出)

image-20220719100339076

块是数据库最小的IO单位,数据库默认8K,操作系统一般4K

访问模式:

如果只访问几个元组,块不需要很大(OLTP

如果一片一片地访问,块越大越好(OLAP16K-32K)

一个Block放不下怎么办:

  • 元组一般不会跨页,可以拒绝
  • 采用指针技术

image-20220719100657001

大对象存储

  1. 存在数据库外
    • 不保证访问准确性,不会备份(只会备份ID)
  2. 在内(BLOB,CLOB):
    • 存在表内:数据较小
    • 存在表外:数据库中单独存储,

image-20220719101736074

大对象操作

一般用来操作

image-20220719102012844

image-20220719102052899

Toast机制

image-20220719102124792

image-20220719102624829

数据非常大的时候依然不太优秀

image-20220719102805446

image-20220719102908882

02-索引的数据组织

image-20220719104711230

数据结构

image-20220719104728518

B树索引

image-20220719105018598

B树

image-20220719105117002

B+树

image-20220719105437813

image-20220719105551442

image-20220719110052557

插入和删除

插入

image-20220719110227878

删除

image-20220719110635823

作业:实现B+树,实现索引

批量构建

image-20220719111417604

B+树元组索引

image-20220719111616408

所有数据都跟在这个结构后面

image-20220719111752543

image-20220719112000802

Hash索引

image-20220719112317641

理想情况下Hash效率

image-20220719112837493

动态Hash

image-20220719112859988

类比Java线性表:每次增长四分之一,但是这里是翻倍

线性哈希

image-20220719113558244

每次一个桶一个桶地涨

BitMap

image-20220719114928675

索引

image-20220719115630426

其他索引

image-20220719115646334

image-20220719115714106

image-20220719115737915

03-元数据的数据组织

04-数据组织的优化

05-小结