第六课(三)|学习笔记

简介: 快速学习第六课(三)

开发者学堂课程【高校精品课-西安交通大学-数据库理论与技术:第六课】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/12/detail/15862


第六课(三)

 

内容介绍

一. 顺序文件组织

二. 聚簇文件组织

三. 数据词典的存储

四. 对象到文件的映射

五. 持久性指针的管理

六. 磁盘的结构与特性

七. 基础回顾-计算机系统的存储体系

八. DBMS 数据存储与查询实现的基本思想

九. 数据库之表-记录与磁盘块的映射

十. 数据库之表-记录与磁盘块的映射

十一.Oracle DB 物理存储简介

十二.索引和散列

 

九. 数据库之表-记录与磁盘块的映射

(1)数据库概念与磁盘相关概念的映射示意

具体映射,本质上讲就是做一个映射的模式,逻辑的空间到这个物理地址空间的一个映射。

磁盘的基本组织呢就是盘面、磁道,扇区。一个磁盘块就是许多01组成的二进制的编码。这个信息读进来后,数据库怎么能够把这个信息解出来,这个校验信息就是格式信息,根据格式信息具体到哪个字段,从哪开始、什么类型。比如字符串,有8个字节,对应字符,如果是数值型,有数值格式;浮点型涉及到小数点,浮点;整形有整形的数据格式,要一定格式进行转化。

磁盘块可能是物理上规定相邻的,但逻辑上是没有规定的。到第五块,第八块有三个框,可能是逻辑上相邻的这一块。

这个表存放在三个块,这个转换过程,逻辑层面的叫表,表分成记录到属性,按照文件分配表,对应到框内的01的这种二进制数据序列,以一个块为单位进行存取,文件是通过文件分配给磁盘块,再到盘面、磁道、扇区,是它的物理的编码。

(2)数据库中记录的区分及记录内属性值的区分

记录的形式是定长记录还是变长记录,前面已经讲过,这里不多介绍。

(3)数据库中的记录 vs 磁盘块

记录是非跨块存储,还是跨块存储(靠指针连接)

image.png

非跨块存储就是一个记录只放在一个框。优点是效率高。比如这个地方还剩一块放不下,如果不换的话,在一个新的页面再放,就把这个空间给利用起来,但是这个记录就得分两部分。如果不跨的话,缺点就是浪费一些存储空间,但是磁盘块间无关联可并行。过来的话就不能进去,必须这个读完之后再读下面。

image.png

三号做完之后的空间把它弄起来,四号地内容又太多,放不下,那么只能放一部分空间,四号的剩余部分放到下面叫跨块。

跨块优点:空间节省,因为把这个这空间利用起来了。缺点是磁盘空间有关联,需串行,因为这个记录在右边。

(3) 数据库的表 vs 磁盘块

n 数据库-表所占磁盘块的分配方法

l 连续分配:数据块被分配到连续的磁盘块上(会存在扩展困难问题)

l 链接分配: 数据块中包含指向下一数据块的指针(访问速度问题)

l 按簇分配: 按簇分配,簇是若干连续的磁盘块,簇之间靠指针连

接;簇有时也称片段 Segment 或盘区 extent

按簇分配实际是上面两者的一个结合。联系起来了太多也不好,太少完全的这个随机放也不好。一般是若干个连续的页组成一个簇,或者叫区间或区段。一般的数据库里有一个区间大小,默认值是16,就是16个页一个区间也可以把这个值改小一点,8个页。可以表达分配空间的时候是以区间为单位。

比如创建一个表,一次给16页。以区间为单位,再给16页。页是计量单位。

image.png

若干个连续在一起效率就会提高,但是不能太多,太多会造成空间浪费,所以它取折中。这就是一个折中的例子。

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)

数据组织的一个最大的单位叫数据库。下面有表空间,库相当于一个仓库,表空间就相当于物理上的一个库房,这个逻辑上大面积的一块库房。表实际上是一个逻辑单位,它的数据一般放在表空间里。创建表的时候告诉它这个表放在哪个表空间里,数据放在一个空间里,索引放到一个空间里。也可以分开,也可以放在一起。

image.png

它的数据的组织分成一层一层的,这是关于这个的数据组织。

具体细节不做详细讲解。

(2) Oracle 数据库的数据组织相关的 SQL 命令

>Oracle 物理数据库相关的定义语句

>定义表空间时,需要考虑物理存储性能。注意参数的使用,参数的含义参见 Oracle 手册。

数据组织会反映到相应的语句当中,比如说 create 了一个表空间,可以考虑空间名字,还可以给它指定放在哪个数据文件。另外它还有很多参数,是在线的,还是离线的等等 


十二.索引和散列

十二章参考的是数据库系统概念的第11章的内容方法是简介+自学,还有补充内容

本章内容特色

涉及 DBMS 内部结构,对应用,系统和理论均重要。

体现数据库实现者和数据库使用者之间的重要知识差别。

涉及大量数据结构,算法细节。

着重介绍解决问题的思想和方法。

本章要解决的关键问题:

如何高效地实现逻辑地址空间到物理地址空间的映射

第一节 基本概念

第二节 索引

索引评价度量

有序索引

稠密索引文件

稀疏索引文件

多级索引

索引更新:删除

索引更新: 插入

辅助索引

主索引与辅助索引 

B+-Tree 索引文件

第三节 散列

静态散列

动态散列

第四节 有序索引与散列的比较 

第五节 SQL 中的索引定义

第六节 多键存取 

第七节 网格文件

第八节 位图索引 

基本概念

l 索引的目的就是加速对信息的查找。

日常生活当中有很多索引的例子,比如说图书录入卡片,去查书的时候是手工查找。图书馆有一个抽屉放盒子,拿出来一张卡片,在那个卡片上找,找到你要的书的号。比如要找什么类型的书,或者有标题,有作者的信息,根据这个进行查找。如果没有索引,在书库里漫无目的找,效率就会太低。一定要利用索引,知道这个书在哪个架子上,在哪个位置。索引的作用就是根据要找的信息了解要找的东西在什么地方。

l 搜索键:书的目录,书的标题或者作者的性别等信息。

这个搜索键用属性或属性集合,索引文件就是以这个形式,一个键值加一个指针叫键值对。数据库的很多设备有一大类本质上就是键值对,只不过不叫索引索引基本的元素就是一个键值对一个搜索键值对一个指针

l 索引文件比被索引的那个文件通常占的空间要小很多

这是从关系数据库角度讲的索引相当于把表里的某一列的值单独拿到另外一个地方单独存,它比原来的表占的空间要小很多,还包含到记录的指纹信息。关键词:信息

l 两种基本索引:

有序索引:搜索键按顺序存储

散列索引:搜索键被“散列函数”一致地分配到若干“桶”中

l 原理索引用绳索(小、轻)牵引(大、重)

l 获得逻辑位置 RecPos 两法:

搜索匹配,数据量越多就越慢,成为性能瓶颈

索引(尽量在内存中,如:散列,B-树等),以小博大,可以加速

从映射观点看索引

位置信息的映射。比如要到图书馆去借书,需要干两件事,第一件事:“检”,要找到这个书。第二件事是“索”,就是办手续。要把它借出来需要要办个手续。这两者相比,哪一件事更耗时间?显然前面这个更耗费时间。图书馆越大,书越多,找书的时间会越长,如果没有索引,没有这些辅助手段,可能花的时间非常长。

相关实践学习
块存储快速入门
块存储是阿里云为云服务器ECS提供的块设备产品。通过体验挂载数据盘、分区格式化数据盘(Linux)、创建云盘快照、重新初始化数据盘、使用快照回滚云盘和卸载数据盘等功能,带您快速入门块存储。
相关文章
|
存储 SQL 算法
第六课(二)|学习笔记
快速学习第六课(二)
110 0
第六课(二)|学习笔记
|
存储 Oracle 关系型数据库
第六课(一)|学习笔记
快速学习第六课(一)
110 0
第六课(一)|学习笔记
|
存储 算法 数据库
第八课(二)|学习笔记
快速学习第八课(二)
第八课(二)|学习笔记
|
存储 NoSQL 算法
第八课(三)|学习笔记
快速学习第八课(三)
第八课(三)|学习笔记
|
存储 数据库 开发者
第七课(二)|学习笔记
快速学习第七课(二)
148 0
第七课(二)|学习笔记
|
存储 数据采集 人工智能
第七课(三)|学习笔记
快速学习第七课(三)
131 0
第七课(三)|学习笔记
|
存储 机器学习/深度学习 算法
第八课(一)|学习笔记
快速学习第八课(一)
106 0
第八课(一)|学习笔记
|
存储 机器学习/深度学习 数据库
第七课(一)|学习笔记
快速学习第七课(一)
173 0
第七课(一)|学习笔记
|
搜索推荐 网络协议 Java
第四课(二)|学习笔记
快速学习第四课(二)
第四课(二)|学习笔记
|
存储 缓存 移动开发
第四课(三)|学习笔记
快速学习第四课(三)
第四课(三)|学习笔记