背景技术
顺序存取存储介质,如磁带和WORM(一次写入、多次读取)光盘,典型地用于存储大量数据。相对于其它存储方法的选择,如磁盘、磁盘阵列或随机存取存储器(RAM),顺序存取存储介质提供了一种低成本存储的选择。但是,顺序存取存储介质的缺点是,对介质上特定位置的定位过程相对慢。对磁带来说,这种定位一般包括介质的机械前绕和/或后绕以便在磁带上定位于所需数据的适当位置。这样,对磁带上特定数据偏移量的定位,会导致顺序存取存储介质上,检索记录数据的整个进程产生大量的操作。
将大量的数据流写到顺序存取存储介质时,最好将数据流分成较小的数据段,因为有几个原因:第一,数据分段分配提高了错误恢复性。一个数据段含有一个首部和错误恢复参数,如校验和参数。如果一个很大的数据流包含一个数据段,在该数据段被确认前,整个数据流必须被读取。整个一个数据段的数据流还可能因为一个较小的错误而不可恢复。因此,如果数据流被分配成多个较小的数据段,单一数据段中的错误不会使整个数据流不可恢复。
第二,最好使用较小的数据段,是因为数据段可以作为界线,以适应系统缓存的数据自动清空。一般地,在数据被实际存储到顺序存取存储介质前,应用程序将一块会话数据“写”到系统缓存。一些系统使用数据段界线来定义数据,使系统自动将缓存的数据清空,并记录到介质上。这里,“会话”是指一组数据记录到顺序存取介质上的完整进程。
第三,最好使用较小的数据段,因为当“写”操作被初始化时,对应用程序来说,整个数据流的长度未知,这样就不能在数据段首部中存储数据段长度了。可选地,如果数据流被分成多个数据段,甚至当整个数据流的长度还未知时,应用程序也可以指定数据段的长度。
一项减少在顺序存取存储介质上定位的操作耗费的技术,是使用固定长度数据段。即记录在顺序存取存储介质上的数据,被分配成存储在介质上的固定长度数据段。每个数据段典型地含有一个固定长度首部,连接在每个数据段的开始部分,例如,数据段索引,用来指定数据段内的数据开始部分、段内的数据长度和填充符的量。如果记录在段内的数据比整个固定长度数据段短,段内剩余部分被填充(也就是,后续会话数据被记录在下一个数据段,而不是当前数据段的其余部分)。
应理解:介质偏移量代表沿介质方向的顺序偏移量,包括首部、数据、校验和、和填充符;而数据偏移量只代表数据的顺序偏移量,不包括首部、数据、校验和、和填充符。为了定位特定的数据偏移量Od,程序(例如,操作系统,应用程序,系统驱动,或嵌入程序)使用简单的确定算术方法,计算出对于包含特定数据偏移量Od的数据段的介质偏移量。固定长度数据段的一个缺点是,数据段倾向于固定在大的值上(例如64KB(千字节)),这样,需要大量填充符,通过在介质上引入必要的浪费空间,减小了存储效率。
为减少固定长度数据段引入的浪费空间,现有的一种途径使用可变长度数据段以减少固定长度数据段方法中过多的填充符。可变长度数据段意味着,数据段不必遵从预设固定长度,甚至在一些或多数数据段都具有相同长度时也是如此。但是,在固定长度数据段的方法中使用的简单确定位置的方法,在可变长度数据段中不起作用。因而,可变长度数据段方法包括,使每个读取头沿介质方向移动,将读取头按一个特定数据偏移量定位。沿介质上的每个首部的数据偏移量,和数据长度信息被顺序估算,直到到达包含特定数据偏移量Od的数据段。这一移动机制是费时的,特别是特定数据偏移量位于介质的尾部时更是如此。
具体实施方式
本发明一项实施例提供了在含有可变长度数据段的顺序存储介质上会话数据的存取。会话数据以可变长度数据段记录,按预设排列间隔排列。每个数据段含有一个预设标记域,用来识别数据段的首部。会话数据记录在介质上,防止与标记域匹配的会话数据以预设排列间隔排列。在顺序存取存储介质上检索会话数据,是根据估计介质偏移量,迭代查找特定数据偏移量。
图1和随后的讨论用来对一个合适的计算环境提供一个简略和普遍的描述,本发明一项实施例运行其上。尽管不是必须的,本发明的实施例将用计算机可执行的指令,以普通文本描述,例如程序模块、对象、组件、数据结构等等,它们实现特定任务,或使用特定的抽象数据类型。而且那些本技术领域的专业人士会意识到,本发明可以在其它设置的计算机系统上实现,如手持设备、多处理器系统、基于微处理器的或可编程的消费电子产品、网络PC、微型计算机、巨型计算机及类似系统。本发明同样可以在分布式计算环境上实现,在那种系统中,任务由通讯网络连接的远程处理设备完成。在分布式计算环境中,程序模块可以同时驻留本地和远程的记忆存储设备。而且,程序模块可以嵌入固件,并且可以由存储控制器的微处理器执行。
参考图1,本发明一项实施例的操作环境是计算机系统100,包括计算机102,带有至少一个高速处理单元(CPU)104;连接一个存储系统106;一个输入设备或模块108;和一个输出设备或模块110。这些部件通过至少一个总线结构112相互连接。
上述CPU104的设计是为人所熟悉的,包括一个算术逻辑单元(ALU)114,用来实现计算;一组寄存器116,用来临时存储数据和指令;和一个控制单元118,用来控制计算机系统100的操作。CPU104可以是各种结构的处理器,包括x86,由Intel和其他公司如Cyrix和AMD设计;或PowerPC,由IBM和Motorola设计。
存储系统106通常包括高速主存储器120,其介质形式包括随机存储器(RAM)和只读存储器(ROM)半导体设备;长期存储器,包括第一存储器122和第二存储器124,每个的介质形式包括软盘、硬盘、磁带、CD-ROM、快闪存储器、光盘和其他设备,使用电、磁、光或其它记录介质存贮数据。主存储器120还包括通过显示设备显示图像的视频显示存储器。那些本技术领域的专业人士会意识到,存储系统106可以包括大量具有不同存储性能的可选元件。在优选实施例中,第二存储器124的形式是,包含可变长度数据段的顺序存取存储介质,根据本发明,按预设排列间隔排列的。在可选实施例中,根据本发明的系统可以由存储控制器或磁带驱动器实现,它们与计算机系统分离,从计算机系统、外围设备或网络接收数据流。
输入设备108和输出设备110同样是为人所熟悉的。输入设备108包括键盘、鼠标、物理转换器(例如麦克风)等等。输出设备110包括显示器、打印机、转换器(例如扬声器)等等。例如在本发明一项实施例中,磁带的读取头是输入设备,而磁带的记录头是输出设备。
正如那些本技术领域的专业人士所熟悉的,计算机系统100还包括一个操作系统和通常一个或多个应用程序。操作系统包括一组程序,控制计算机系统100的操作、资源的分配、为用户提供图形操作介面,并且还包括必要的应用程序,如电子邮件系统。应用程序是运行在操作系统软件之上的软件,使用由操作系统提供的计算机资源,完成用户需要的特定任务。在本发明的优选实施例中,电子邮件系统结合在操作系统中。电子邮件系统也可以结合在应用程序中。它们都驻留在上述存储系统106中。操作系统最好使用图形操作介面,应用程序的显示输出,被显示在输出设备110屏幕上的矩形区域内;操作系统是多任务的(以多线程执行计算任务),例如Microsoft公司的“WINDOWS95”、“WINDOWS98”、“WINDOWS NT”操作系统,IBM的OS/2 WARP,Apple的MACINTOSH SYSTEM 8操作系统,X-window等。
与计算机编程领域专业人士的实践相一致,除非另外说明,本发明的如下描述参考了由计算机系统100、分离存储控制器或分离磁带驱动器(未示出),执行的动作和操作的符号表示。上述的动作和操作有时被称作是计算机可执行的。应该知道,动作和符号表示的操作包括:表示引起电信号表示产生的变换和简化的数据位的电信号的CPU104的处理,和在存储系统106的存储位置上数据位的保持,以便像其它运算信号一样,重新配置或改变计算机系统的操作。保持数据位的存储位置是具有根据数据位的,特定的电、磁、光性能的物理单元。
计算机系统100可以通过与一或多台远程计算机或外围设备逻辑连接,运行在网络环境中,在此情况下,网络介面或调制解调器可以被用作输入设备108和/或输出设备110。远程计算机可以是桌面计算机、服务器、路由器、网络PC(个人计算机)、同位体设备或其它普通网络节点,典型地包括与计算机系统100相联系的很多或所有上述元件。逻辑连接包括局域网(LAN)或广域网(WAN)。这样的网络环境在办公室、企业级计算机网、内联网和Internet中是普通的。
图2A示出了本发明一项实施例的逻辑图,描述具有可变长度数据段的顺序存取存储介质200。顺序存取存储介质200可以代表,任何顺序存储和检索数据的存储设备,而非随机存取方式的设备,包括无限盘式磁带、盒式磁带和WORM光盘。应理解数据段201、202和203具有不同的长度。在图2B中,预设排列间隔(例如图标210所示)沿存储介质长度方向,逻辑地和一致地间隔。在优选实施例中,尽管其它的间隔也在本发明的范围之内,间隔210与需要与磁带上记录1千字节(1KB)数据的磁带长度相符合。在可选实施例中,预设排列间隔210被确定为任意的,但是典型地,间隔210根据传统排列单元确定,传统排列单元与系统中定义的,顺序存取存储控制器参数或操作系统参数相联系,用来优化性能。
图2B示出了本发明一项实施例中,数据段202更细节的表示。数据段202最好包括固定长度数据段首部206,数据区208,可选的填充区212,和可选的4位校验和区211。首部206(同时数据段202)按预设排列间隔204排列,预设排列间隔204也就是图2A中的一个预设排列间隔210。在优选实施例中,数据段首部包括一个标志(或类型)域、一个属性域、一个段编号域、一个数据偏移量域、一个数据长度域、一个填充长度域、前段数据段长度域和一个校验和域。在一个可选实施例中,前段数据段长度被去掉。
标志字段存储预设的和一致的标志,用于识别首部的开始,例如,标志与任意的会话数据相对。检索进程通过以预设排列间隔,查找标志来找到首部。但是,有一种可能,由于巧合,收到的任意会话数据与首部的标志匹配。如果这个匹配的会话数据也按预设排列间隔排列,检索进程会将会话数据误认为首部数据。因此,本发明实施例的存储进程保证,不使与预设标志字段匹配的会话数据按预设排列间隔排列。
属性域包括描述数据段的参数,以提高性能。例如,属性域包括指示数据段是否包含填充域和校验和域的标志,或指示当前数据段是否是记录的会话数据的最后一个数据段。段编号域用来保持数据段的顺序。数据偏移量域提供当前数据段中,数据区第一个字节的预设数据偏移量。数据长度域提供当前数据段的数据区中数据的长度。填充长度域提供在数据段结束时包括的填充符长度。前段数据段长度域提供顺序中前段数据段的长度,以实现反向检索。校验和域存储数据段首部自身的校验和。
数据区208包括由计算机系统提供的,用于记录在顺序存储介质200上的会话数据部分。图2B中的数据区208在每个介质偏移量206处结束,介质偏移量206不按预设间隔排列。填充区212代表位于数据区208尾部和下一个预设排列间隔218之间的区域。如本方式所采用的,这一区域被填充(例如,会话数据不被存储在填充区212的可用空间),下一个数据段按下一个预设排列单元218排列。如图所示,下一个数据段的首部214按下一个预设排列间隔218排列。然而有一种可能性,数据区长度在预设排列间隔结束处,以便减少在数据段中填充符的需要(见例中的数据段201)。在包括数据段校验和域的实施例中,校验和域的长度包括在填充域的长度中。
理解下述问题是很重要的,在顺序存取介质中,使用了两个不同类的偏移量:(1)介质偏移量,代表沿介质记录的信息的顺序偏移量,包括首部、数据域、校验和和填充域。(2)数据偏移量,代表记录在介质上数据的顺序偏移量,不包括首部、校验和和填充域。由此,预设排列间隔是根据介质偏移量沿介质方向的空间。而且,在介质上读和写数据的存储设备,根据介质偏移量定位。相反,当用户需要存储在存储介质上的数据时,用户提供一个特定数据偏移量。本发明一项实施例适应了介质偏移量和数据偏移量的不同,在包含可变长度数据段的介质中,根据特定的数据偏移量找到介质偏移量。
图3示出了本发明一个实施例的流程图,描述存取会话数据的操作,会话数据以可变长度数据段记录在顺序存储介质上。“存取”通常是指存储数据、检索数据或兼指二者(如图3所说明的)。进程由操作300开始,会话数据被接收到缓存中。操作302将会话数据分配成可变长度数据段。操作304按预设排列间隔排列每个数据段。操作306在顺序存储介质上,根据排列记录每个数据段,并保证不使与预设标志字段匹配的会话数据按预设排列间隔排列。如图4所示,本发明一项实施例将具有上述匹配的数据段,分成两个不同的数据段,不使标志匹配的会话数据按预设排列间隔排列。
在操作308中,特定数据偏移量从用户所需数据中得到,所需数据将从顺序存储介质中被读取。操作310估计介质偏移量,它试图估计介质上数据段首部的位置。操作312根据估计介质偏移量定位数据段,并估算数据段的首部。操作314确定特定数据偏移量是否包含在定位的数据段中。如果不在,一个新的介质偏移量根据前一个估计数据偏移量估计,进程继续操作312,迭代定位特定介质偏移量。如果特定的数据偏移量被定位,操作318从定位的数据段中检索数据。进程在操作320结束。
图4示出了在本发明实施例的流程图,描述在顺序存储介质上存储会话数据的操作。操作400初始化存储进程。在操作402中,会话数据的数据流通过服务器(或用户),从数据源用户(或产生者)接收到缓存。数据源用户可以是任何应用程序或系统服务,它们在估计或不估计总会话数据初始长度的情况下,发送数据存储到顺序存取存储介质上。服务器代表一个进程或服务,将一个或多个数据源的数据汇集到缓存,并在介质上产生记录。
“会话”是指将一组数据记录到顺序存储介质上的完整进程。数据源在每个会话中产生一个或多个“写”操作。写操作产生的会话数据汇集在一个或多个缓存中,直到缓存溢出。“溢出”操作使缓存数据从缓存“溢出”,并记录到介质上。溢出操作可能由数据源用户或服务器自身产生(例如:自动溢出)。典型地,超时条件或其它事件作为服务器自动溢出的触发器,溢出数据由数据段边界定义。
在操作404中,会话数据被分配成数据段。在本发明一项实施例中,分配开始根据传统的数据段长度(如64KB),为预设排列间隔(如1KB)的倍数。但是,分配到最后一个数据段的会话数据,可能不会填满整个传统数据段的长度。这样,顺序中的最后一个数据段需要填充符。
操作406选择顺序中第一个数据段为当前数据段来操作。操作408估算当前数据段的数据区,确定按预设排列间隔排列的会话数据是否与标志匹配。应理解数据段首部长度也应该在估算中考虑。例如,如果数据段为40字节,预设排列间隔为1024字节,那么第一次估算为当前数据段的数据区中是986字节,下一个估算为其后1024字节的间隔,直到数据段结束。
如果按预设排列间隔检测到的会话数据与标志匹配,操作410会将进程转到操作412。如果没有检测到匹配,进程继续到操作414。操作412通过在匹配位置终止当前数据段,有效地将当前数据段分成两个数据段。数据段中的其余数据被分成新的数据段,分配为顺序中的下一个数据段。这一进程保证,不存在按预设排列间隔排列并与标志匹配会话数据。操作413向数据段中插入填充符,保证数据段以预设排列间隔结束,并以预设排列间隔开始下一个数据段的首部。操作416以首部数据结构输入当前数据段的首部信息。操作418将当前数据段,包括首部、数据区、和可选的校验和以及任何所需的填充区,记录到顺序存取存储介质上。
如果还有附加的数据段需要处理,操作422将进程转到操作426,它检索下一个数据段,进程在其余数据段中重复步骤。如果没有附加的数据段需要处理,操作424终止存储进程。最后一个数据段不必像前面的数据段一样,具有相同的长度,只需是预设排列间隔的几倍。这样,最后一个数据段的会话数据被记录在介质上,数据段(如果有的话,包括校验和域)被填充,按预设排列间隔排列在数据段的尾部。
图5A和图5B示出了本发明实施例的流程图,描述在顺序存取存储介质上按特定数据偏移量检索数据的操作。操作500初始化检索进程。操作502从用户接收的特定数据偏移量Od和所需要的长度Ld。检索进程的一个目的是定位介质偏移量Oi,到包含数据的在数据偏移量Od的数据段。
检索进程依靠存储在磁带中数据的各种已知的和预测的参数。参数可以存储在介质上(也就是在线参数)并且/或者存储在系统内。参数“A”代表段中大约的或平均的数据区长度。在本发明的实施例中,参数A代表由存储设备或操作系统所写入的,或写入介质中的统计平均数据段长度。在本发明的可选实施例中,参数A代表初始的缺省数据区长度,是特别根据传统数据区长度而定的。参数“H”代表固定长度首部的长度,在优选实施例中为40字节。参数“O0”代表介质上第一个数据段的开始介质偏移量。参数“P”代表每个数据段中大约的或平均的填充区长度,并且可以以参数A相似的方式初始定义。P合理的初始值是零。在优选实施例中,参数A和P在每次迭代后刷新,以提高估计的精度。参数m代表预设的排列间隔,在本发明的实施例中是1KB。
O0与Od之间的数据段编号可以被估计为N=(Od/A),其中“/”操作代表整除(也就是Od/A得到商的整数部分)。操作504确定初始介质偏移量的估计值O1,其中O1=O0+N*(A+H+P),其中A+H+P代表估计的数据段长度,“*”操作代表乘。如果数据段校验和包含在数据段中,校验和域的长度也应包含在估计数据段长度中。在操作506中,Ok被设为等于O1,操作508通过设置Ok=Ok-(Okmod m),排列Ok到m边界(也就是预设排列间隔),其中“=”代表普通赋值操作。“mod”操作确定Ok被m除的余数。操作508设置Ok到预设排列间隔,等于或超前一个估计介质偏移量Ok。
在操作510中,在操作508中确定的从Ok开始的顺序介质数据的一个窗口,被从顺序存储介质中检索到缓存内。在本发明一项实施例中,窗口长度(“window_length”)为100KB长,虽然其它窗口长度用在可选实施例中。操作512在预设边界间隔内顺序扫描缓存,直到以介质偏移量Ok定位标志,或超出窗口。如果标志没有被发现,操作514将进程转到操作526,操作526从介质Ok+window_length检索一个新的数据窗口到缓存中。这一循环重复,直到标志定位在操作514中。意外进程的存在是为了处理,第一个估计到达介质最后一个数据段的情况,在此情况下,根据操作514,首部永远不会在循环中找到。意外进程产生一个需要处理的错误,或再计算一个具有较小介质偏移量的第一估计,并继续到操作508。
定位一个标志后(从而第i数据段的首部),操作516检索第i数据段的数据偏移量Oi和长度Li。操作518通过使用条件Oi<=Od<Oi+Li,判断第i数据段是否包含特定数据偏移量Od。如果操作518的条件为真(也就是第i数据段包括特定数据偏移量Oi),进程通过连接符(A)继续到图5B的操作528,在操作528中,所需数据定位在等于Ok’+H+(Od-Oi)的介质偏移量,并且返回给用户。进程继续通过连接符(D)来结束进程。
如果操作518的条件为假,那么操作520通过使用条件Od<Oi,确定所需数据偏移量Od是否定位在第i数据段前(也就是在介质上数据段的较低编号)。如果是,进程继续通过连接符(B)到操作530,操作530使用第i数据段首部的数据,各自刷新参数A和P。在本发明一项实施例中,从第i数据段首部中的已知数据长度和填充符长度,与参数A和P各自平均。然后平均值适当分配给A和P。在本发明的可选实施例中,可以用其它刷新技术刷新参数A和P。
使用刷新的A和P的值,操作532以Ok=Ok’-((Oi-Od)/(A+H+P))*(A+H+P)确定新的介质偏移量估计,其中“/”操作代表整除。然后进程继续通过连接符(E)到操作508,在新的估计附近查找适当的数据段。在本发明的可选实施例中,前段数据长度域包括在首部中,中间操作插入到操作532前,估算与数据偏移量的值相联系的,首部中前段数据长度的值,以确定特定数据偏移量Od是否包含在前段数据段中。
如果操作520中的条件为假,操作522通过使用条件Od>=Oi+Li,确定所需数据段偏移量是否定位在第i数据段后。如果是这样,进程继续通过连接符(C)到操作534,刷新参数A和P。通过使用A和P的刷新值,操作536以Ok=Ok’+Li-((Od-Oi-Li)/(A+H+P))*(A+H+P)确定一个新的介质偏移量估计,其中“/”操作代表整除。然后进程通过连接符(E)到操作508,在新的估计附近查找合适的数据段。如果操作522为假,进程继续到操作524来结束进程,特别是提交一个错误条件,其中特定数据偏移量Od定位失效。
本发明各种实施例的逻辑操作以如下方式执行:(1)作为计算系统中运行的计算机执行步骤序列;和/或(2)作为计算机系统中相互连接的机器模块。指令序列根据计算机系统应用本发明的性能来选择。于是,在此描述的组成本发明实施例的逻辑操作,可以选择地涉及到操作、步骤或模块。
上述特点、例子和数据提供了一个完整的生产描述,使用了本发明的组成部分。由于本发明的很多实施例,可以不必从本发明的思想和领域分离出来而实现,本发明存在于后面附加的权利要求书中。