1 / 54
文档名称:

四章数据的存储方法.ppt

格式:ppt   大小:461KB   页数:54页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

四章数据的存储方法.ppt

上传人:小落意心冢 2022/7/17 文件大小:461 KB

下载得到文件列表

四章数据的存储方法.ppt

文档介绍

文档介绍:四章数据的存储方法
数据元素的表示
用SQL语言的CREATE TABLE定义了一个关系:
CREATE TABLE MovieStar(
name CHAR(30) PRIMARY KEY,
address VA表示物理地址。由于我们还需预先保留一些字节来表示主机等,所以这个系统的物理地址就需要10个以上的字节来表示。
⒉ 逻辑地址
计算机指令中地址部分所指示的地址称为逻辑地址。
它是由二进制的定长比特流组成的。
逻辑和物理地址的转换
映射表
逻辑地址
物理地址
查询物理地址所需的信息都保存在映射表中,然后,据指向某一记录的逻辑指针来查询映射表,以得到相应的物理地址。
当然,为了找到记录,我们需要有足够的有关它位置的信息。最简单的例子是定长记录,如果它的关键字的偏移量已知。另外从数据块的头信息中就可知道该块包含有多少记录,据这些信息我们就能从数据块中方便的找到相应的记录。
从数据块中找到相应的记录
一个简单而有效的办法是给每个数据块保存
一个记录的偏移量表。
在c/s结构的数据库系统中,每个数据块、每个记录、每个对象或别的可引用的数据项都有两种形式的地址:
⒈ 服务器的数据库地址空间中的编址。通常用8个字节来表示一个地址。我们称它为数据库地址。
⒉ 虚拟存储器中的地址(为内存工作缓冲区地址)。通常由4个字节组成。我们称之为内存地址。
转换数据库地址到内存地址的表
地址转换表
数据库地址
内存地址
.前面所提到的物理地址和逻辑地址都是用来表示数据库地址的。在转换表中的内存地址反映了对象在内存中的位置。
.数据库中所有可编址的数据项,仅当其处在内存中时,才能在映射表中找到相应的行。
为避免重复地进行数据库地址和内存地址的转换
采用指针置换的方法
当数据块从外存中移动到内存时,对数据块中的指针进行指针置换。也就是将数据库地址转换成内存地址.
通常一个指针由下列信息组成:
⒈ 用一标志位来表示这个指针是数据库地址还是内存地址。
⒉ 数据库地址值或内存地址值。
两种类型的指针
指针置换的方法
⒈ 自动置换
当数据块调入内存时,定位出其中所含有的指针和地址,如果置换表中还没有这些数据项,则将它们记入到地址转换表中。
这些指针包括记录中指向其它数据块的指针,以及指向块内记录项的指针。
定位数据块中的指针。例如:
(1)如果数据块中存有记录的视图,那么它就告诉人们在记录中的什么地方是指针。
(2)如果数据块中使用的是索引结构,数据块中的指针位置也是可知的。
(3)在数据块头信息中记录指针所在的位置。
当一个数据块刚刚调入内存时,我们就将该块的一些地址加进地址转换表内,这时我们能确切地知道该块在内存中的地址。所以,我们可直接了当的为这些数据库地址生成对应的内存地址。如果我们将一个数据库地址A插入地址转换表时,发现A已在表中,这是因为A所在的数据块在先前已进入内存。在这种情况下,我们用对应的内存地址去代替数据块中A的地址,并且将标志位置成“1”。另一方面,如果A不在置换表中,则它所在的数据块还未调入内存。则不能置换该指针,而是将它继续以数据库指针的形式留在数据块中。
如果我们要跟踪指针P,但它是没有被置换过的指针,那么我们必须将包含指针P所指数据项的数据块B放入内存中(不然我们无法跟踪该指针)。
查询地址转换表来确定在内存中是否有和指针P对应的单元。如果没有,将数据块B调入内存缓冲区中。一旦数据块B也在内存中,就可将指针P进行置换。
另一个办法是在数据块首次调入内存时,对所有的指针都不进行置换。
将数据块的数据库地址和它的指针的数据库地址跟它们所对应的内存地址一起放入地址转换表中。当需要跟踪指针P时,象自动置换方法中置换未知指针那样进行置换。

但同时它可能造成无法跟踪一些已经置换的指针
⒉ 按要求进行指针置换
一个有效的方法是将数据库的指针设计成与内存地址不同的形式。这样,我们可以象跟踪内存指针那样跟踪所有的指针。如果碰到一个没有被置换的指针,就引起一个硬件中断。如果DBMS提供给操作系统一个被中断调用的函数,它将指针按照以上的方法进行置换;
那么跟踪指针时,就不需要任何特别的操作,
而只是在遇到没有置换的指针时多用一点时间。
跟踪一些已经置换的指针
将数据块写回磁盘
当数据块从内存被写回磁盘,那么它所包含的指针需要被反置换。
也就是用数据库地址来代替内存地址。地址转换表可用来进行数据库地址到内存地址和内存地址到数据库地址的双向转换。给出一个内存地址,我们就可以找出对应的数据库地址