第四章数据的存储方法内容摘要:

地址的。 在转换表中的内存地址反映了对象在内存中的位置。 . 数据库中所有可编址的数据项,仅当其处在内存中时,才能在映射表中找到相应的行。 为避免重复地进行数据库地址和内存地址的转换 采用指针置换的方法 当数据块从外存中移动到内存时,对数据块中的指针进行指针置换。 也就是将数据库地址转换成内存地址 . 通常一个指针由下列信息组成: ⒈ 用一标志位来表示这个指针是数据库地址还是内存地址。 ⒉ 数据库地址值或内存地址值。 数据库存储空间 客户内存空间 将数据块读入内存 被置换过的指针 数据块 1 未置换过的指针 数据块 2两种类型的指针 指针置换的方法 ⒈ 自动置换 当数据块调入内存时,定位出其中所含有的指针和地址,如果置换表中还没有这些数据项,则将它们记入到地址转换表中。 这些指针包括记录中指向其它数据块的指针,以及指向块内记录项的指针。 定位数据块中的指针。 例如: ( 1)如果数据块中存有记录的视图,那么它就告诉人们在记录中的什么地方是指针。 ( 2)如果数据块中使用的是索引结构,数据块中的指针位置也是可知的。 ( 3)在数据块头信息中记录指针所在的位置。 当一个数据块刚刚调入内存时,我们就将该块的一些地址加进地址转换表内,这时我们能确切地知道该块在内存中的地址。 所以,我们可直接了当的为这些数据库地址生成对应的内存地址。 如果我们将一个数据库地址 A插入地址转换表时,发现 A已在表中,这是因为 A所在的数据块在先前已进入内存。 在这种情况下,我们用对应的内存地址去代替数据块中 A的地址,并且将标志位置成 “ 1”。 另一方面,如果 A不在置换表中,则它所在的数据块还未调入内存。 则不能置换该指针,而是将它继续以数据库指针的形式留在数据块中。 如果我们要跟踪指针 P,但它是没有被置换过的指针,那么我们必须将包含指针 P所指数据项的数据块 B放入内存中(不然我们无法跟踪该指针)。 查询地址转换表来确定在内存中是否有和指针 P对应的单元。 如果没有,将数据块 B调入内存缓冲区中。 一旦数据块 B也在内存中,就可将指针 P进行置换。 另一个办法是在数据块首次调入内存时,对所有的指针都不进行置换。 将数据块的数据库地址和它的指针的数据库地址跟它们所对应的内存地址一起放入地址转换表中。 当需要跟踪指针 P时,象自动置换方法中置换未知指针那样进行置换。 但同时它可能造成无法跟踪一些已经置换的指针 ⒉ 按要求进行指针置换 一个有效的方法是将数据库的指针设计成与内存地址不同的形式。 这样,我们可以象跟踪内存指针那样跟踪所有的指针。 如果碰到一个没有被置换的指针,就引起一个硬件中断。 如果 DBMS提供给操作系统一个被中断调用的函数,它将指针按照以上的方法进行置换; 那么跟踪指针时,就不需要任何特别的操作, 而只是在遇到没有置换的指针时多用一点时间。 跟踪一些已经置换的指针 将数据块写回磁盘 当数据块从内存被写回磁盘,那么它所包含的指针需要被反置换。 也就是用数据库地址来代替内存地址。 地址转换表可用来进行数据库地址到内存地址和内存地址到数据库地址的双向转换。 给出一个内存地址,我们就可以找出对应的数据库地址。 锁定记录 如果一个数据块在某时不能被安全地写回磁盘中,我们称它被锁定了。 可在数据块的头信息中用一位来表示数据块是否被锁定 指针正在进行置换是记录被锁定的主要原因。 当我们在数据块 B1中使用了一个已置换的指向数据块 B2的指针,那么当 B2被调回磁盘或从磁盘又调入内存时,就必须对该指针进行处理。 因为如果不进行处理,我们在跟踪 B1中的指针时,它可能指向了内存缓冲区原被B2。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。