存储记录间的结构形式对定长记录
若记录都是一样长的,则页的槽也是统一的,此时存储记录在页中的安置可以有下列几种方式。1
(1)记录邻接。以ACDD方式安置记录,N个记录占据页的连续N个槽。
这种结构的维护原则是,要插入一个记录就插到一个空槽中,删除一个记录就留下一个空槽。这样要考虑两个问题:第一,查找机制必须能识别一个空槽,从而允许记录占有的槽不一定连续,否则,每当删除一个记录,其后的所有记录都得向前移一个槽,或者按下面第二点所述处理;第二,记录要能够是无序的,如此,则删除一个记录时,不必移动其后所有记录,而只需将最后一个记录移到此空槽即可,否则必须重新排序。所以这种结构适合于静态、连续查找的文件,对动态维护不利。
(2)记录链接。解决上述两个问题的一种方法就是用指针链接代替记录的邻接,即以PCDD方式安置记录。这样,动态维护页的记录很方便,插入或删除记录时,只需适当维护链的结构即可。但它的时间(搜索链)代价与空间(链的指针)代价都要高些。
(3)槽阵列。建立一个槽的数据指示阵列,阵列的每一项包含对应槽所存储的记录号或记录的标识符(rid),或者为“0”,标明该槽为空。这种结构与上面的记录链的空间开销一样,但查找与维护的性能更高。它的数据安置方式是PCDI,故其优缺点也一样。
对变长记录若记录的长度是变化的,那么页就不能静态地划分成固定长度的槽,而必须在记录插入时动态地划分合适长度的槽来存放相应记录。关键是如何管理页中的自由空间,当一个记录被删除,如何处理留下的“空洞”。变长记录的页结构典型地有下列几种形式。
(1)记录槽链接。这是组织变长记录的一种常用方法,所有的记录槽组成一个链,空槽组成另一个链。每页有一“页头”(page header),它包含两个链的链头指针,也许还有记录的个数等信息。
每当插人记录R,时,在空槽链上找一个或从自由空区划出一个合适的空槽,将其放入,并在“槽头”记录下它的长度li,再维护好两个链的结构。删除记录时,将该空槽自记录链中移入空槽链,并将相邻空槽合并成更大的槽,以免出现更多的无法使用的小“空洞”,从而提高空间的利用率。
这种结构的优缺点就是PCDD方式所有的,前面已谈到,这里不再重复。必须要注意的是要小心管理自由空间,尽量不要出现无用的“空洞”(完全不出现是很难的)。
(2)槽目录。这是组织变长记录最灵活的一种方法,其组织结构如图6—18所示。每页有一个槽目录,每一目录项是一个二元组,l为该槽中记录的长度,pt为指向该记录的指针,就是页的数据区首址开始的位移量(字节数)。
当删除一个记录时,则置其槽目录项中的pt(即记录的位移量)为负。当插入一个记录时,将其存入合适的空槽或自由空间区的适当区域中,在槽目录中建立一槽目录项。若要插入的记录太长,连自由空间都容纳不下,但整个页的剩余空间是足够大的(即在页的数据区域中包含了大量的小“空洞”),则必须整理页空问,使空区都并人自由空间区,并相应地维护槽目录。注意,删除记录时,不能随意删除槽目录中的相应项,因为那样会改变一些槽的编号,而这个槽(目录)号是记录的标识符Rid(F#,P#,S#)即(文件号,页号,槽号)的组成部分。
存储记录格式有三种类型的记录:逻辑记录、存储记录、物理记录,从数据抽象的角度来看,它们分属不同的抽象层,而逻辑记录又进一步分为“外部记录”(外部或子模式)和“概念记录”(概念模式)两层。
一个存储记录是对应一个或多个概念记录的存储数据项及实现其存储管理的有关信息的集合。下面介绍几种典型的存储记录结构,它们有不同的格式,需要不同的管理信息。
定位式顾名思义,定位式(position mode)就是固定各域(或存储数据项)的位置。当然这也就固定了各域的长度和域的个数,所以它比较适合于定长记录的存储。在一个域的存储数据项的长度变化不太大,且知道其最大值的情况下,也可用于存储变长域(因而变长记录)。
它采用ACDD数据安置方式,其记录头与记录尾,就是有关管理的信息,包括记录间的连接信息,如指针等。域的长度为对应数据项所取值的最大者。当数据项值被存储时,以左或右对齐,不足的未用空间以空格填充。这种格式最简单,很常用。但它很可能浪费大量存储空间,尤其对于很大的数据库,这个代价是很大的。
关系式关系式(relational mode)使用一专门字符(但必须是合法的)作域的界限符,域的相对排序固定,例如,字符“$”就是界限符。显然,这种格式支持变长记录的存储,它可消除用作填充的空格串和Null值(也是空格字符串),从而节省了空间。
索引式索引式(indexed mode)一般在记录的开端使用一个索引(或指针阵列),其中每一指针指明一个数据项值在记录中的位移量,各指针与数据项值在记录中的排序是相对的。与关系式一样,它支持变长记录且消除了无用(包括填充用的和Null值的)空间,但它比关系式花费空间略多,因为指针可能比一个字符大。然而,它可以进行域的直接存取,关系式却不能。
分离式一个记录的变长是由于包含了变长的数据项,一般一个记录型中变长数据项的个数总是少数。分离式(separated mode)存储记录结构的基本思想就将变长的域分离出来单独存储,再和主记录以指针相连。
标记式标记式(1abeled mode)存储记录结构在每_数据项值之前缀以指明该数据项型的标号,它们类似于关系式中的界限符的作用,但对各域是唯一的,即还具有数据项或域型的标识作用,且是在域的前头(而不是末尾)。标记式结构有三个优点,一是域值的顺序可以是任意的;二是可以方便地处理“重复组”数据项(使用同一标识符即可);三是省空间,对无值(即Null值)的域不需要任何空间,甚至界限符或指针都不要。其缺点是不能直接存取一个域值;若记录域的个数较多时,则标号会比界限符更大。
存储记录设计存储记录结构设计包括存储记录本身的内容与格式的确定和记录之间结构(联系)的确定,而后者实际就是存储文件结构的选择。存储文件结构在一定程度上决定着存储记录的格式,如记录是变长还是定长,是否有链接指针等。所以应该先选择存储文件结构。
存储文件自身的结构分为定长和变长记录两种形式,而文件内存储记录的组织结构可以有:堆文件(地址邻接、数据直接定位);有序文件(记录按主关键字值排序,其余同堆文件);索引文件,包括B一树、Bt树(地址邻接、数据指针定位);Hash文件(地址连接,数据指针定位);链接文件(指针连接,数据直接定位)等。由此,可以看出,存储文件结构不但在一定程度上决定了存储记录的格式,而且也决定了后面存取方法的选择。
一个存储记录格式通常由三部分组成:记录管理开销、各数据项及连接指针。记录管理开销包括控制位、记录长度等信息,其具体内容与存储格式有关。各数据项及其类型、长度等在逻辑结构设计期间已经确定,现在的问题是它们如何以符合系统硬软件实现的方式来存储。这些方式可以是定位式、关系式、索引式、标志式等。指针可以有多种形式,可以是绝对地址,也可以是相对地址,即关于一共同基的相对位移等。
无论是存储文件结构还是存储记录结构的确定,要考虑的一方面是应用语义,各类主要应用对数据库的存取需求;另一方面是所选定的目标DBMS提供的数据存储的功能特性,即存储结构方式。设计者的决策就在于这两方面的最佳匹配,即依据用户的数据存取需求选择最合适的存储数据结构。
存储记录的安置如何将各文件的存储记录在物理设备上实现,物理设计者要做两方面的决策:一是以整个记录为单位来存放还是分割成片来分别存放,即记录的分割问题;二是一个文件整体地存放于连续物理区域,还是将那些紧密关联的不同文件的记录集群在一起来存放于连续的物理区域,即记录的集群问题。
记录的分割存储记录的分割其实也属于存储记录格式设计范畴,只是从其目的来看,更偏重于存储记录的安置。分割的理由是:
(1)存在80一20规律。即80%的数据存取常常集中在约占20%的那些活跃数据项上。
(2)支持用户视图或子模式的高效实现。
(3)支持分布式数据库设计。
(4)有利于数据安全和可靠性。
分割的方式一般有两种:
水平分割。这实际上是文件的分裂。这种形式特别有利于关系数据库,因为它典型地按关键字值来划分记录,这实质上等于已进行了查询的预处理。
垂直分割。这典型地将存储记录分成两片,其主片为20%的那些活跃数据项,次片为剩余80%的那些数据项。它们分别存于不同的位置,使主片能得以更快速地存取,从而提高数据库的性能。
记录集群记录集群就是将存储记录或片段(同一记录型或不同记录型的)按某种标准进行排列和安置,使得具有共同或相似性(相对给定的标准而言)的记录组合成群(cluster)而存放在一块(或相连的几块)内。其目的是最大地发挥连续存储的优越性和最小化存取时间。例如,在商场管理中,一个商场有数以千计的商品种类,而每一类又有数以百计的品种。假设电器类商品有900种,在极端情况下,它们的记录分布存储于900个不同的物理块上。这样,要查询所有电器商品信息则要900次I/(),每次的磁头要重新定位。若将其集群存放在连续的90块(设组块因子为10)上,则查询所有电器商品的时问远不到前者的十分之一。
集群的方法可以多种多样,典型的有:
按属性集群。即对于某(一或多)个属性一称为“集群关键字”(cluster key),让具有相同值的记录(或元组)集中在一起存放。这是单个文件的记录集群。
基于公共属性集群。对两个或多个具有公共属性的不同记录类型(它们必然是紧密关联且往往被同时存取),其公共属性(也是上述的集群关键字)值相同的不同类型的记录(或元组)集群在一起存放。显然,这特别有利于关系的连接运算,这种集群实际已进行了连接的预运算。
基于存取路径集群。针对主要的数据库应用,其主存取路径上的相关记录经常频繁地被一起存取,故将其集群在一起存放。
集群对关系数据库非常有用,所以像Oracle数据库就提供了CLUSTER相关的子句。当经由集群关键字查询或连接查询是主要应用,而与集群关键字无关的其他存取很少或不需要时,使用集群就很有好处,尤其是当查询中含有关于集群关键字的ORDER BY、GROUP BY、UNI()N、DISTINCT等成分时,集群的受益会格外突出。
在层次数据库中,一般将树结构的片段按“由上到下,由左到右”的层次顺序存放,经集群,则可将树中存取路径上某些相连记录片集成在一起存放。
在网状数据库中,记录集群就更直接明确.以C()DASYI。模型为例,它用DSDI。语言的存储记录说明来定位记录。记录的定位就包含记录的集群,它由DSDL的PI,AYCEMENT子句控制。其定位形式有三种:
CALC。这就是Hashing定位,它经Hash函数计算后,由记录关键字值产生一个存储地址。相同或相近关键字值的记录必然集成在一起。
CI.USTERED VIA SET。它把一个系中的成员记录值集群在一起,且往往就在系主记录值的附近。
SEQUENTIAL。把一个记录型的所有记录值按主关键字值顺序存储。
必须指出的是,记录集群往往总是有利于某些应用,并非对所有的应用有利,而且其维护开销是相当大的。当建立集群时,原有的索引可能变成无效(集群使存储记录的物理位置变化),必须重建索引。当多种类型的记录集群时,对每种类型的记录的顺序扫描和插入、删除、修改操作都会变慢。尤其是集群关键字值变更时,存储记录要移动,所以集群关键字值应相对稳定。总之,记录集群适用于超大型数据库,对一般数据库要慎用。
存储记录设备存储记录设备包括内存储器、外存储器和光存储设备2。
内存储器内存储器又称主存,用于存放可由CPU直接读写的程序和数据。按读/写方式的不同可分为随机读/写存储器RAM和只读存储器ROM,通常均由半导体制成。
随机读/写存储器RAM(Randm Access Memory)的特点是可读可写,一般存放正在执行的程序和处理的数据。如关机或断电.则RAM中存储的数据将会全部丢失。因此,为了妥善保存内存中的数据.需要将CPU处理后的结果及时存放到外存储器中。
只读存储器ROM(Read Only Memory)的特点是只能读出不能写入新的信息,通常存储一些不能改写的管理机器本身的监控程序和其他基本的服务程序。ROM能长期保存信息,关机或断电后,存储的数据不会丢失。
外存储器外存储器又称辅助存储器,能长期存放暂时不用的程序和数据。外存不能由CPU直接读/写,而是与内存交换数据。与内存相比,外存具有存储容量大,可靠性高,价格低,能长期保存数据的优点,其缺点是数据读/写速度较慢。
常用的外存有磁带、磁盘(包括软盘和硬盘)和光盘等。
软盘驱动器及软盘
软盘驱动器是微型计算机系统中的一个重要部件。软驱的规格类型有3.5英寸、2.25英寸两种,分别用于读写3.5英寸/1.44MB软盘和2.25英寸/1.2MB软盘。与2.25英寸软盘相比,3.5英寸/1.44MB软盘的体积小、容量大、易携带,因此在现行品牌机的标准配置中,通常只配有3.5英寸/1.44MB软驱,5.25英寸软驱已几乎被淘汰。3.5英寸软驱的数据传输率为500KB/S。主轴为转速300rpm或是360rpm。道对道存取时间为3ms,平均存取时间为90ms左右。
与软盘驱动器的尺寸相应,软盘也分为5.25英寸和3.5英寸两种。1.44MB的3.5英寸软盘每面是80个磁道,有18个扇区。
硬盘驱动器
目前微机系统中使用的硬盘均为温盘(Winchester),由封装在铸铝胶体中的头盘组件(Head Disk Assembly)与控制电路印刷电路板组件PCBA(Print Circuit Board Assembly)组成。温盘是一种可移动头固定盘片的磁盘存储器,磁头定位的驱动方式主要有步进电机驱动(已淘汰)和音圈电机驱动两种。
移动存储器
随着移动办公的风靡,对移动存储的需求也越来越大,使用USB接口的移动硬盘.因其具备与台式硬盘一样的大容量、体积小、携带方便等众多优点,已逐渐成为移动存储所选用的产品。其常见的容量为4GB.40GB,60GB,80GB等,符合USB2.0标准。