有序数据的记录方法和装置、有序数据的访问方法和装置的制作方法

文档序号:6433617阅读:115来源:国知局

专利名称::有序数据的记录方法和装置、有序数据的访问方法和装置的制作方法
技术领域
:本申请涉及计算机数据存储
技术领域
,特别是涉及一种有序数据的记录方法和装置,一种有序数据的访问方法和装置。
背景技术
:为了减少网络流量,提高页面的访问速度,在线应用程序往往不能在一页中显示全部内容,而是将全部内容按照一定规则分成多页进行显示,每页显示一定数目的记录。这就要求用户通过分页的方式向服务器发起页面访问请求,由服务器根据页面访问请求中的页码,每次分别从后台数据库中获取相应的记录数据并显示出来。假设服务器后台数据库中有ID为1、2、3、4、5、6、7、8、9.....100共100条记录存在磁盘中,假设分页的大小为10,即每页显示10条记录。如果当前用户请求第2页的内容,则表示用户需要的数据是ID从11到20的记录数据。在接收到上述情景下的页面访问请求时,现有的服务器通常首先将全部的100条记录从后台的磁盘读取至内存,然后从内存筛选出ID从11到20的记录数据。但是,除了ID从11到20的10条记录数据外,其它90条记录数据都是冗余读取的;从磁盘的角度而言,所述冗余读取无疑增加了磁盘的10(输入输出,InputOutput)操作,降低了后台的IO性能,导致消耗了过多的读取时间,从而增加了页面访问请求的处理时间;从内存的角度而言,由于内存的总大小是有限的,所述冗余读取会占用大量的内存,在分页总数过大时,甚至会出现内存不足的情况,而内存不足容易引发磁盘读取故障等一系列问题,从而降低了页面访问请求的处理准确率。总之,需要本领域技术人员迫切解决的一个技术问题就是如何能够提高页面访问请求的处理效率和处理准确率。
发明内容本申请所要解决的技术问题是,提供一种有序数据的记录方法和装置,能够在磁盘文件中将有序数据按块方式进行记录,其中,每个块用于记录相应有序数据的区间和记录数目。相应的,本申请还提供了一种有序数据的访问方法和装置,只需从所述特定分页内容所对应的记录所覆盖的块及相应的区间中读取数据,能够做到尽量避免读取冗余数据,以减少磁盘的IO操作。为了解决上述问题,本申请公开了一种有序数据的记录方法,包括针对有序数据,建立磁盘文件;在该磁盘文件中将所述有序数据按块方式进行记录,所述块的数量为两个或多个,所述记录过程包括在每个块中记录相应有序数据的字段区间和该字段区间内的记录数目,其中,在数据库中所述有序数据按照所述字段进行有序存储。优选的,针对不同的排序指标,在该磁盘文件中将相应有序数据记录至不同的块,其中,所述排序指标为所述有序数据的排序依据。另一方面,本申请还公开了一种有序数据的记录装置,包括建立模块,用于针对有序数据,建立磁盘文件;及记录模块,在该磁盘文件中将所述有序数据按块方式进行记录,所述块的数量为两个或多个,包括块记录子模块,用于在每个块中记录相应有序数据的字段区间和该字段区间内的记录数目,其中,在数据库中所述有序数据按照所述字段进行有序存储。优选的,所述记录模块,具体用于针对不同的排序指标,在该磁盘文件中将相应有序数据记录至不同的块,其中,所述排序指标为所述有序数据的排序依据。另一方面,本申请还公开了一种有序数据的访问方法,包括接收用户针对有序数据的分页访问请求;依据所述分页访问请求,计算相应记录的访问偏移和访问长度;依据所述访问偏移和访问长度,获取所述分页访问请求对应的记录覆盖的块及相应的字段区间;其中,所述块位于所述有序数据的磁盘文件中,在每个块中记录有相应有序数据的字段区间和该字段区间内的记录数目;依据所述覆盖的字段区间,访问数据库中的有序数据。优选的,所述依据所述访问偏移和访问长度,获取所述分页访问请求对应的记录覆盖的字段区间及相应的块的步骤,包括读取该磁盘文件中的块;如果所述访问偏移落在某块的字段区间内,则以该块和相应的字段区间作为所述分页访问请求对应的记录覆盖的第一块及相应的第一字段区间;如果所述访问偏移与所述访问长度的运算结果落在某块的字段区间内,则以该块和相应的字段区间作为所述分页访问请求对应的记录覆盖的第二块及相应的第二字段区间;其中,如果所述有序数据为升序排列,则所述运算结果为所述访问偏移与所述访问长度的和,如果所述有序数据为升序排列,则所述运算结果为所述访问偏移与所述访问长度的差;将所述第一块、第一块与第二块之间的连续块和第二块组成的合并块及相应的字段区间,作为所述分页访问请求对应的记录覆盖的块和相应的字段区间。优选的,所述块具有相应的块编号,所述块编号的顺序与块中所记录字段区间的顺序一致或者相反;所述获取所述分页访问请求对应的记录覆盖的第一块及相应的第一字段区间的步骤,包括从最小的块编号开始,依次读取该磁盘文件中的块,并进行相应的第一覆盖判断,所述第一覆盖判断过程包括判断所述访问偏移是否落在当前块的字段区间内,若是,则以该当前块和相应的字段区间作为所述分页访问请求对应的记录覆盖的第一块及相应的第一字段区间,并结束读取;否则,块编号加1,继续读取该磁盘文件中的块;所述获取所述分页访问请求对应的记录覆盖的第二块及相应的第二字段区间的步骤,包括从最小的块编号开始,依次读取该磁盘文件中的块,并进行相应的第二覆盖判断,所述第二覆盖判断过程包括判断所述访问偏移与所述访问长度的运算结果是否落在当前块的字段区间内,若是,则以该当前块和相应的字段区间作为所述分页访问请求对应的记录覆盖的第二块及相应的第二字段区间;否则,块编号加1,继续读取该磁盘文件中的块;其中,如果所述有序数据为升序排列,则所述运算结果为所述访问偏移与所述访问长度的和,如果所述有序数据为升序排列,则所述运算结果为所述访问偏移与所述访问长度的差。优选的,针对不同的排序指标,在该磁盘文件中对应有不同的块,其中,所述排序指标为所述有序数据的排序依据;所述依据所述访问偏移和访问长度,获取所述分页访问请求对应的记录覆盖的块及相应的字段区间的步骤,包括依据所述分页访问请求,获得相应有序数据的访问排序指标;从该磁盘文件中获取与所述访问排序指标相应的访问块;通过读取所述访问块,获取所述分页访问请求对应的记录覆盖的块及相应的字段区间。优选的,依据所述覆盖的字段区间,访问数据库中的有序数据的步骤,包括判断所述覆盖的字段区间与所述分页访问请求是否匹配,若是,则从数据库中读取与所述覆盖的字段区间相应的记录数据;否则,从数据库中读取与所述覆盖的字段区间相应的记录数据至内存,并在内存中对所读取的记录数据进行筛选,直至筛选结果与所述分页访问请求匹配。另一方面,本申请还公开了一种有序数据的访问装置,包括接口模块,用于接收用户针对有序数据的分页访问请求;计算模块,用于依据所述分页访问请求,计算相应记录的访问偏移和访问长度;覆盖获取模块,用于依据所述访问偏移和访问长度,获取所述分页访问请求对应的记录覆盖的块及相应的字段区间;其中,所述块位于所述有序数据的磁盘文件中,在每个块中记录有相应有序数据的字段区间和该字段区间内的记录数目;及访问模块,用于依据所述覆盖的字段区间,访问数据库中的有序数据与现有技术相比,本申请具有以下优点相对于现有技术中磁盘文件以ID或ID段作为数据库索引,本申请在磁盘文件中记录数据库分页内容的索引,具体而言,在磁盘文件中将有序数据按块(block)方式进行记录,其中,每个block用于记录相应有序数据的字段区间和该字段区间内的记录数目;在实际中,所述字段区间往往为ID字段的区间,这样,在用户请求特定分页内容时,不是类似现有技术从数据库中读取全区间对应的全部内容,而是仅仅从所述特定分页内容所对应的记录所覆盖block对应的字段区间中读取数据,也即,本申请读取的是局部内容,因此,能够做到尽量避免读取冗余数据。从磁盘的角度而言,所述冗余读取的避免能够减少磁盘的IO操作,提高后台的IO性能,降低读取时间,从而能够减少分页访问请求的处理时间。从内存的角度而言,所述冗余读取的避免能够避免内存的大量分配和占用,从而能够避免在分页总数过大时出现的内存不足的情况,以及内存不足引发的磁盘读取故障等一系列问题,从而能够提高页面访问请求的处理准确率。在所述特定分页内容所对应的记录所覆盖的block及相应的字段区间与所述分页访问请求匹配时,本申请可以直接将读取的记录数据显示在前台页面,而无需占用内存,此时,能够最大限度地提高内存性能。图1是本申请一种有序数据的记录方法实施例的流程图;图2是本申请一种B+树的存储结构示意图;图3是本申请一种有序数据的记录装置实施例的结构图;图4是本申请一种有序数据的访问方法实施例的流程图;图5是本申请一种有序数据的访问装置实施例的结构图。具体实施例方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。为使本领域技术人员更好地理解本申请,首先简单介绍服务器后台数据库中有序数据的存储方式。假设服务器后台数据库中有ID为1、2、3、4、5、6、7、8、9、...、100共100条记录,通常会使用日期对这100条记录进行倒序排列,经过排序后的100条记录称为有序数据,这些有序数据通常以文件的形式存储在磁盘中,如Google的Bigtable数据库中采用SSTable文件来记录有序数据。目前,服务器后台数据库通常使用2层的B+树存储有序数据,B+树具有如下特性1、所有关键字(上例中的ID)都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是升序排列的;2、不可能在非叶子结点命中;3、非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层。依据B+树的上述特性,磁盘文件记录的内容可以包括根数据和叶子数据,其中,根数据用于存储每个叶子节点的最大ID和最小ID,以及每个叶子节点在磁盘文件中的偏移位置。其中,叶子数据用于存储升序排列的ID。上述磁盘文件能够实现给出一个任意ID可定位到叶子节点,然后将叶子节点的记录数据读取到内存,筛选出满足用户需求的记录数据的方案。通常,每张数据库的表有多个这样的磁盘文件,每次读取记录的时候从最新的磁盘文件开始按上面的方法读取,如果读不到,则读取次新的磁盘文件。这里,最新和次新主要依据磁盘文件的更新时间来定义和衡量。当读取一段数据,比如IDl到ID3的数据时,这段数据有可能落在磁盘文件1、磁盘文件2和磁盘文件3中,此时,还应把这3个磁盘文件各自的读取结果做一次多路归才能得到最终的读取结果。综上所述,现有技术中磁盘文件的结构只能根据ID或ID段来进行数据库的查询读取,而无法根据页码来进行数据库的查询读取。因为现有技术中磁盘文件的结构只能定位到某个ID,而无法定位到某个记录,所以现有技术中必须首先根据ID或ID段将所有数据都查询读取出来,然后在内存中进行分页。对应上例,如果用户请求第2页的内容,现有技术查询读取的是全部内容[1,100];实际上,用户所要访问的任何一个分页内容所对应的记录只在一个范围内,例如第2页的内容所对应的记录只在[11,20]范围内。本申请实施例的核心构思之一在于,不是类似现有技术中磁盘文件记录ID或ID段作为访问数据库全部内容的索引,而是在磁盘文件中记录数据库分页内容的索引,具体而言,在磁盘文件中将有序数据按块(block)方式进行记录,其中,每个block用于记录相应有序数据的字段区间和该字段区间内的记录数目。在实际中,所述字段区间往往为ID字段的区间,这样,在用户请求特定分页内容时,可以首先通过读取相应磁盘文件中的block,获取所述特定分页内容所对应的记录所覆盖的block及相应的字段区间,然后从所述覆盖block对应的字段区间中读取数据。因此,相对于从数据库中读取全区间对应的全部内容的现有技术,本申请只需从所述特定分页内容所对应的记录所覆盖block对应的字段区间中读取数据,能够做到尽量避免读取冗余数据,以减少磁盘的10操作。参照图1,其示出了本申请一种有序数据的记录方法实施例的流程图,具体可以包括步骤101、针对有序数据,建立磁盘文件;步骤102、在该磁盘文件中将所述有序数据按块方式进行记录,所述块的数量为两个或多个,所述记录过程可以包括步骤121、在每个块中记录相应有序数据的字段区间和该字段区间内的记录数目,其中,在数据库中所述有序数据按照所述字段进行有序存储。作为数据库中按照所述字段进行有序存储的数据记录,在实际中,所述有序数据可以应用于在线应用程序等各种需要访问有序数据的程序。在线应用程序主要指带网络连接或需要网络连接才能使用的程序,其可以是B/S(浏览器/服务器,Browser/Server)结构,如网络邮箱、网络博客、网络微博、网络论坛、即时通讯、电子商务网站等需要浏览器支持的程序。以下主要以网络邮箱作为应用场景的示例,实际上,本申请对具体的在线应用程序不加以限制,其它应用场景请相互参照即可。参照表1,其示出了目前网络邮箱中常用的数据表结构及记录方式。表I权利要求1.一种有序数据的记录方法,其特征在于,包括针对有序数据,建立磁盘文件;在该磁盘文件中将所述有序数据按块方式进行记录,所述块的数量为两个或多个,所述记录过程包括在每个块中记录相应有序数据的字段区间和该字段区间内的记录数目,其中,在数据库中所述有序数据按照所述字段进行有序存储。2.如权利要求1所述的方法,其特征在于,针对不同的排序指标,在该磁盘文件中将相应有序数据记录至不同的块,其中,所述排序指标为所述有序数据的排序依据。3.一种有序数据的记录装置,其特征在于,包括建立模块,用于针对有序数据,建立磁盘文件;及记录模块,在该磁盘文件中将所述有序数据按块方式进行记录,所述块的数量为两个或多个,包括块记录子模块,用于在每个块中记录相应有序数据的字段区间和该字段区间内的记录数目,其中,在数据库中所述有序数据按照所述字段进行有序存储。4.如权利要求3所述的装置,其特征在于,所述记录模块,具体用于针对不同的排序指标,在该磁盘文件中将相应有序数据记录至不同的块,其中,所述排序指标为所述有序数据的排序依据。5.一种有序数据的访问方法,其特征在于,包括接收用户针对有序数据的分页访问请求;依据所述分页访问请求,计算相应记录的访问偏移和访问长度;依据所述访问偏移和访问长度,获取所述分页访问请求对应的记录覆盖的块及相应的字段区间;其中,所述块位于所述有序数据的磁盘文件中,在每个块中记录有相应有序数据的字段区间和该字段区间内的记录数目;依据所述覆盖的字段区间,访问数据库中的有序数据。6.如权利要求5所述的方法,其特征在于,所述依据所述访问偏移和访问长度,获取所述分页访问请求对应的记录覆盖的字段区间及相应的块的步骤,包括读取该磁盘文件中的块;如果所述访问偏移落在某块的字段区间内,则以该块和相应的字段区间作为所述分页访问请求对应的记录覆盖的第一块及相应的第一字段区间;如果所述访问偏移与所述访问长度的运算结果落在某块的字段区间内,则以该块和相应的字段区间作为所述分页访问请求对应的记录覆盖的第二块及相应的第二字段区间;其中,如果所述有序数据为升序排列,则所述运算结果为所述访问偏移与所述访问长度的和,如果所述有序数据为升序排列,则所述运算结果为所述访问偏移与所述访问长度的差;将所述第一块、第一块与第二块之间的连续块和第二块组成的合并块及相应的字段区间,作为所述分页访问请求对应的记录覆盖的块和相应的字段区间。7.如权利要求6所述的方法,其特征在于,所述块具有相应的块编号,所述块编号的顺序与块中所记录字段区间的顺序一致或者相反;所述获取所述分页访问请求对应的记录覆盖的第一块及相应的第一字段区间的步骤,包括从最小的块编号开始,依次读取该磁盘文件中的块,并进行相应的第一覆盖判断,所述第一覆盖判断过程包括判断所述访问偏移是否落在当前块的字段区间内,若是,则以该当前块和相应的字段区间作为所述分页访问请求对应的记录覆盖的第一块及相应的第一字段区间,并结束读取;否则,块编号加1,继续读取该磁盘文件中的块;所述获取所述分页访问请求对应的记录覆盖的第二块及相应的第二字段区间的步骤,包括从最小的块编号开始,依次读取该磁盘文件中的块,并进行相应的第二覆盖判断,所述第二覆盖判断过程包括判断所述访问偏移与所述访问长度的运算结果是否落在当前块的字段区间内,若是,则以该当前块和相应的字段区间作为所述分页访问请求对应的记录覆盖的第二块及相应的第二字段区间;否则,块编号加1,继续读取该磁盘文件中的块;其中,如果所述有序数据为升序排列,则所述运算结果为所述访问偏移与所述访问长度的和,如果所述有序数据为升序排列,则所述运算结果为所述访问偏移与所述访问长度的差。8.如权利要求5所述的方法,其特征在于,针对不同的排序指标,在该磁盘文件中对应有不同的块,其中,所述排序指标为所述有序数据的排序依据;所述依据所述访问偏移和访问长度,获取所述分页访问请求对应的记录覆盖的块及相应的字段区间的步骤,包括依据所述分页访问请求,获得相应有序数据的访问排序指标;从该磁盘文件中获取与所述访问排序指标相应的访问块;通过读取所述访问块,获取所述分页访问请求对应的记录覆盖的块及相应的字段区间。9.如权利要求5所述的方法,其特征在于,依据所述覆盖的字段区间,访问数据库中的有序数据的步骤,包括判断所述覆盖的字段区间与所述分页访问请求是否匹配,若是,则从数据库中读取与所述覆盖的字段区间相应的记录数据;否则,从数据库中读取与所述覆盖的字段区间相应的记录数据至内存,并在内存中对所读取的记录数据进行筛选,直至筛选结果与所述分页访问请求匹配。10.一种有序数据的访问装置,其特征在于,包括接口模块,用于接收用户针对有序数据的分页访问请求;计算模块,用于依据所述分页访问请求,计算相应记录的访问偏移和访问长度;覆盖获取模块,用于依据所述访问偏移和访问长度,获取所述分页访问请求对应的记录覆盖的块及相应的字段区间;其中,所述块位于所述有序数据的磁盘文件中,在每个块中记录有相应有序数据的字段区间和该字段区间内的记录数目;及访问模块,用于依据所述覆盖的字段区间,访问数据库中的有序数据。全文摘要本申请提供了一种有序数据的记录方法和装置,一种有序数据的访问方法和装置,其中的记录方法具体包括针对有序数据,建立磁盘文件;在该磁盘文件中将所述有序数据按块方式进行记录,所述块的数量为两个或多个,所述记录过程包括在每个块中记录相应有序数据的字段区间和该字段区间内的记录数目,其中,在数据库中所述有序数据按照所述字段进行有序存储。本申请只需从所述特定分页内容所对应的记录所覆盖的块及相应的区间中读取数据,能够做到尽量避免读取冗余数据,以减少磁盘的IO操作。文档编号G06F12/06GK103019951SQ201110280428公开日2013年4月3日申请日期2011年9月20日优先权日2011年9月20日发明者佘智勇申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1