一种数据读取方法、装置、介质和计算设备与流程

    专利2022-07-08  72


    本发明的实施方式涉及分布式存储领域,更具体地,本发明的实施方式涉及一种数据读取方法、装置、介质和计算设备。



    背景技术:

    本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

    分布式存储系统,例如ceph,是将数据分散存储到多台独立的计算机存储设备上的存储系统。在客户端需要从分布式存储系统读取数据时,需要由分布式存储系统中的主对象存储设备(objectstoragedevice,osd)进行计算并分别从多个从osd读取数据,再将数据发送给客户端。但是,这样就会存在延时较长等问题。



    技术实现要素:

    本发明期望提供一种数据读取方法、装置、介质和计算设备,以至少解决上述技术问题。

    本申请实施例的第一个方面,提供一种数据读取方法,包括:

    获取目标数据的读取请求;

    基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块;n为大于等于1的整数;

    向所述分布式存储系统中的所述n个osd模块分别发送读请求,接收所述n个osd模块分别反馈的数据;

    基于所述n个osd模块分别反馈的数据,确定所述目标数据。

    在本发明的一个实施例中,所述基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块,包括:

    基于所述目标数据的读取请求中的所述目标数据存储起始位置、以及目标数据的数据量,确定所述分布式存储系统中参与读取处理的n个osd模块。

    在本发明的一个实施例中,所述方法还包括:

    基于最小读取单位以及所述目标数据的读取请求中包含的目标数据的数据量,确定所述n个osd模块中每一个osd模块所对应的所述待读取数据量。

    在本发明的一个实施例中,所述向所述分布式存储系统中的所述n个osd模块分别发送读请求之前,所述方法还包括:

    基于所述n个osd模块中每一个osd模块所对应的待读取数据量以及数据位置,生成所述n个osd模块中所述每一个osd模块所对应的读请求。

    在本发明的一个实施例中,所述基于所述n个osd模块分别反馈的数据,确定所述目标数据,包括:

    将所述n个osd模块分别反馈的数据进行拼接,得到拼接后的数据;

    基于所述目标数据的读取请求中包含的目标数据的数据量,从所述拼接后的数据中截取所述目标数据。

    在本发明的一个实施例中,所述基于所述n个osd模块分别反馈的数据,确定所述目标数据,包括:

    对所述n个osd模块分别反馈的数据进行截取,将截取后的数据进行拼接得到拼接后的数据,将所述拼接后的数据作为所述目标数据

    本申请实施例的第二个方面,提供一种数据读取装置,包括:

    获取单元,用于获取目标数据的读取请求;

    接口调用单元,用于基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块;n为大于等于1的整数;

    收发单元,用于向所述分布式存储系统中的所述n个osd模块分别发送读请求,接收所述n个osd模块分别反馈的数据;

    处理单元,用于基于所述n个osd模块分别反馈的数据,确定所述目标数据。

    在本发明的一个实施例中,所述接口调用单元,用于基于所述目标数据的读取请求中的所述目标数据存储起始位置、以及目标数据的数据量,确定所述分布式存储系统中参与读取处理的n个osd模块。

    在本发明的一个实施例中,所述接口调用单元,用于基于最小读取单位以及所述目标数据的读取请求中包含的目标数据的数据量,确定所述n个osd模块中每一个osd模块所对应的所述待读取数据量。

    在本发明的一个实施例中,所述接口调用单元,还用于向所述分布式存储系统中的所述n个osd模块分别发送读请求之前,基于所述n个osd模块中每一个osd模块所对应的待读取数据量以及数据位置,生成所述n个osd模块中所述每一个osd模块所对应的读请求。

    在本发明的一个实施例中,所述处理单元,用于将所述n个osd模块分别反馈的数据进行拼接,得到拼接后的数据;基于所述目标数据的读取请求中包含的目标数据的数据量,从所述拼接后的数据中截取所述目标数据。

    在本发明的一个实施例中,所述处理单元,用于对所述n个osd模块分别反馈的数据进行截取,将截取后的数据进行拼接得到拼接后的数据,将所述拼接后的数据作为所述目标数据。

    本申请实施例的第三个方面,提供一种介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现本申请任意实施例提供的方法。

    本申请实施例的第四个方面,提供一种计算设备,包括:

    一个或多个处理器;

    存储装置,用于存储一个或多个程序;

    当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现本申请任意实施例提供的方法。

    根据本发明实施方式,客户端根据目标数据的读取请求就可以确定参与读取处理的n个osd,并向n个osd分别发送读请求,最终将n个osd反馈的数据进行处理就可以得到最终的目标数据。如此,本实施例的方案避免了现有技术中主osd模块的状态影响数据获取效率的问题,提升了数据读取的速度,并且由于n个osd模块并行处理有效降低了请求响应延时。

    附图说明

    通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:

    图1示意性地示出了根据本发明一实施方式的数据读取方法实现流程图;

    图2示意性地示出了现有技术的一种数据读取处理示意图;

    图3示意性地示出了根据本发明一实施方式的数据读取处理示意图;

    图4示意性地示出了根据本发明一实施方式的介质示意图;

    图5示意性地示出了根据本发明一实施方式的数据读取装置结构示意图;

    图6示意性地示出了根据本发明一实施方式的计算设备结构示意图。

    在附图中,相同或对应的标号表示相同或对应的部分。

    具体实施方式

    下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

    本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

    根据本发明的实施方式,提出了一种数据读取方法、装置、介质和计算设备。

    在本文中,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

    下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。

    发明概述

    本发明人发现,现有方案中,客户端若要从分布式存储系统读取数据时,需要客户端经过librados找到读取对象对应的分布式存储系统中的主osd,发送读请求到主osd;主osd获取信息后,计算出对象对应的其他k-1个从osd,发送读消息到其他k-1个从osd上,同时自己的上面也获取1份读消息;主osd收到k个读消息后,将读内容计算后,按照客户端要求返回对应的数据。现有的数据读取方法存在主osd模块的状态影响数据获取效率的问题,以及延时较长等问题。

    有鉴于此,本发明提供一种数据读取方法、装置、介质和计算设备,本实施例中,客户端根据目标数据的读取请求就可以确定参与读取处理的n个osd,并向n个osd分别发送读请求,最终将n个osd反馈的数据进行处理就可以得到最终的目标数据。如此,本实施例的方案避免了现有技术中主osd模块的状态影响数据获取效率的问题,提升了数据读取的速度,并且由于n个osd模块并行处理有效降低了请求响应延时。

    在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。

    示例性方法

    本发明的第一个方面提供一种数据读取方法,下面参考图1来描述根据本发明示例性实施方式的数据读取方法,如图1所示,包括:

    s101:获取目标数据的读取请求;

    s102:基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块;n为大于等于1的整数;

    s103:向所述分布式存储系统中的所述n个osd模块分别发送读请求,接收所述n个osd模块分别反馈的数据;

    s104:基于所述n个osd模块分别反馈的数据,确定所述目标数据。

    本申请实施例提供的方案,可以应用于客户端;示例性的,可以为分布式存储系统的客户端,所述分布式存储(ceph)系统的客户端可以是能够通过librados从所述分布式存储系统的osd中读取数据的客户端。

    上述s101中,所述目标数据的读取请求,可以是所述客户端的应用需要读取目标数据的时候发起的针对所述目标数据的读取请求;其中,所述应用可以为客户端安装并运行的任意一个应用,本实施例不对其进行限定。

    s102中,所述基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块,具体可以包括:基于所述目标数据的读取请求中的所述目标数据存储起始位置、以及目标数据的数据量,确定所述分布式存储系统中参与读取处理的n个osd模块。

    该目标数据的读取请求中至少包括所述目标数据存储起始位置、以及目标数据的数据量。其中,所述目标数据存储起始位置具体可以指的是所述目标数据在ceph中的偏移量(offset),通过该偏移量可以指示所述目标数据存储起始位置。所述目标数据的数据量可以指的是目标数据包含的数据量的大小,比如可以是128k、或者8k等等,不对其进行穷举。

    基于上述目标数据的读取请求中的目标数据存储起始位置,可以确定所述目标数据的起始位置所对应的一个osd模块;进而,基于所述目标数据的读取请求中的目标数据的数据量,也就是目标数据包含的数据量的大小、以及所述目标数据存储起始位置,可以确定所述目标数据保存在哪一个或哪几个osd模块中,该确定的所述目标数据存储的一个或多个osd模块,在本实施例中将其称为n个osd模块。其中,n可以为大于等于1的整数。

    也就是说,基于所述目标数据的读取请求,可以确定本次会参与读取处理的一个或多个osd模块(即n个osd模块)。

    再进一步地,还会确定参与读取处理的n个osd模块中每一个osd模块所对应的待读取数据量,具体的:

    基于最小读取单位以及所述目标数据的读取请求中包含的目标数据的数据量,确定所述n个osd模块中每一个osd模块所对应的所述待读取数据量。

    上述最小读取单位指的是一个osd模块进行一次读取处理的最小读取数据量。示例性的所述最小读取单位可以是8k(bit),又或者根据实际情况可以设置为128k、256k、1m等等。

    再进一步来说,n可以为1或者大于1的整数。

    当n等于1的时候,只有一个osd模块参与读取处理,前述已经可以基于目标数据的读取请求确定目标数据的数据量,在所述目标数据的数据量小于所述osd模块的最小读取单位的情况下,则根据最小读取单位确定待读取数据量,比如可以是将最小读取单位直接作为本次待读取数据量。

    举例来说,基于目标数据的读取请求确定要从8个osd模块中的osd模块1中读取4k的数据,最小数据读取单位为8k;则基于所述最小数据读取单位确定从所述osd模块1中读取8k的数据,该8k的数据中包含4k目标数据,这8k的数据量即为该osd模块1对应的待读取数据量。

    当n等于1的时候,只有一个osd模块参与读取处理,还存在一种情况,就是在所述目标数据的数据量等于所述osd模块的最小读取单位的情况下,则直接从该osd模块中读取所述目标数据的数据量。

    举例来说,基于目标数据的读取请求确定要从8个osd模块中的osd模块1中读取128k的数据,最小数据读取单位为128k;则基于所述最小数据读取单位确定从所述osd模块1中读取128k的数据。

    当n等于1的时候,只有一个osd模块参与读取处理,再一种情况,就是在所述目标数据的数据量大于所述osd模块的最小读取单位的情况下,则可以是将最小读取单位乘以整数倍数,得到的结果大于等于所述目标数据的数据量的时候,将该结果作为该osd模块对应的待读取数据量。

    举例来说,基于目标数据的读取请求确定要从8个osd模块中的osd模块1中读取248k的数据,最小数据读取单位为128k;则基于所述最小数据读取单位乘以2等于256,该结果大于目标数据的数据量,确定所述osd模块1的待读取数据量为256k。

    当n大于1的时候,有多个osd模块参与读取处理,前述已经可以基于目标数据的读取请求确定目标数据的数据量以及目标数据存储起始位置,进而可以确定所述目标数据在所述多个osd处分别所对应的存储位置以及分别对应的子数据量;

    在所述子数据量小于或等于多个osd模块中任意一个osd模块的最小读取单位的情况下,则根据最小读取单位确定该osd模块对应的待读取数据量,比如可以是将最小读取单位直接作为该osd模块对应的待读取数据量;

    在所述子数据量大于多个osd模块中任意一个osd模块的最小读取单位的情况下,则将最小读取数据量乘以整数倍数得到计算结果,在该计算结果大于等于所述子数据量的情况下,将所述计算结果作为该osd模块对应的待读取数据量。

    在n大于1的时候,针对每一个参与读取处理的osd模块的处理与上述任一一个osd模块的处理相同,因此不对其进行一一赘述。

    在确定n个osd模块所对应的待读取数据量之后,还可以进一步生成针对每一个osd模块的读请求,具体的:基于所述n个osd模块中每一个osd模块所对应的待读取数据量以及数据位置,生成所述n个osd模块中所述每一个osd模块所对应的读请求。

    所述每一个osd模块对应的读请求中可以包括:该osd模块所对应的待读取数据量以及所述数据位置;该数据位置具体可以为数据起始位置。

    所述数据位置可以为在确定了待读取数据量之后确定的所述数据起始位置,比如,所述数据位置即数据起始位置可以是所述目标数据存储起始位置;或者,所述数据位置所对应的结束位置可以为目标数据的结束位置,基于该结束位置、以及待读取数据量的大小可以确定所述数据位置的起始位置;再或者,所述数据位置(即数据起始位置)在所述目标数据存储起始位置之前,比如,目标数据的数据量为2k,目标数据起始存储位置为4k,也就是说目标数据为4k-6k的数据,待读取数据量为8k,则数据位置也就是数据起始位置可以是0,也就是基于该数据位置以及待读取数据量确定读取0-8k的数据。

    进一步地,s103中向所述分布式存储系统中的所述n个osd模块分别发送读请求,可以为客户端向所述分布式存储系统中的所述n个osd模块分别发送对应的读请求。关于读请求的生成以及读请求的内容与前述实施例相同,不做重复说明。例如,分布式存储系统中的osd模块包括:osd模块a、osd模块b、osd模块c、osd模块d、osd模块e、osd模块f;参与读请求的osd包含2个,分别是osd模块a以及osd模块b,则分别向osd模块a、osd模块b发送对应的读请求。

    在s103中,所述客户端还会接收到n个osd模块分别反馈的数据,其中每一个osd模块反馈的数据的数据量大小等于前述确定的每一个osd模块所对应的待读取数据量。

    在前述实施例中已经说明,向每一个osd模块发送的读请求是包含了待读取数据量以及数据位置的,因此,在收到每一个osd模块反馈的数据之后,还需要从所述反馈的数据中提取目标数据。

    在s104中,n等于1的情况下,所述基于所述n个osd模块分别反馈的数据,确定所述目标数据,具体可以为:对1个osd模块反馈的数据进行截取,将截取后的数据作为所述目标数据。

    具体来说,基于前述实施例的处理,确定目标数据的数据量在一个osd模块上,也就是仅向一个osd模块发送了读请求;则可以从该osd模块反馈的数据中截取所述目标数据即可。由于一个osd参与读取处理的场景中,不会涉及到多个osd模块反馈的数据进行拼接的处理,因此,只需要从该osd模块反馈的数据中进行截取,即可得到所述目标数据。

    在n大于1的情况下,所述基于所述n个osd模块分别反馈的数据,确定所述目标数据,包括以下两种方式:

    方式一、将所述n个osd模块分别反馈的数据进行拼接,得到拼接后的数据;基于所述目标数据的读取请求中包含的目标数据的数据量,从所述拼接后的数据中截取所述目标数据。

    方式二、所述基于所述n个osd模块分别反馈的数据,确定所述目标数据,包括:对所述n个osd模块分别反馈的数据进行截取,将截取后的数据进行拼接得到拼接后的数据,将所述拼接后的数据作为所述目标数据。

    基于前述实施例的处理,确定目标数据的数据量分别在2个或更多osd模块上,那么需要向2个或更多osd模块发送读请求;相应的,收到2个或更多的osd模块反馈的数据;其中每一个osd模块反馈的数据与该osd模块所对应的待读取数据量相同。

    进而,客户端可以采用方式一进行处理,比如:客户端可以对每一个osd模块反馈的数据进行拼接,然后基于所要读取的目标数据从拼接后的数据进行截取,最终得到本次请求的所述目标数据的全部内容。

    或者,客户端可以采用方式二进行处理,比如:客户端可以从每一个osd模块反馈的数据中截取对应的子数据量;将全部osd模块对应的截取到的子数据量进行拼接,得到本次请求的所述目标数据的全部内容。这里,每一个osd模块反馈的数据中包含的子数据量,在前述生成每一个osd模块对应的读请求的处理中,确定每一个osd模块分配到的子数据量的时候已经可以确定,因此这里不做重复说明。

    结合图2对上述实施例提供一种示例性的说明,图2示出的分布式存储系统中包含k个osd(即osd模块,图中简写为osd)。客户端的应用触发了针对目标数据的读取请求;客户端根据目标数据的读取请求,确定需要读取的目标数据的数据量为4k,目标数据存储起始位置为0;客户端基于该目标数据的读取请求可以确定所述目标数据落在osd1上;若最小读取单位为8k,则确定了待读取数据量为8k,因此客户端向osd1发送8k请求(具体可以向osd1发送了0-8k的数据的读请求)。所述客户端接收到osd1反馈的数据后,客户端从8k的数据中截取0-4k的数据作为最终结果。

    又一示例,仍然结合图2来说,客户端的应用触发了针对目标数据的读取请求;客户端根据目标数据的读取请求,确定需要读取的目标数据的数据量为3m,目标数据存储起始位置为0;客户端基于该目标数据的读取请求可以确定所述目标数据落在osd1、和osd2上,其中osd1上对应的子数据量为1.5m,osd2对应的子数据量为1.5m;若最小读取单位为2m,则确定了osd1对应的待读取数据量为2m,osd2对应的待读取数据量为2m。因此客户端向osd1发送2m数据的读请求,向osd2发送2m数据的读请求。

    一种方式中,接收到osd1、以及osd2反馈的数据后,客户端将osd1以及osd2反馈的数据进行拼接,得到4m的数据;从4m的数据中截取所述目标数据即3m的数据。

    又或者,另一种方式中,接收到osd1、以及osd2反馈的数据后,客户端根据osd1对应的子数据量从osd1反馈的数据中截取子数据(比如为1.5m的数据),根据osd2对应的子数据量从osd2反馈的数据中截取子数据(比如为1.5m的数据);将截取的子数据进行拼接,得到所述目标数据。

    还需要理解的是,上述根据目标数据的读取请求确定待读取数据量、以及生成osd的读请求以及发送读请求、接收osd反馈的数据以及进行拼接等处理,具体可以如图2中所示为所述客户端的librados接口调用功能来执行的。

    本实施例提供的方案与现有技术的方案对比来说:

    图3示为现有技术的一种分布式存储系统的处理架构,分布式存储系统中包含有主osd(即osd模块,图中简写为osd),以及k-1个从osd。客户端需要读取一个ceph对象内容,也就是发出目标数据的读取请求,需要经过librados(rados提供库)找到主osd模块,发送目标数据的读取请求到主osd模块;主osd模块接收读请求后,计算出该对象对应的其他k-1个从osd模块,发送读消息到其他k-1个从osd模块上;主osd模块接收k-1个从osd模块反馈的数据并结合主osd模块反馈的数据,进行计算,按照客户端的要求返回相应的数据至客户端,完成数据读取过程。

    由此,本实施例仅需要客户端根据目标数据的读取请求就可以确定参与读取处理的n个osd模块,并向n个osd模块分别发送读请求,最终将n个osd模块反馈的数据进行处理就可以得到最终的目标数据。本申请实施例不需要分布式存储系统中的主osd模块进行计算参与读请求的从osd模块,再向从osd模块发送读请求,最后主osd模块根据从osd模块反馈的数据计算得到客户端所请求的目标数据并反馈给客户端这一系列的过程。如此,本实施例的方案避免了现有技术中主osd模块的状态影响数据获取效率的问题,提升了数据读取的速度,并且由于n个osd模块并行处理有效降低了请求响应延时。

    示例性介质

    在介绍了本发明示例性实施方式的方法之后,接下来,参考图4对本发明示例性实施方式的介质进行说明。

    在一些可能的实施方式中,本发明的各个方面还可以实现为一种计算机可读介质,其上存储有程序,当所述程序被处理器执行时用于实现本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的数据读取方法中的步骤。

    具体地,上述处理器执行上述程序时用于实现如下步骤:

    获取目标数据的读取请求;

    基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块;n为大于等于1的整数;

    向所述分布式存储系统中的所述n个osd模块分别发送读请求,接收所述n个osd模块分别反馈的数据;

    基于所述n个osd模块分别反馈的数据,确定所述目标数据。

    需要说明的是:上述的介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

    如图4所示,描述了根据本发明的实施方式的介质40,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序,并可以在设备上运行。然而,本发明不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

    可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

    可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如java、c 等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算设备

    示例性装置

    在介绍了本发明示例性电子设备之后,接下来,参考图5本发明示例性实施方式的装置进行说明。

    本发明实施例的第三个方面提供一种数据读取装置200,如图5所示,包括:

    获取单元201,用于获取目标数据的读取请求;

    接口调用单元202,用于基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块;n为大于等于1的整数;

    收发单元203,用于向所述分布式存储系统中的所述n个osd模块分别发送读请求,接收所述n个osd模块分别反馈的数据;

    处理单元204,用于基于所述n个osd模块分别反馈的数据,确定所述目标数据。

    在一种实施方式中,所述接口调用单元202,用于基于所述目标数据的读取请求中的所述目标数据存储起始位置、以及目标数据的数据量,确定所述分布式存储系统中参与读取处理的n个osd模块。

    在一种实施方式中,所述接口调用单元202用于基于最小读取单位以及所述目标数据的读取请求中包含的目标数据的数据量,确定所述n个osd模块中每一个osd模块所对应的所述待读取数据量。

    在一种实施方式中,所述接口调用单元202,还用于向所述分布式存储系统中的所述n个osd模块分别发送读请求之前,基于所述n个osd模块中每一个osd模块所对应的待读取数据量以及数据位置,生成所述n个osd模块中所述每一个osd模块所对应的读请求。

    在一种实施方式中,所述处理单元204,用于将所述n个osd模块分别反馈的数据进行拼接,得到拼接后的数据;基于所述目标数据的读取请求中包含的目标数据的数据量,从所述拼接后的数据中截取所述目标数据。

    或者,所述处理单元204,用于对所述n个osd模块分别反馈的数据进行截取,将截取后的数据进行拼接得到拼接后的数据,将所述拼接后的数据作为所述目标数据。

    示例性计算设备

    在介绍了本发明示例性实施方式的方法、电子设备和装置之后,接下来,参考图6本发明示例性实施方式的计算设备进行说明。

    所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

    在一些可能的实施方式中,根据本发明实施方式的计算设备可以至少包括至少一个处理单元以及至少一个存储单元。其中,存储单元存储有程序代码,当程序代码被处理单元执行时,使得处理单元执行本说明书上述“示例性方法”部分中描述的根据本发明的各种示例性实施方式的特征处理方法中的步骤。

    下面参照图6来描述根据本发明的这种实施方式的计算设备90。图6显示的计算设备90仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

    如图6所示,计算设备90以通用计算设备的形式表现。计算设备90的组件可以包括但不限于:上述至少一个处理单元901、上述至少一个存储单元902,连接不同系统组件(包括处理单元901和存储单元902)的总线903。

    总线903包括数据总线、控制总线和地址总线。

    存储单元902可以包括易失性存储器形式的可读介质,例如随机存取存储器(ram)9021和/或高速缓存存储器9022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(rom)9023。

    存储单元902还可以包括具有一组(至少一个)程序模块9024的程序/实用工具9025,这样的程序模块9024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

    计算设备90也可以与一个或多个外部设备904(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(i/o)接口905进行。并且,计算设备90还可以通过网络适配器906与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图6所示,网络适配器906通过总线903与计算设备90的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备90使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

    应当注意,尽管在上文详细描述中提及了数据读取装置的若干单元/模块或子单元子/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。

    此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

    虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。


    技术特征:

    1.一种数据读取方法,包括:

    获取目标数据的读取请求;

    基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块;n为大于等于1的整数;

    向所述分布式存储系统中的所述n个osd模块分别发送读请求,接收所述n个osd模块分别反馈的数据;

    基于所述n个osd模块分别反馈的数据,确定所述目标数据。

    2.根据权利要求1所述的方法,其特征在于,所述基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块,包括:

    基于所述目标数据的读取请求中的所述目标数据存储起始位置、以及目标数据的数据量,确定所述分布式存储系统中参与读取处理的n个osd模块。

    3.根据权利要求2所述的方法,其特征在于,所述方法还包括:

    基于最小读取单位以及所述目标数据的读取请求中包含的目标数据的数据量,确定所述n个osd模块中每一个osd模块所对应的所述待读取数据量。

    4.根据权利要求2所述的方法,其特征在于,所述向所述分布式存储系统中的所述n个osd模块分别发送读请求之前,所述方法还包括:

    基于所述n个osd模块中每一个osd模块所对应的待读取数据量以及数据位置,生成所述n个osd模块中所述每一个osd模块所对应的读请求。

    5.根据权利要求1-4任一项所述的方法,其特征在于,所述基于所述n个osd模块分别反馈的数据,确定所述目标数据,包括:

    将所述n个osd模块分别反馈的数据进行拼接,得到拼接后的数据;

    基于所述目标数据的读取请求中包含的目标数据的数据量,从所述拼接后的数据中截取所述目标数据。

    6.根据权利要求1-4任一项所述的方法,其特征在于,所述基于所述n个osd模块分别反馈的数据,确定所述目标数据,包括:

    对所述n个osd模块分别反馈的数据进行截取,将截取后的数据进行拼接得到拼接后的数据,将所述拼接后的数据作为所述目标数据。

    7.一种数据读取装置,包括:

    获取单元,用于获取目标数据的读取请求;

    接口调用单元,用于基于所述目标数据的读取请求,确定分布式存储系统中参与读取处理的n个对象存储设备osd模块;n为大于等于1的整数;

    收发单元,用于向所述分布式存储系统中的所述n个osd模块分别发送读请求,接收所述n个osd模块分别反馈的数据;

    处理单元,用于基于所述n个osd模块分别反馈的数据,确定所述目标数据。

    8.根据权利要求7所述的装置,其特征在于,所述接口调用单元,还用于基于所述n个osd模块中每一个osd模块所对应的待读取数据量以及数据位置,生成所述n个osd模块中所述每一个osd模块所对应的读请求。

    9.一种介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的方法。

    10.一种计算设备,包括:

    一个或多个处理器;

    存储装置,用于存储一个或多个程序;

    当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-6中任一所述的方法。

    技术总结
    本申请提供一种数据读取方法、装置、介质和计算设备。其中,数据读取方法包括获取目标数据的读取请求;基于目标数据的读取请求,确定分布式存储系统中参与读取处理的N个对象存储设备OSD模块;N为大于等于1的整数;向分布式存储系统中的N个OSD模块分别发送读请求,接收N个OSD模块分别反馈的数据;基于N个OSD模块分别反馈的数据,确定目标数据。

    技术研发人员:俞乐勤;王盼;陈谔
    受保护的技术使用者:杭州朗和科技有限公司
    技术研发日:2020.11.27
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-23611.html

    最新回复(0)