掌桥专利:专业的专利平台
掌桥专利
首页

数据处理方法、装置和电子设备

文献发布时间:2023-06-19 11:32:36


数据处理方法、装置和电子设备

技术领域

本发明涉及数据交互技术领域,尤其是涉及一种数据处理方法、装置和电子设备。

背景技术

在TGT网关中,将对象存储映射为块存储,对外提供块存储服务。相关技术中,通过TGT将对象存储映射为块存储后,客户端访问数据的方式是按照数据偏移和数据长度来请求访问数据(例如,读写数据)的,而后端采用对象存储,每个对象都是一个固定大小的块,每次客户端发送访问数据的请求在后端都会转化为HTTP请求,通过该HTTP请求向对象存储中请求数据,但是每个访问数据的请求都通过HTTP协议进行转化,会造成数据访问时延增加,访问速度下降。

发明内容

本发明的目的在于提供一种数据处理方法、装置和电子设备,以提高数据访问速度。

第一方面,本发明提供了一种数据处理方法,该方法包括:如果接收到数据访问请求,确定该数据访问请求需要访问的目标对象,以及该目标对象所属的目标链表;基于目标链表查询预设的内存缓存中是否存在目标对象;其中,该内存缓存中包含有多个链表;每个链表包含至少一个对象,该对象用于存储指定数量的数据;如果内存缓存中存在目标对象,基于该数据访问请求访问内存缓存中的目标对象。

在可选的实施方式中,如果链表包括多个对象,多个对象按照最后一次访问时间的先后顺序进行排序存储;当链表中对象的数量达到预设的数量阈值后,删除最后一次访问时间最早的对象。

在可选的实施方式中,上述数据访问请求中携带有访问起始位置和访问长度;上述如果接收到数据访问请求,确定数据访问请求需要访问的目标对象,以及该目标对象所属的目标链表的步骤,包括:如果接收到数据访问请求,从该数据访问请求中提取访问起始位置和访问长度;根据访问起始位置、访问长度和预设的设备标识,确定待访问的目标对象的对象标识;针对目标对象的对象标识进行哈希运算,得到哈希值;该哈希值表示目标对象所属链表的链表标识;基于该链表标识,确定目标对象所述的目标链表。

在可选的实施方式中,上述数据访问请求包括数据读取请求,该数据读取请求中携带有读取起始位置和读取长度;该内存缓存包括写缓存和读缓存;上述基于目标链表查询预设的内存缓存中是否存在目标对象的步骤,包括:基于读取起始位置和读取长度,确定目标对象的对象标识;在读缓存的目标链表中,查询是否存在对象标识对应的目标对象;如果内存缓存中存在目标对象,基于数据访问请求访问内存缓存中的目标对象的步骤,包括:如果读缓存中存在目标对象,基于写缓存中保存的对象,按照读取起始位置和读取长度对目标对象进行数据读取处理。

在可选的实施方式中,上述方法还包括:如果读缓存中不存在目标对象,从预设的对象存储中读取目标对象;其中,该对象存储中包含有多个对象,每个对象中均存储有预先保存的指定数据。

在可选的实施方式中,上述基于写缓存中保存的对象,按照读取起始位置和读取长度对目标对象进行数据读取处理的步骤,包括:查询写缓存中是否存在目标对象;如果写缓存中存在目标对象,判断该写缓存中的目标对象所包含的数据是否均为脏数据;如果均为脏数据,从写缓存中读取目标对象;如果不均为脏数据,分别从对象存储中和写缓存中读取目标对象,合并读取的目标对象所包含的数据;其中,该对象存储中包含有多个对象,每个对象中均存储有预先保存的指定数据;如果写缓存中不存在目标对象,从对象存储中读取目标对象。

在可选的实施方式中,上述从对象存储中读取目标对象的步骤之后,该方法还包括:从对象存储中读取目标对象后续的指定数量的对象;将指定数量的对象缓存至读缓存中。

在可选的实施方式中,上述将指定数量的对象缓存至读缓存中的步骤,包括:从读缓存中,确定待加载数据的指定数量的空对象;将从对象存储中读取的指定数量的对象,保存至空对象。

在可选的实施方式中,上述方法还包括:判断读缓存中保存指定数量的对象的目标链表中,最尾端的对象在指定时间内是否未被读取;如果未被读取,从读缓存中删除最尾端的所述对象。

在可选的实施方式中,上述数据访问请求包括数据写入请求,该数据写入请求中携带有针对目标对象的待写入数据、写入起始位置和写入长度;该内存缓存包括写缓存和读缓存;上述基于目标链表查询预设的内存缓存中是否存在目标对象的步骤,包括:基于写入起始位置和写入长度,确定目标对象的对象标识;在写缓存的目标链表中,查询是否存在对象标识对应的目标对象;如果内存缓存中存在目标对象,基于数据访问请求访问内存缓存中的目标对象的步骤,包括:如果写缓存中存在目标对象,将待写入数据与写缓存中的目标对象所包含的数据进行合并,将数据合并后的目标对象写入写缓存。

在可选的实施方式中,上述方法还包括:如果写缓存中不存在目标对象,将待写入数据写入写缓存的空对象中。

在可选的实施方式中,上述将待写入数据与写缓存中的目标对象所包含的数据进行合并的步骤,包括:将写缓存中的目标对象中待写入数据对应位置的数据,更新为待写入数据。

在可选的实施方式中,上述方法还包括:针对写缓存中的每个链表,从当前链表的最后一个对象开始,判断当前对象所包含的数据是否均为脏数据;如果均为脏数据,将当前对象上传至对象存储;其中,该对象存储中包含有多个对象,每个对象中均存储有预先保存的指定数据;如果不均为脏数据,从对象存储中请求当前对象,合并请求的当前对象的数据与写缓存中的当前对象的数据,将数据合并后的当前对象上述至对象存储。

在可选的实施方式中,上述方法还包括:判断读缓存中是否包含有当前上传至对象存储的指定对象;如果包含有指定对象,从读缓存中删除该指定对象;如果未包含有指定对象,从写缓存中删除指定对象。

第二方面,本发明提供了一种数据处理装置,该装置包括:请求接收模块,用于如果接收到数据访问请求,确定数据访问请求需要访问的目标对象,以及目标对象所属的目标链表;对象查询模块,用于基于目标链表查询预设的内存缓存中是否存在目标对象;其中,该内存缓存中包含有多个链表;每个链表包含至少一个对象,该对象用于存储指定数量的数据;数据处理模块,用于如果内存缓存中存在目标对象,基于数据访问请求访问内存缓存中的目标对象。

第三方面,本发明提供了一种电子设备,该电子设备包括处理器和存储器,该存储器存储有能够被处理器执行的机器可执行指令,该处理器执行机器可执行指令以实现前述实施方式任一项所述的数据处理方法。

第四方面,本发明提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,该机器可执行指令促使处理器实现前述实施方式任一项所述的数据处理方法。

本发明实施例带来了以下有益效果:

本发明提供的一种数据处理方法、装置和电子设备,如果接收到数据访问请求,确定该数据访问请求需要访问的目标对象,以及该目标对象所属的目标链表;进而基于目标链表查询预设的内存缓存中是否存在目标对象;如果内存缓存中存在目标对象,基于该数据访问请求访问内存缓存中的目标对象。该方式中,内存缓存中通过链表的方式预先存储多个对象的数据,在访问目标对象的数据时,如果内存缓存中存在目标对象,直接访问内存缓存中的目标对象,由于访问内存缓存中的对象无需将数据访问请求转换为HTTP请求来访问对象,从而减少了数据访问的时延,提升了数据访问速度。

本发明的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本发明的上述技术即可得知。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施方式,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种数据处理方法的流程图;

图2为本发明实施例提供的另一种数据处理方法的流程图;

图3为本发明实施例提供的一种内存缓存的结构示意图;

图4为本发明实施例提供的另一种数据处理方法的流程图;

图5为本发明实施例提供的另一种数据处理方法的流程图;

图6为本发明实施例提供的一种数据处理装置的结构示意图;

图7为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在TGT(Linux SCSI target framework,SCSI target框架)网关中,为了降低成本和方便存储,将对象存储映射为块存储,对外提供块存储服务,其中,块存储为一种块级别的数据存储方式,通常用于云环境中;对象存储是一种非结构化数据存储方式,通常需要使用HTTP(Hyper Text Transfer Protocol,超文本传输协议)接口访问该对象。具体地,为了将对象存储映射为块存储,需要把整个块设备按照固定大小的块进行切分,每个块对应一个对象。

相关技术中,通过TGT将对象存储映射为块存储后,客户端访问数据的方式是按照数据偏移和数据长度来请求访问数据(例如读写数据)的,而后端采用对象存储,由于访问对象存储服务需要通过HTTP接口,因而每次客户端发送访问数据的请求在后端都会转化为HTTP请求,通过该HTTP请求访问对象存储中的对象,但是每个访问数据的请求都通过HTTP协议进行转化,会造成数据访问时延增加,访问速度下降。

基于上述问题,本发明实施例提供了一种数据处理方法、装置和电子设备,该技术可以应用对象存储映射为块存储后的数据访问场景中,尤其是数据读取、数据写入的场景中。为了便于对本发明实施例进行理解,首先对本发明实施例所公开的一种数据处理方法进行详细介绍,如图1所示,该方法包括如下步骤:

步骤S102,如果接收到数据访问请求,确定该数据访问请求需要访问的目标对象,以及该目标对象所属的目标链表。

上述数据访问请求可以是用户通过终端设备发送的,该终端设备可以是移动终端(例如,手机、平板电脑等),也可以是计算机。上述数据访问请求可以是读取数据的请求,也可以是写入数据或者修改数据的请求等。在具体实现时,上述数据访问请求中通常携带有访问参数,该访问参数可以包括访问起始位置和访问长度等,通过该访问参数可以确定出需要访问的目标对象,然后通过该目标对象和该目标对象对应的块设备,确定出目标对象所属的目标链表,该目标对象对应的块设备也即是存储目标对象对应的块数据的设备。

步骤S104,基于目标链表查询预设的内存缓存中是否存在目标对象;其中,该内存缓存中包含有多个链表;每个链表包含至少一个对象,该对象用于存储指定数量的数据。

上述内存缓存可以是预设的高速缓冲器存储器cache,也可以是其他缓存器,具体根据用户需求进行设定。该内存缓存用于缓存对象中的数据,该内存缓存中包含有多个链表,每个链表包含至少一个对象,每个对象用于存储指定数据量的数据,该指定数量可以根据用户需求设定,例如,1000M或者500M等;该内存缓存中不一定每个对象中都保存有数据,可以存在空对象(也即是没有数据的对象),该空对象可以根据数据访问请求或者预读策略等进行填充。

在具体实现时,在内存缓存中查询目标对象时,可以根据目标对象的对象标识,在内存缓存的目标链表中进行查找;该对象标识可以根据数据访问请求中携带的访问参数和目标对象对应的块设备的设备标识进行计算得到,具体的计算方式可以由用户进行任意设置。

步骤S106,如果内存缓存中存在目标对象,基于该数据访问请求访问内存缓存中的目标对象。

如果在内存缓存的目标链表中查询到目标对象,说明内存缓存中存储有该目标对象的数据,进而访问内存缓存中的目标对象,以根据数据访问请求中的访问参数对目标对象中的数据进行读取、修改和写入等操作。在具体实现时,由于访问内存缓存中的目标对象无需将数据访问请求转换为HTTP请求,从而可以减少数据访问的时长。

本发明实施例提供的一种数据处理方法,如果接收到数据访问请求,确定该数据访问请求需要访问的目标对象,以及该目标对象所属的目标链表;进而基于目标链表查询预设的内存缓存中是否存在目标对象;如果内存缓存中存在目标对象,基于该数据访问请求访问内存缓存中的目标对象。该方式中,内存缓存中通过链表的方式预先存储多个对象的数据,在访问目标对象的数据时,如果内存缓存中存在目标对象,直接访问内存缓存中的目标对象,由于访问内存缓存中的对象无需将数据访问请求转换为HTTP请求来访问对象,从而减少了数据访问的时延,提升了数据访问速度。

本发明实施例还提供了另一种数据处理方法,该方法在上述实施例方法的基础上实现;该方法重点描述如果接收到数据访问请求,确定该数据访问请求需要访问的目标对象,以及该目标对象所属的目标链表的具体过程(通过下述步骤S202-S208实现);如图2所示,该方法包括如下步骤:

步骤S202,如果接收到数据访问请求,从该数据访问请求中提取访问起始位置和访问长度。

上述访问起始位置用于指示数据访问请求需要访问的目标对象的起始点对应的位置,访问长度用于需要访问的数据尺寸。

步骤S204,根据访问起始位置、访问长度和预设的设备标识,确定待访问的目标对象的对象标识。

上述预设的设备标识是指存储目标对象对应的数据块的块设备的标识,在具体实现时,每个对象对应的数据块的块设备的设备标识预先保存在指定位置,根据数据访问请求中的访问起始位置和访问长度可以得到数据块的标识,然后再根据数据块的标识和该数据块对应的块设备的设备标识,得到待访问的目标对象的对象标识。具体地,可以对访问起始位置和访问长度进行哈希运算,得到数据块的标识,然后再将数据块的标识与设备标识进行哈希运算,得到目标对象的对象标识。

步骤S206,针对目标对象的对象标识进行哈希运算,得到哈希值;该哈希值表示目标对象所属链表的链表标识。

在具体实现时,对目标对象的对象标识进行哈希运算,得到哈希值,该哈希值即为目标对象所属链表的链表标识,该链表标识唯一对应一个链表,该链表至少包括一个对象。为了便于对本发明实例中的内存缓存进行理解,图3给出了一种内存缓存的结构示意图,图3中的内存缓存包含有n个链表,每个链表都对应有一个链表标识(相当于图3中的key)和至少一个对象(对象相当于图3中的entry,一个entry代表一个对象),每个对象都具有唯一的对象标识;图3中的key1、key2、…、keyn分别代表n个链表对应的链表标识,每个链表中的对象可以按照预设的排序规则进行排序,例如,可以按照使用次数、使用时间等。

在一些实施例中,如果内存缓存的链表中包括多个对象,该多个对象可以按照最后一次访问时间的先后顺序进行排序存储;当该链表中对象的数量达到预设的数量阈值后,删除最后一次访问时间最早的对象,也即是删除链表中的最后一个对象。通过该方式可以管理链表中的对象,使得链表中保存的对象更有价值。

步骤S208,基于链表标识,确定目标对象的目标链表。

步骤S210,基于目标链表查询预设的内存缓存中是否存在目标对象。

在具体实现时,可以根据目标对象的对象标识,在内存缓存的目标链表中查询该对象标识,如果存在该对象标识,也即是内存缓存中存在目标对象;如果不存在该对象标识,也即是内存缓存中不存在目标对象。

步骤S212,如果内存缓存中存在目标对象,基于该数据访问请求访问内存缓存中的目标对象。

上述数据处理方法,可以预先将可能被访问的数据暂存在内存缓存中,如果待访问的数据存在于内存缓存中,直接从内存缓存中访问数据即可,不必每次访问数据都通过HTTP请求数据,降低了数据请求的时延,提升了数据访问速度。

本发明实施例还提供了另一种数据处理方法,该方法在上述实施例方法的基础上实现;该方法重点描述数据访问请求为数据读取请求,内存缓存包括写缓存和读缓存的情况下,基于目标链表查询预设的内存缓存中是否存在目标对象的具体过程(通过下述步骤S404-S406实现),以及如果内存缓存中存在目标对象,基于数据访问请求访问内存缓存中的目标对象的具体过程(通过下述步骤S408实现);如图4所示,该方法包括如下步骤:

步骤S402,如果接收到数据读取请求,确定该数据读取请求需要访问的目标对象,以及该目标对象所属的目标链表;其中,该数据读取请求中携带有读取起始位置和读取长度。

步骤S404,基于读取起始位置和读取长度,确定目标对象的对象标识。

具体地,可以对读取起始位置和读取长度进行哈希运算,得到数据块的标识,然后再将数据块的标识与存储数据块的块设备的设备标识进行哈希运算,得到目标对象的对象标识。

步骤S406,在读缓存的目标链表中,查询是否存在对象标识对应的目标对象;如果是,执行步骤S408,否则,执行步骤S410。

在具体实现时,上述内存缓存包括写缓存和读缓存,该写缓存和读缓存的数据存储结构相同,存储的对象和数据可能不同,例如,写缓存和读缓存的结构均可以为图3所示的结构,也即是读缓存中包含有多个链表,每个链表包含有至少一个对象,每个对象用户存储指定数量的数据,同样地,写缓存中也包含有多个链表。

步骤S408,基于写缓存中保存的对象,按照读取起始位置和读取长度对目标对象进行数据读取处理。

如果在读缓存的目标链表中存在上述对象标识对应的目标对象,需要查看写缓存中是否保存有该目标对象,并根据写缓存中保存的目标对象确定目标对象中的数据是否有被修改过,如果有被修改过,将基于修改后的数据读取目标对象,从而可以读取到准确的目标对象中的数据。在具体实现时,上述步骤S408可以通过下述步骤10-14实现:

步骤10,查询写缓存中是否存在目标对象;如果存在,执行步骤11,否则,执行步骤14。

上述写缓存的对象中保存的数据是用户历史时刻写入的数据,而且写缓存中的每个对象内都保存有脏数据索引,该脏数据索引用于标识对象中的数据是否有被写过,也即是用于指示对象中的哪些数据被修改过。

步骤11,判断写缓存中的目标对象所包含的数据是否均为脏数据;如果均为脏数据,执行步骤12,否则,执行步骤13。

根据写缓存中的目标对象的脏数据索引,可以判定写缓存中的目标对象所包含的数据是否均为脏数据。

步骤12,从写缓存中读取目标对象。

如果写缓存中的目标对象所包含的数据均为脏数据,说明读缓存中的目标对象所包含的数据均被修改过,因而需要从写缓存中读取目标对象,并将目标对象所包含的数据返回给发送数据读取请求的用户。

步骤13,分别从对象存储中和写缓存中读取目标对象,合并读取的目标对象所包含的数据;其中,该对象存储中包含有多个对象,每个对象中均存储有预先保存的指定数据。

如果写缓存中的目标对象所包含的数据不均为脏数据,也即是目标对象所包含的数据中存在不为脏数据的数据,说明读缓存中的目标对象所包含的数据中存在未被修改的数据,因而需要从写缓存中和对象存储中分别读取目标对象,并将读取到的写缓存中的目标对象中的数据与对象存储中读取到的目标对象中的数据进行合并(也即是将对象存储中的目标对象中,写缓存的目标对象中的数据对应的存储位置处的数据,替换为写缓存的目标对象中的数据),并将数据合并后的目标对象返回发送数据读取请求的用户。

上述对象存储中包含有多个对象,每个对象中均存储有预先保存的指定数据,该指定数据为预先划分的数据块中的数据,在具体实现时,为了将对象存储映射为块存储,预先将整个块设备按照固定大小的块进行切分,每个块对应一个对象,这个对象也即是对象存储所包含的对象。其中,写缓存和读缓存中包含有对象存储中的一部分对象。

步骤14,从对象存储中读取目标对象。

如果写缓存中不存在目标对象,需要从对象存储中读取目标对象,并将该目标对象返回给用户。

在一些实施例中,在步骤14之后,需要从对象存储中读取目标对象后续的指定数量的对象;将指定数量的对象缓存至读缓存中。也可以理解为:如果写缓存中不存在目标对象,需要从对象存储中读取目标对象,并预读对象存储中目标对象后续的指定数量的对象,并将读取到的指定数量的对象缓存至读缓存中,以便下次接收到针对指定数量的对象的数据读取请求时,直接从读缓存中读取该对象。上述指定数量可以根据用户需求进行设置,例如,可以设置为3个或者4个等。

在具体实现时,上述将指定数量的对象缓存至读缓存中的方式,可以通过下述步骤20-21实现:

步骤20,从读缓存中,确定待加载数据的指定数量的空对象。

步骤21,将从对象存储中读取的指定数量的对象,保存至空对象。

例如,从对象存储中读取的指定数量的对象为3个,需要从读缓存中确定3个待加载数据的空对象,然后分别将这个3个对象中的数据填充至3个空对象中。在一些实施例中,将数据填充至读缓存的空对象中后,会检测填充后的空对象在指定时间内是被使用(也即是检查是否超时),如果没有被使用过,删除读缓存中的该对象,从而可以避免预读的数据占用过多的内存缓存资源;如果被使用过,会根据使用时间在该对象所属的链表上对该对象位置进行排序。上述指定时间可以根据用户需求设置,可以设置为10s或者15s等。

步骤S410,从预设的对象存储中读取目标对象。

如果在读缓存的目标链表中不存在上述对象标识对应的目标对象,需要从对象存储中读取该目标对象,也即是需要将数据读取请求转换化HTTP请求,然后从对象存储中请求该目标对象,并将该目标对象返回给发送数据读取请求的用户。

在一些实施例中,在步骤S410之后,可以从对象存储中预读目标对象后续的指定数量的对象,将指定数量的对象缓存至读缓存中,以便下次接收到针对指定数量的对象的数据读取请求时,直接从读缓存中读取该对象。

在具体实现时,读缓存中任意一个链表中的多个对象可以按照最后一次访问时间的先后顺序进行排序存储,也即是最后一次访问时间越早的对象,排序越靠后。本发明实施例需要实时的管理读缓存中的对象,也即是实时判断读缓存中保存的指定数量的对象的目标链表中,最尾端的对象在指定时间内是否未被读取;如果未被读取,从读缓存中删除最尾端的对象。

上述数据处理方法,在读取目标对象时,如果读存缓存中存在目标对象,将基于写缓存中保存的对象,对写缓存中的目标对象进行数据读取处理。从而可以减少从对象存储中请求对象的次数,避免了将数据读取请求转换为HTTP请求来读取对象的次数,从而减少了数据读取的时延,提升了数据读取速度。

本发明实施例还提供了另一种数据处理方法,该方法在上述实施例方法的基础上实现;该方法重点描述数据访问请求为数据写入请求的情况下,基于目标链表查询预设的内存缓存中是否存在目标对象的具体过程(通过下述步骤S504-S506实现),以及如果内存缓存中存在目标对象,基于数据访问请求访问内存缓存中的目标对象的具体过程(通过下述步骤S508实现);如图5所示,该方法包括如下步骤:

步骤S502,如果接收到数据写入请求,确定该数据写入请求需要访问的目标对象,以及该目标对象所属的目标链表;其中,该数据写入请求中携带有针对目标对象的待写入数据、写入起始位置和写入长度。

步骤S504,基于写入起始位置和写入长度,确定目标对象的对象标识。

具体地,可以对写入起始位置和写入长度进行哈希运算,得到待访问的数据块的标识,然后再将数据块的标识与存储数据块的块设备的设备标识进行哈希运算,得到目标对象的对象标识。

步骤S506,在写缓存的目标链表中,查询是否存在对象标识对应的目标对象;如果是,执行步骤S508,否则,执行步骤S510。

步骤S508,将待写入数据与写缓存中的目标对象所包含的数据进行合并,将数据合并后的目标对象写入写缓存。

如果在写缓存的目标链表中查询到上述对象标识对应的目标对象,说明历史时刻该目标对象中的数据被修改后,可以直接将数据写入请求中的待写入数据与写缓存中的目标对象所包含的数据进行合并,并将数据合并后的目标对象写入写缓存中。在具体实现时,上述步骤S508可以通过下述步骤30-31实现:

步骤30,将写缓存中的目标对象中待写入数据对应位置的数据,更新为待写入数据。

步骤31,将更新后的目标对象写入写缓存中。

例如,待写入数据的写入起始位置为目标对象的起始位置,写入长度为100M,那么将写缓存中的目标对象中从起始位置开始后的100M数据删除,将待写入数据写入数据删除的位置中,得到更新后的目标对象;然后将更新后的目标对象写入写缓存中。

步骤S510,将待写入数据写入写缓存的空对象中。

如果在写缓存的目标链表中不存在上述对象标识对应的目标对象,需要根据数据写入请求指示的写入参数,将待写入数据填充至写缓存的空对象中,该空对象可以是写缓存中目标链表对应的空对象。

在一些实施例中,还需要对写入写缓存中的对象进行管理,以将写缓存中的数据写入对象存储中,同时处理读缓存中的部分数据,避免读缓存中存在脏数据。具体地,写缓存的管理流程如下:

步骤40,针对写缓存中的每个链表,从当前链表的最后一个对象开始,判断当前对象所包含的数据是否均为脏数据;如果均为脏数据,执行步骤41,如果不均为脏数据,执行步骤42。

步骤41,将当前对象上传至对象存储,执行步骤43。

步骤42,从对象存储中请求当前对象,合并请求的当前对象的数据与写缓存中的当前对象的数据,将数据合并后的当前对象上述至对象存储,执行步骤43。

如果当前对象所包含的数据均为脏数据,说明写缓存中当前对象所包含的数据均被用户修改过,可以直接将写缓存中的当前对象写入对象存储中。如果当前对象所包含的数据不均为脏数据,说明写缓存中只修改了当前对象中的部分数据,因而需要从对象存储中请求该当前对象,并将请求的当前对象的数据与写缓存中的当前对象的数据进行合并(也即是将请求的当前对象中,写缓存的当前对象中的数据对应的存储位置处的数据,替换为写缓存的当前对象中的数据),并将数据合并后的当前对象上传至对象存储。

步骤43,判断读缓存中是否包含有当前上传至对象存储的指定对象;如果包含有该指定对象,执行步骤44,否则,执行步骤45。

步骤44,从读缓存中删除指定对象。

步骤45,从写缓存中删除指定对象。

上述指定对象可以是当前上传至对象存储中的当前对象,也即是当前对象上传至对象存储后,会检测读缓存中是否存在该当前对象,如果存在,说明读缓存中包含的该当前对象的数据已经被修改,也即是读缓存中所包含的该当前对象中的数据已不正确,需要将读缓存中的该当前对象删除;如果不存在,说明在接收到数据读取请求时,会直接从对象存储中读取数据,不会检测写缓存中是都存在该当前对象,因而,为了节省缓存内存控件,需要从写缓存中将该当前对象删除。

上述数据处理方法,在针对目标对象写入数据时,如果写缓存中存在该目标对象,将待写入数据与写缓存中的目标对象所包含的数据进行合并,将数据合并后的目标对象写入写缓存。由于向写缓存中写入数据无需将数据写入请求转换为HTTP请求来写入数据,从而减少了数据写入的时延,提升了数据写入速度;同时,该方式在工程上实现简单,容易维护。

对应于上述方法实施例,本发明实施例提供了一种数据处理装置,如图6所示,该装置包括:

请求接收模块60,用于如果接收到数据访问请求,确定数据访问请求需要访问的目标对象,以及该目标对象所属的目标链表。

对象查询模块61,用于基于目标链表查询预设的内存缓存中是否存在目标对象;其中,该内存缓存中包含有多个链表;每个链表包含至少一个对象,该对象用于存储指定数量的数据。

数据处理模块62,用于如果内存缓存中存在目标对象,基于还数据访问请求访问内存缓存中的目标对象。

上述数据处理装置,如果接收到数据访问请求,确定该数据访问请求需要访问的目标对象,以及该目标对象所属的目标链表;进而基于目标链表查询预设的内存缓存中是否存在目标对象;如果内存缓存中存在目标对象,基于该数据访问请求访问内存缓存中的目标对象。该方式中,内存缓存中通过链表的方式预先存储多个对象的数据,在访问目标对象的数据时,如果内存缓存中存在目标对象,直接访问内存缓存中的目标对象,由于访问内存缓存中的对象无需将数据访问请求转换为HTTP请求来访问对象,从而减少了数据访问的时延,提升了数据访问速度。

具体地,如果链表包括多个对象,多个对象按照最后一次访问时间的先后顺序进行排序存储;当链表中对象的数量达到预设的数量阈值后,删除最后一次访问时间最早的对象。

进一步地,上述数据访问请求中携带有访问起始位置和访问长度;上述请求接收模块60,用于:如果接收到数据访问请求,从该数据访问请求中提取访问起始位置和访问长度;根据访问起始位置、访问长度和预设的设备标识,确定待访问的目标对象的对象标识;针对目标对象的对象标识进行哈希运算,得到哈希值;该哈希值表示目标对象所属链表的链表标识;基于链表标识,确定目标对象的目标链表。

进一步地,上述数据访问请求包括数据读取请求,该数据读取请求中携带有读取起始位置和读取长度;该内存缓存包括写缓存和读缓存;上述对象查询模块61,用于:基于读取起始位置和读取长度,确定目标对象的对象标识;在读缓存的目标链表中,查询是否存在对象标识对应的目标对象;上述数据处理模块62,用于:如果读缓存中存在目标对象,基于写缓存中保存的对象,按照读取起始位置和读取长度对目标对象进行数据读取处理。

进一步地,上述数据处理模块62,还用于:如果读缓存中不存在目标对象,从预设的对象存储中读取目标对象;其中,该对象存储中包含有多个对象,每个对象中均存储有预先保存的指定数据。

具体地,上述数据处理模块62,还用于:查询写缓存中是否存在目标对象;如果写缓存中存在目标对象,判断写缓存中的目标对象所包含的数据是否均为脏数据;如果均为脏数据,从写缓存中读取目标对象;如果不均为脏数据,分别从对象存储中和写缓存中读取目标对象,合并读取的目标对象所包含的数据;其中,该对象存储中包含有多个对象,每个对象中均存储有预先保存的指定数据;如果写缓存中不存在目标对象,从对象存储中读取目标对象。

进一步地,上述装置还包括读取管理模块,用于:从对象存储中读取目标对象之后,从该对象存储中读取目标对象后续的指定数量的对象;将指定数量的对象缓存至读缓存中。

具体地,上述读取管理模块,还用于:从读缓存中,确定待加载数据的指定数量的空对象;将从对象存储中读取的指定数量的对象,保存至空对象。

进一步地,上述读取管理模块,还用于:判断读缓存中保存指定数量的对象的目标链表中,最尾端的对象在指定时间内是否未被读取;如果未被读取,从读缓存中删除最尾端的对象。

在具体实现时,上述数据访问请求包括数据写入请求,该数据写入请求中携带有针对目标对象的待写入数据、写入起始位置和写入长度;该内存缓存包括写缓存和读缓存;上述对象查询模块61,用于:基于写入起始位置和写入长度,确定目标对象的对象标识;在写缓存的目标链表中,查询是否存在对象标识对应的目标对象;上述数据处理模块62,用于:如果写缓存中存在目标对象,将该待写入数据与写缓存中的目标对象所包含的数据进行合并,将数据合并后的目标对象写入写缓存。

进一步地,上述数据处理模块62,还用于:如果写缓存中不存在目标对象,将该待写入数据写入写缓存的空对象中。

进一步地,上述数据处理模块62,还用于:在合并数据时,将写缓存中的目标对象中待写入数据对应位置的数据,更新为待写入数据。

进一步地,上述装置还包括写入管理模块,用于:针对写缓存中的每个链表,从当前链表的最后一个对象开始,判断当前对象所包含的数据是否均为脏数据;如果均为脏数据,将当前对象上传至对象存储;其中,该对象存储中包含有多个对象,每个对象中均存储有预先保存的指定数据;如果不均为脏数据,从对象存储中请求当前对象,合并请求的当前对象的数据与写缓存中的当前对象的数据,将数据合并后的当前对象上述至对象存储。

具体地,上述方法还包括:判断读缓存中是否包含有当前上传至对象存储的指定对象;如果包含有指定对象,从读缓存中删除指定对象;如果未包含有指定对象,从该写缓存中删除指定对象。

本发明实施例所提供的数据处理装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

本发明实施例还提供了一种电子设备,参见图7所示,该电子设备包括处理器101和存储器100,该存储器100存储有能够被处理器101执行的机器可执行指令,该处理器101执行机器可执行指令以实现上述数据处理方法。

进一步地,图7所示的电子设备还包括总线102和通信接口103,处理器101、通信接口103和存储器100通过总线102连接。

其中,存储器100可能包含高速随机存取存储器(RAM,RandomAccessMemory),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

处理器101可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器101中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器101可以是通用处理器,包括中央处理器(CentralProcessingUnit,简称CPU)、网络处理器(NetworkProcessor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器100,处理器101读取存储器100中的信息,结合其硬件完成前述实施例的方法的步骤。

本发明实施例还提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,该机器可执行指令促使处理器实现上述数据处理方法,具体实现可参见方法实施例,在此不再赘述。

本发明实施例所提供的数据处理方法、装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

相关技术
  • 数据处理方法、医学文本数据处理方法、装置及电子设备
  • 由电子设备执行的数据处理方法及装置、电子设备
技术分类

06120112965995