一种数据操作方法及相关装置与流程

文档序号:16134247发布日期:2018-12-01 00:43阅读:128来源:国知局

本发明涉及计算机技术领域,更具体地说,涉及一种数据操作方法、系统、装置及计算机可读存储介质。

背景技术

随着网络技术的发展,数据的安全性越来越重要。目前,很多实际应用中会使用到纠删码技术来保证存储的数据的安全性。纠删码(erasurecoding,ec)是一种数据保护方法,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。

纠删数据池是指存放利用纠删码技术保护的数据的数据池,纠删数据池中,shared上保存有数据的不同片段,读取一个完整的数据,通常是要在k个shared上读取数据,因此对于数据的读取操作来说,需要对该数据涉及的每个shared都执行一次读指令,从而读取数据的延迟时间非常大。

因此,如何降低纠删数据操作的延时,是本领域技术人员需要解决的问题。



技术实现要素:

本发明的目的在于提供一种数据操作方法、系统、装置及计算机可读存储介质,以解决如何降低纠删数据操作的延时的问题。

为实现上述目的,本发明实施例提供了如下技术方案:

一种数据操作方法,包括:

接收数据操作请求;

判断所述数据操作请求是否为数据读取请求;

若是,则判断预设缓存中是否存在所述数据读取请求对应的读取对象;

若是,则将所述预设缓存中的所述读取对象返回。

其中,所述判断预设缓存中是否存在所述数据读取请求对应的读取对象之后,还包括:

若否,则从shared中返回所述读取对象;

更新所述预设缓存。

其中,所述更新所述预设缓存,包括:

判断所述预设缓存中是否存在历史读取对象;其中,所述历史读取对象与所述读取对象的源数据相同;

若是,则将所述历史读取对象更新为所述读取对象。

其中,所述更新所述预设缓存,包括:

判断所述预设缓存中是否存在所述历史读取对象;

若否,则将所述读取请求对应的读取对象从底层纠删数据池中读取至所述预设缓存。

其中,所述将所述读取请求对应的读取对象从底层纠删数据池中读取至所述预设缓存,包括:

判断预设缓存的剩余容量是否大于或等于所述读取对象的大小;

若是,则将所述读取对象从底层纠删数据池中读取至所述预设缓存;

若否,则根据所述读取对象的大小删除所述预设缓存中热度小于预设值的数据;执行所述将所述读取请求对应的读取对象从底层纠删数据池中读取至所述预设缓存的步骤。

其中,所述判断所述数据操作请求是否为数据读取请求之后,还包括:

若否,则判断所述数据操作请求是否为数据修改操作请求,其中所述数据修改操作请求包括write操作请求、truncate操作请求、writefull操作请求、zero操作请求、delete操作请求;

若是,则判断所述数据修改请求对应的数据修改对象是否存在于所述预设缓存;

若是,对所述预设缓存中所述数据修改对象执行所述数据修改操作请求;

利用执行结果更新所述预设缓存中所述数据修改对象。

其中,所述判断所述数据操作请求是否为数据读取请求之后,还包括:

若否,判断所述数据操作请求是否为非纠删条带对齐写操作;

若是,则将所述非纠删条带对齐写操作对应的非纠删条带对齐写操作对象从底层纠删数据池中读取至所述预设缓存;

对所述预设缓存中的非纠删条带对齐写操作对象进行非纠删条带对齐写操作。

本申请还提供了一种数据操作系统,包括:

接收模块,用于接收数据操作请求;

第一判断模块,用于判断所述数据操作请求是否为数据读取请求;

第二判断模块,用于当所述数据操作请求为数据读取请求时,判判断预设缓存中是否存在所述数据读取请求对应的读取对象;

返回模块,用于当所述预设缓存中不存在所述数据读取请求对应的读取对象时,将所述预设缓存中的所述读取对象返回。

本申请还提供了一种数据操作装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如所述数据操作方法的步骤。

本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如所述数据操作方法的步骤。

通过以上方案可知,本发明提供的一种数据操作方法,包括:接收数据操作请求;判断所述数据操作请求是否为数据读取请求;若是,则判断预设缓存中是否存在所述数据读取请求对应的读取对象;若是,则将所述预设缓存中的所述读取对象返回。

由此可见,本申请提供的一种数据操作方法,在接收到数据操作请求后,先判断该操作请求是否为数据读取请求,如果是进一步判断该数据读取请求对应的读取对象是否在预设缓存中,如果在,直接从缓存中将数据读取对象返回至客户端,而无需再从底层shared中多次获取读取对象的部分数据,从而在缓存中读取完整的读取对象可以很大程度上降低数据读取的操作的延时。本申请还提供一种数据操作系统、装置及计算机可读存储介质,同样可以实现上述技术效果。

附图说明

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

图1为本发明实施例公开的一种数据操作方法流程图;

图2为本发明实施例公开的一种具体的数据操作方法流程图;

图3为本发明实施例公开的一种具体的数据操作方法流程图;

图4为本发明实施例公开的一种具体的数据操作方法流程图;

图5为本发明实施例公开的一种数据操作系统结构示意图;

图6为本发明实施例公开的一种数据操作装置结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例公开了一种数据操作方法、系统、装置及计算机可读存储介质,以解决如何降低纠删数据操作的延时的问题。

参见图1,本发明实施例提供的一种数据操作方法,具体包括:

s101,接收数据操作请求。

具体地,主pg所在的osd(object-basedstoragedevice,对象存储系统)首先接收客户端发起的数据操作请求。

需要说明的是,pg全称是placementgroups,它是ceph的逻辑存储单元。在数据存储到ceph时,先打散成一系列对象,再结合基于对象名的哈希操作、复制级别、pg数量,产生目标pg号。本方案中,主pg即是存储纠删数据的pg。

上述数据操作请求限定了数据操作的类型以及数据操作对应的操作对象。其中,数据操作的类型可以包括数据读取操作、数据修改操作、数据的非纠删条带对齐写操作等,对应的操作对象即是所要操作的数据,例如数据读取操作对应的读取对象即是所要读取的数据。

s102,判断所述数据操作请求是否为数据读取请求。

具体地,首先判断当前这个数据操作请求是否是数据读取请求。

s103,若是,则判断预设缓存中是否存在所述数据读取请求对应的读取对象。

需要说明的是,在本方案中,预设设有缓存pgcache,预设缓存中可以缓存一些数据,在进行数据操作时,如果操作对象在缓存中,直接对缓存中的操作对象进行操作即可。

具体地,如果数据操作请求是数据读取请求,那么继续判断该数据读取请求对应的读取对象,也就是所要读取的数据是否在预设缓存中。

s104,若是,则将所述预设缓存中的所述读取对象返回。

具体地,如果数据操作请求时数据读取请求,而且该数据读取请求对应读取对象也存在于预设缓存,则直接从缓存中将数据读取对象返回至客户端,而无需再从底层shared中多次获取读取对象的部分数据。

由此可见,本申请实施例提供的一种数据操作方法,在接收到数据操作请求后,先判断该操作请求是否为数据读取请求,如果是进一步判断该数据读取请求对应的读取对象是否在预设缓存中,如果在,直接从缓存中将数据读取对象返回至客户端,而无需再从底层shared中多次获取读取对象的部分数据,从而在缓存中读取完整的读取对象可以很大程度上降低数据读取的操作的延时。

下面对本申请实施例提供的一种具体的数据操作方法进行介绍,下文描述的一种具体的数据操作方法,主要对上述预设缓存做了进一步的描述与说明,其他内容与上述实施例大致相同,具体可以参考上述实施例,此处不再赘述。

s201,接收数据操作请求。

s202,判断所述数据操作请求是否为数据读取请求。

s203,若是,则判断预设缓存中是否存在所述数据读取请求对应的读取对象。

s204,若是,则将所述预设缓存中的所述读取对象返回。

s205,若否,则从shared中返回所述读取对象。

在本方案中,如果预设缓存中不存在读取对象,则按照现有的数据读取方法,从shared中返回读取对象。

s206,更新所述预设缓存。

需要说明的是,在本方案中当利用现有的数据读取方法返回了读取对象之后,还需要相应的更新预设缓存。

在一种具体的实施方式中,首先判断所述预设缓存中是否存在历史读取对象;其中,所述历史读取对象与所述读取对象的源数据相同。

需要说明的是,读取对象在被读取时会有这样的一种情况,预设缓存中没有与读取对象相同的数据,但是预设缓存中却存在与该读取对象属于同一源数据的历史读取对象,该历史数据对象与该数据对象属于同一源数据,只不过在底层shared中对源数据做的修改和在预设缓存中做的修改不同。

例如,源数据为a,在t1时刻,客户端将源数据a从底层读到预设缓存,并将预设缓存中a做出了修改,变成了a1,而此时,底层shared的数据依然是a,如果客户端想要读取a,则在缓存中无法找到a,需要到shared中读取a,而此时,就需要将缓存中的a1修改为a,从而保证预设缓存中的数据都是最新被操作的数据。

还有另一种情况,源数据为a,在t2时刻,客户端直接对底层源数据a进行修改使a变成a2,而此时,缓存中同步到的数据,还是上一次修改得到的数据a,而如果此时客户端需要读取数据a2,则同样无法在缓存中读取,需要到底层shared读取,并将缓存中的a同步更新为a2。

若是,则将所述历史读取对象更新为所述读取对象。

具体地,如果缓存中存在历史读取对象,则将历史读取对象删除,更新为当前所读取的读取对象。

若否,则将所述读取请求对应的读取对象从底层纠删数据池中读取至所述预设缓存。

具体地,如果缓存中既不存在读取对象,也不存在读取对象对应的历史读取对象,则说明预设缓存中从未缓存或读取对象相关的数据,因此需要从底层的纠删数据池中将读取对象读到缓存,以在下次读取该对象时,直接从缓存中读取。

需要说明的是,由于缓存的容量大小有限,因此可以只将数据热度较高的读取对象缓存至预设缓存,数据热度即是该数据在单位时间内被访问的次数是否足够高,热度的计算可以根据实际情况确定,此处不做具体限定。

在本步骤的一个具体实施方案中,将读取对象缓存至预设缓存之前,还可以做进一步的判断,判断当前读取对象的数据热度是否大于或等于预设阈值,若是,再将读取对象缓存到预设缓存中,若否,则可以不进行此步。

同样由于缓存的容量大小有限,因此在本步骤中,将读取对象缓存至预设缓存中时,预设缓存的剩余容量可能不能够缓存该读取对象。

因此在本步骤的另一个具体实施方式中,首先判断预设缓存的剩余容量是否大于或等于所述读取对象的大小;若是,则将所述读取对象从底层纠删数据池中读取至所述预设缓存;若否,则根据所述读取对象的大小删除所述预设缓存中热度小于预设值的数据;执行所述将所述读取请求对应的读取对象从底层纠删数据池中读取至所述预设缓存的步骤。

下面对本申请实施例提供的一种具体的数据操作方法进行介绍,下文描述的一种具体的数据操作方法与上述任一实施例可以相互参照。

参见图3,本申请实施例提供的一种具体的数据操作方法,具体包括:

s301,接收数据操作请求。

s302,判断所述数据操作请求是否为数据读取请求;若是,则执行s303,若否,则执行s305。

s303,若是,则判断预设缓存中是否存在所述数据读取请求对应的读取对象;若是,则执行s304。

s304,将所述预设缓存中的所述读取对象返回。

s305,判断所述数据操作请求是否为数据修改操作请求,其中所述数据修改操作请求包括write操作请求、truncate操作请求、writefull操作请求、zero操作请求、delete操作请求;若是,则执行s306。

在本方案中,如果数据操作请求不是数据读取请求时,则可以判断该数据操作请求时否为数据的修改操作,其中,数据修改操作包括write操作请求、truncate操作请求、writefull操作请求、zero操作请求、delete操作请求。

write操作请求、writefull操作请求分别是对数据的写操作请求,truncate操作请求、zero操作请求、delete操作请求分别是对数据的删除操作请求,具体的操作方法可以参考现有技术,在本方案中不做具体限定。

s306,若是,则判断所述数据修改请求对应的数据修改对象是否存在于所述预设缓存;若是,则执行s307。

具体地,如果数据操作请求时数据修改请求,那进一步判断操作请求对应的操作对象是否在预设缓存中。

s307,若是,对所述预设缓存中所述数据修改对象执行所述数据修改操作请求。

如果是,则直接对缓存中的操作对象执行数据操作请求对应的操作。

s308,利用执行结果更新所述预设缓存中所述数据修改对象。

对操作对象执行上述的数据修改操作后,会得到一个操作后的结果,利用这个结果更新当前缓存中的操作对象。

下面对本申请实施例提供的一种具体的数据操作方法进行介绍,下文描述的一种具体的数据操作方法与上述任一实施例可以相互参照。

参见图4,本申请实施例提供的一种具体的数据操作方法,具体包括:

s401,接收数据操作请求。

s402,判断所述数据操作请求是否为数据读取请求;若是,则执行s403,若否,则执行s405。

s403,判断预设缓存中是否存在所述数据读取请求对应的读取对象;若是,则执行s404。

s404,将所述预设缓存中的所述读取对象返回。

s405,判断所述数据操作请求是否为非纠删条带对齐写操作;若是则执行s406。

在本方案中,当数据操作请求不是数据读取请求时,则进一步判断数据操作请求是否是非纠删条带对齐写操作。需要说明的是,非纠条带删对齐写操作,在执行写之前,还需要将已经写下去的数据读上来,再和本次需要写的数据一起写下去,也就是说,再写之前,也涉及到一个读操作。

s406,将所述非纠删条带对齐写操作对应的非纠删条带对齐写操作对象从底层纠删数据池中读取至所述预设缓存。

具体地,如果是非纠删条带对齐写操作,则需要将该操作对应的对象读取到预设缓存,再利用缓存完成读取步骤。需要说明的是,关于数据读取的操作,具体可以参考上述实施例,此处不再进行赘述。

s407,对所述预设缓存中的非纠删条带对齐写操作对象进行非纠删条带对齐写操作。

下面对本申请实施例提供的一种数据操作系统进行介绍,下文描述的一种数据操作系统与上文描述的一种数据操作方法可以相互参照。

参见图5,本申请实施例提供的一种数据操作系统,具体包括:

接收模块501,用于接收数据操作请求;

第一判断模块502,用于判断所述数据操作请求是否为数据读取请求;

第二判断模块503,用于当所述数据操作请求为数据读取请求时,判判断预设缓存中是否存在所述数据读取请求对应的读取对象;

返回模块504,用于当所述预设缓存中不存在所述数据读取请求对应的读取对象时,将所述预设缓存中的所述读取对象返回。

本实施例的数据操作系统用于实现前述的数据操作方法,因此数据操作系统中的具体实施方式可见前文中的数据操作方法的实施例部分,例如,接收模块501,第一判断模块502,第二判断模块503,返回模块504,分别用于实现上述数据操作方法中步骤s101,s102,s103和s104,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。

参见图6所示,本申请实施例还公开了一种数据操作装置,包括处理器601和存储器602;其中,所述处理器601执行所述存储器602中保存的计算机程序时实现上述任意一种数据操作方法的实施例所描述的步骤。

进一步的,本实施例中的数据操作装置,还可以包括:

输入接口603,用于获取外界导入的计算机程序,并将获取到的计算机程序保存至所述存储器601中,还可以用于获取外界终端设备传输的各种指令和参数,并传输至处理器601中,以便处理器601利用上述各种指令和参数展开相应的处理。本实施例中,所述输入接口603具体可以包括但不限于usb接口、串行接口、语音输入接口、指纹输入接口、硬盘读取接口等。

输出接口604,用于将处理器601产生的各种数据输出至与其相连的终端设备,以便于与输出接口604相连的其他终端设备能够获取到处理器601产生的各种数据。本实施例中,所述输出接口604具体可以包括但不限于usb接口、串行接口等。

通讯单元605,用于与客户端建立连接,接收数据操作请求。本实施例中,通讯单元605具体可以包括但不限于基于无线通讯技术或有线通讯技术的远程通讯单元。

键盘606,用于获取用户通过实时敲击键帽而输入的各种参数数据或指令。

显示器607,用于对文件夹挂载过程的相关信息进行实时显示,以便于用户及时地了解当前文件夹的挂载情况。

鼠标608,可以用于协助用户输入数据并简化用户的操作。

本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1