四章数据存储方法.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
四章数据存储方法

定位数据块中的指针。例如: (1)如果数据块中存有记录的视图,那么它就告诉人们在记录中的什么地方是指针。 (2)如果数据块中使用的是索引结构,数据块中的指针位置也是可知的。 (3)在数据块头信息中记录指针所在的位置。 当一个数据块刚刚调入内存时,我们就将该块的一些地址加进地址转换表内,这时我们能确切地知道该块在内存中的地址。所以,我们可直接了当的为这些数据库地址生成对应的内存地址。如果我们将一个数据库地址A插入地址转换表时,发现A已在表中,这是因为A所在的数据块在先前已进入内存。在这种情况下,我们用对应的内存地址去代替数据块中A的地址,并且将标志位置成“1”。另一方面,如果A不在置换表中,则它所在的数据块还未调入内存。则不能置换该指针,而是将它继续以数据库指针的形式留在数据块中。 如果我们要跟踪指针P,但它是没有被置换过的指针,那么我们必须将包含指针P所指数据项的数据块B放入内存中(不然我们无法跟踪该指针)。 查询地址转换表来确定在内存中是否有和指针P对应的单元。如果没有,将数据块B调入内存缓冲区中。一旦数据块B也在内存中,就可将指针P进行置换。 另一个办法是在数据块首次调入内存时,对所有的指针都不进行置换。 将数据块的数据库地址和它的指针的数据库地址跟它们所对应的内存地址一起放入地址转换表中。当需要跟踪指针P时,象自动置换方法中置换未知指针那样进行置换。 但同时它可能造成无法跟踪一些已经置换的指针 ⒉ 按要求进行指针置换 一个有效的方法是将数据库的指针设计成与内存地址不同的形式。这样,我们可以象跟踪内存指针那样跟踪所有的指针。如果碰到一个没有被置换的指针,就引起一个硬件中断。如果DBMS提供给操作系统一个被中断调用的函数,它将指针按照以上的方法进行置换; 那么跟踪指针时,就不需要任何特别的操作, 而只是在遇到没有置换的指针时多用一点时间。 跟踪一些已经置换的指针 将数据块写回磁盘 当数据块从内存被写回磁盘,那么它所包含的指针需要被反置换。 也就是用数据库地址来代替内存地址。地址转换表可用来进行数据库地址到内存地址和内存地址到数据库地址的双向转换。给出一个内存地址,我们就可以找出对应的数据库地址。 锁定记录 如果一个数据块在某时不能被安全地写回磁盘中,我们称它被锁定了。 可在数据块的头信息中用一位来表示数据块是否被锁定 指针正在进行置换是记录被锁定的主要原因。当我们在数据块B1中使用了一个已置换的指向数据块B2的指针,那么当B2被调回磁盘或从磁盘又调入内存时,就必须对该指针进行处理。因为如果不进行处理,我们在跟踪B1中的指针时,它可能指向了内存缓冲区原被B2占用的部分,而这部分现在被数据块A使用,那么可能导致错误。这就是为什么要进行锁定的原因。 当我们将一个数据块写回到磁盘中时,我们不仅要将该数据块中的指针进行反置换,而且还要检查要写回的数据块是否被锁定。如果它被锁定,则一方面要将该数据块继续留在内存中以保证它不被别的数据块覆盖,另一方面要将该数据块进行解锁操作。对数据块进行解锁是因为我们要将那些已经置换的指针进行反置换。 所以地址转换表必须为那些数据库中指向内存的数据项,记录下它们所指的内存位置。 写回磁盘 4.4可变长度的数据和记录 我们假设每种数据项都是定长的。这样记录就有一个固定的由定长域组成的结构视图,但是在现实中常常不这么简单。我们需要表示: ⒈ 长度可变数据项 ⒉ 重复的域 ⒊ 多种记录格式 ⒋ 大对象 * * 第四章 数据的存储方法 这一章将系统地回答以下一些问题: 怎样在域中表示SQL的数据类型? 怎样用记录来表示元组? 怎样在内存块中表示记录或元组的集合? 怎样存储对象关系型数据?例如对象标识符(或别的指向记录的指针)和大对象(例如2GB的MPEG格式的视频信息)。 当一些域被更新而引起记录长度改变时,应该做什么?同时怎样的结构才能适合变长记录的需要。 4.1 数据元素的表示 用SQL语言的CREATE TABLE定义了一个关系: CREATE TABLE MovieStar( name CHAR(30) PRIMARY KEY, address VARCHAR(255), gender CHAR(1), birthdate DATE ); 从本质上来说,所有的数据类型是一个字节序列。例如,INTEGER一般用两个或四个字节来表示,FLOAT一般用四个或八个字节来表示。 整数和实数的具体表示由机器的硬件来确定。 数据元素的表示 1. 固定长度的字符串 定义格式: CHAR(5) 存储格式:cat╄╄。 这里’ ╄’是用来进行填补的字符。 它

文档评论(0)

erterye + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档