开发者学堂课程【高校精品课-西安交通大学-数据库理论与技术:第六课】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/12/detail/15862
第六课(三)
内容介绍
一. 顺序文件组织
二. 聚簇文件组织
三. 数据词典的存储
四. 对象到文件的映射
五. 持久性指针的管理
六. 磁盘的结构与特性
七. 基础回顾-计算机系统的存储体系
八. DBMS 数据存储与查询实现的基本思想
九. 数据库之表-记录与磁盘块的映射
十. 数据库之表-记录与磁盘块的映射
十一.Oracle DB 物理存储简介
十二.索引和散列
九. 数据库之表-记录与磁盘块的映射
(1)数据库概念与磁盘相关概念的映射示意
具体映射,本质上讲就是做一个映射的模式,逻辑的空间到这个物理地址空间的一个映射。
磁盘的基本组织呢就是盘面、磁道,扇区。一个磁盘块就是许多01组成的二进制的编码。这个信息读进来后,数据库怎么能够把这个信息解出来,这个校验信息就是格式信息,根据格式信息具体到哪个字段,从哪开始、什么类型。比如字符串,有8个字节,对应字符,如果是数值型,有数值格式;浮点型涉及到小数点,浮点;整形有整形的数据格式,要一定格式进行转化。
磁盘块可能是物理上规定相邻的,但逻辑上是没有规定的。到第五块,第八块有三个框,可能是逻辑上相邻的这一块。
这个表存放在三个块,这个转换过程,逻辑层面的叫表,表分成记录到属性,按照文件分配表,对应到框内的01的这种二进制数据序列,以一个块为单位进行存取,文件是通过文件分配给磁盘块,再到盘面、磁道、扇区,是它的物理的编码。
(2)数据库中记录的区分及记录内属性值的区分
记录的形式是定长记录还是变长记录,前面已经讲过,这里不多介绍。
(3)数据库中的记录 vs 磁盘块
记录是非跨块存储,还是跨块存储(靠指针连接)
非跨块存储就是一个记录只放在一个框。优点是效率高。比如这个地方还剩一块放不下,如果不换的话,在一个新的页面再放,就把这个空间给利用起来,但是这个记录就得分两部分。如果不跨的话,缺点就是浪费一些存储空间,但是磁盘块间无关联可并行。过来的话就不能进去,必须这个读完之后再读下面。
三号做完之后的空间把它弄起来,四号地内容又太多,放不下,那么只能放一部分空间,四号的剩余部分放到下面叫跨块。
跨块优点:空间节省,因为把这个这空间利用起来了。缺点是磁盘空间有关联,需串行,因为这个记录在右边。
(3) 数据库的表 vs 磁盘块
n 数据库-表所占磁盘块的分配方法
l 连续分配:数据块被分配到连续的磁盘块上(会存在扩展困难问题)
l 链接分配: 数据块中包含指向下一数据块的指针(访问速度问题)
l 按簇分配: 按簇分配,簇是若干连续的磁盘块,簇之间靠指针连
接;簇有时也称片段 Segment 或盘区 extent
按簇分配实际是上面两者的一个结合。联系起来了太多也不好,太少完全的这个随机放也不好。一般是若干个连续的页组成一个簇,或者叫区间或区段。一般的数据库里有一个区间大小,默认值是16,就是16个页一个区间。也可以把这个值改小一点,8个页。可以表达分配空间的时候是以区间为单位。
比如创建一个表,一次给16页。以区间为单位,再给16页。页是计量单位。
若干个连续在一起效率就会提高,但是不能太多,太多会造成空间浪费,所以它取折中。这就是一个折中的例子。
l 索引分配:索引块中存放指向实际数据块的指针
十. 数据库之表-记录与磁盘块的映射
(1) 数据组织与存取方法
要考虑不同因素,就是做增删改和查询操作的需求。数据库的文件组织和数据组织的没有一种是所有都适应的,要看不同的数据结构适应不同的操作。
如果以更新为主,增删改特别频繁,需要选择适应它的结构。以读为主要选择相应的结构,是它有不同的选择的。具体还需考虑:
l 更新将涉及数据存储空间的扩展与回收问题
l 检索将涉及扫描整个数据库的问题,大批量处理数据问题
l 不同的需求要求不同的数据组织方法和存取方法
l 文件组织(File Organization)指的是数据组织成记录、块和访问
结构的方式,包括把记录和块存储在磁盘上的方式,以及记录和块之间相互联系的方法
l 存取方法(Access Method)指的是对文件所采取的存取操作方法
涉及到最基本的比如握拳扫描,利用索引怎么快速定位
l 一种文件组织可以采取多种存取方法进行访问
(2)无序文件组织
(3)有序文件组织
以上两种不做详细介绍。
(4) 散列文件组织
l 特点:可以把记录按某属性或属性组的值,依据一个散列函数来计
算其应存放的位置:桶号(Bucket, 块号或簇号等)。检索效率和更新效率都有一定程度的提高
l 用于进行散列函数计算的属性通常称为散列字段(Hash field),散
列字段通常也采用关系中的主码,所以又称散列码(hash key)
散列在数据结构里讲过,就是一个记录用散列函数进入到散列的位置,在位置里存放,但是这里有很多问题,比如溢出、碰撞等等一系列问题。比如讲到区块链的时候,区块链的很基本的散列,把这块内容散列出来以后,这个内容如果稍微变化一下,重新用散列函数进行散列,它可以知道内容有没有更改。现在散列主要是用来做数据组织,做查找,还有别的作用,这里不展开讲解。
l 不同记录可能被 hash 成同一桶号,此时需在桶内顺序检索出某
一记录
十一.Oracle DB 物理存储简介
(1) Oracle 数据库的数据组织
l Oracle 数据库组织为数据库(database)、表空间(tablespace)、
操作系统文件、table、段(segment)、盘区(extent)和基本数据块(data blocks)
数据组织的一个最大的单位叫数据库。库下面有表空间,库相当于一个仓库,表空间就相当于物理上的一个库房,这个逻辑上大面积的一块库房。表实际上是一个逻辑单位,它的数据一般放在表空间里。创建表的时候告诉它这个表放在哪个表空间里,数据放在一个空间里,索引放到一个空间里。也可以分开,也可以放在一起。
它的数据的组织分成一层一层的,这是关于这个的数据组织。
具体细节不做详细讲解。
(2) Oracle 数据库的数据组织相关的 SQL 命令
>Oracle 物理数据库相关的定义语句
>定义表空间时,需要考虑物理存储性能。注意参数的使用,参数的含义参见 Oracle 手册。
数据组织会反映到相应的语句当中,比如说 create 了一个表空间,可以考虑空间名字,还可以给它指定放在哪个数据文件。另外它还有很多参数,是在线的,还是离线的等等
十二.索引和散列
十二章参考的是数据库系统概念的第11章的内容。方法是简介+自学,还有补充内容。
本章内容特色:
涉及 DBMS 内部结构,对应用,系统和理论均重要。
体现数据库实现者和数据库使用者之间的重要知识差别。
涉及大量数据结构,算法细节。
着重介绍解决问题的思想和方法。
本章要解决的关键问题:
如何高效地实现逻辑地址空间到物理地址空间的映射
第一节 基本概念
第二节 索引
索引评价度量
有序索引
稠密索引文件
稀疏索引文件
多级索引
索引更新:删除
索引更新: 插入
辅助索引
主索引与辅助索引
B+-Tree 索引文件
第三节 散列
静态散列
动态散列
第四节 有序索引与散列的比较
第五节 SQL 中的索引定义
第六节 多键存取
第七节 网格文件
第八节 位图索引
基本概念
l 索引的目的就是加速对信息的查找。
日常生活当中有很多索引的例子,比如说图书录入卡片,去查书的时候是手工查找。图书馆有一个抽屉放盒子,拿出来一张卡片,在那个卡片上找,找到你要的书的号。比如要找什么类型的书,或者有标题,有作者的信息,根据这个进行查找。如果没有索引,在书库里漫无目的找,效率就会太低。一定要利用索引,知道这个书在哪个架子上,在哪个位置。索引的作用就是根据要找的信息了解要找的东西在什么地方。
l 搜索键:书的目录,书的标题或者作者的性别等信息。
这个搜索键用属性或属性集合,索引文件就是以这个形式,一个键值加一个指针叫键值对。数据库的很多设备有一大类本质上就是键值对,只不过不叫索引。索引基本的元素就是一个键值对,一个搜索键值对,一个指针。
l 索引文件比被索引的那个文件通常占的空间要小很多
这是从关系数据库角度讲的。索引相当于把表里的某一列的值单独拿到另外一个地方单独存,它比原来的表占的空间要小很多,还包含到记录的指纹信息。关键词:信息
l 两种基本索引:
有序索引:搜索键按顺序存储
散列索引:搜索键被“散列函数”一致地分配到若干“桶”中
l 原理:索引:用绳索(小、轻)牵引(大、重)
l 获得逻辑位置 RecPos 两法:
搜索匹配,数据量越多就越慢,成为性能瓶颈
索引(尽量在内存中,如:散列,B-树等),以小博大,可以加速
从映射观点看索引:
位置信息的映射。比如要到图书馆去借书,需要干两件事,第一件事:“检”,要找到这个书。第二件事是“索”,就是办手续。要把它借出来需要要办个手续。这两者相比,哪一件事更耗时间?显然前面这个更耗费时间。图书馆越大,书越多,找书的时间会越长,如果没有索引,没有这些辅助手段,可能花的时间非常长。