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

数据存储方法、电子设备及计算机可读存储介质

文献发布时间:2024-04-18 19:59:31


数据存储方法、电子设备及计算机可读存储介质

技术领域

本申请涉及数据存储领域,特别是涉及一种数据存储方法、电子设备及计算机可读存储介质。

背景技术

随着大数据的发展,分布式存储成为了解决数据爆发增长的关键技术。而随着数据的不断增加,如何提高分布式存储的性能成为了技术人员关注的焦点。在进行分布式存储时,数据写入缓存,缓存被划分为多个条带,每个条带中包括多个存储数据的区域,而每个区域会存储至不同的存储节点中,则在数据存储的过程中,每个区域都会对应一个IO,以进行数据的存储写入,这就导致分布式存储过程中存在大量的IO,严重影响数据的写入。

发明内容

本申请主要目的是提供一种数据存储方法、电子设备及计算机可读存储介质,能够提高分布式存储的数据写入性能。

为解决上述技术问题,本申请采用的第一个技术方案是:提供一种数据存储方法。该方法包括确定待写入数据对应的目标条带,其中,每一目标条带对应预设数量个数据区域,每一目标条带中相同排序位置的数据区域对应同一存储单元;合并相同排序位置的区域的IO指令,并按照合并后的IO指令将待写入数据写入对应的存储单元。

为解决上述技术问题,本申请采用的第二个技术方案是:提供一种电子设备。该电子设备包括存储器和处理器,存储器用于存储程序数据,程序数据能够被处理器执行,以实现如第一个技术方案中所述的方法。

为解决上述技术问题,本申请采用的第三个技术方案是:提供一种计算机可读存储介质。该计算机可读存储介质存储有程序数据,能够被处理器执行,以实现如第一个技术方案中所述的方法。

本申请的有益效果是:通过获取待写入数据对应的目标条带后,将目标条带中相同排序位置的数据区域的IO指令合并,将相同排序位置的数据区域的IO指令合并为一个IO指令,使得在数据写入存储单元内的过程中,所有目标条带的相同排序位置的数据区域数据仅利用一个IO指令完成写入,避免了过多IO指令的生成,提高了数据写入效率,提高了分布式存储性能。

附图说明

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

图1是一条带划分示意图;

图2是本申请数据存储方法第一实施例的流程示意图;

图3是本申请数据存储方法第二实施例的流程示意图;

图4是本申请数据存储方法第三实施例的流程示意图;

图5是一条带区域对应内存地址的示意图;

图6是本申请数据存储方法第四实施例的流程示意图;

图7是本申请数据存储方法第五实施例的流程示意图;

图8是本申请数据存储方法第六实施例的流程示意图;

图9是内存数据连续的IO合并示意图;

图10是数据连续的IO合并示意图;

图11是本申请电子设备一实施例的结构示意图;

图12是本申请计算机可读存储介质一实施例的结构示意图。

具体实施方式

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

本申请中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

在介绍本申请的技术方案之前,先对部分相关技术进行简单介绍。

如图1所示,图1为一条带划分示意图。在客户端将数据写入至缓存中时,会按照设定的EC写入N1+M1,即N1个数据块和M1个校验块,例如3兆文件对象,按照3+1切分3个数据块和1个校验块,每个块大小为1兆,每个1兆数据块会写到多个条带,每个条带包含N2+M2个piece,N2个数据块,M2个校验块,每个条带中的数据块的数据是连续的,而后会分别将每个块写到不同的存储节点上。

如果条带的组成为3+1piece,即3个数据块,1个校验块,则条带1的piece1会写至存储节点1,piece2会写至存储节点2,piece3会写至存储节点3,piece4会写至存储节点4。每个piece的写入都会对应一个IO指令。这样数据在存储至存储节点的过程中就会产生大量的IO,影响数据的存储写入速度。

参照图2,图2为本申请数据存储方法第一实施例的流程示意图。其包括以下步骤:

S11:确定待写入数据对应的目标条带,其中,每一目标条带对应预设数量个数据区域,每一目标条带中相同排序位置的数据区域对应同一存储单元。

在将进行数据写入之前,会对内存、条带进行初始化,在内存中申请一块固定大小的空间,然后初始化多个条带,形成条带队列,让每个条带的每个piece都指向内存中的一块空间,数据写入条带即将数据写入内存。

划分出的条带队列,其每一个条带都包括预设数量的数据区域,该数据区域包括存储待写入数据的原始数据区域,还可以包括对应该原始数据区域的校验区域。条带中的数据区域都有对应的排序位置,所有的条带中其相同排序位置的数据区域会对应同一个存储单元,便于后续数据写入。

数据在进行写入时,会将数据写入到当前偏移所指的条带中,如果内存中没有当前偏移所对应的条带,则会申请一个空的条带用于该数据写入。

在获取条带,将条带中的数据写入至存储单元中时,需要获取满足条件的条带。因为在内存中有多个条带,可能存在没有数据的条带,或者部分存有数据的条带,或者存满数据的条带等等。本实施例中所获取的目标条带,是待写入数据对应的写满的目标条带。该写满的目标条带是尚未写入至存储单元的条带。

S12:合并相同排序位置的区域的IO指令,并按照合并后的IO指令将待写入数据写入对应的存储单元。

获取数据存满的目标条带后,由于相同排序位置的区域会对应同一存储单元,因此可以对相同排序位置区域的IO指令进行合并。不再是将每个数据区域都对应一个IO指令进行向存储单元的写入,而是将相同排序位置的数据区域的IO指令合并为一个IO指令,对相同排序位置数据区域的数据进行合并,以该合并IO指令进行存储写入,从而快速完成该存储单元的数据写入,避免生成过多的IO指令,提高了数据写入效率。

在本实施例中,通过获取待写入数据对应的目标条带后,将目标条带中相同排序位置的数据区域的IO指令合并,将相同排序位置的数据区域的IO指令合并为一个IO指令,使得在数据写入存储单元内的过程中,所有目标条带的相同排序位置的数据区域数据仅利用一个IO指令完成写入,避免了过多IO指令的生成,提高了数据写入效率,提高了分布式存储性能。

在一实施例中,由于待写入数据所属的数据对象的数据量大小对条带中数据存储至存储单元中的方式有一定的影响,因此对获取的目标条带进行进一步的限定。

响应于待写入数据所属数据对象的数据量大于或等于预设阈值,目标条带中的待写入数据属于同一数据对象;响应于待写入数据所属数据对象的数据量小于预设阈值,目标条带中的待写入数据属于不同的数据对象。

以大图片和小图片为例,在大图片进行写入时,一个大图片通常可以将条带队列中所有条带写满。在通常情况下,会将每个条带中每个数据区域对应一个IO指令进行写入,本申请为了改善IO频繁写数据的问题,将各条带中相同排序位置的数据区域的IO指令合并为一个IO指令,完成该排序位置所有数据区域的数据写入。在小图进行写入时,一个小图片往往可能不能将条带队列中所有条带写满,因此本申请为了避免IO指令的增加,在小图片进行写入时,一张小图片写完后不会立即将条带中的数据写入至存储单元,而是继续等待下一小图片写入条带,在内存中当满条带的数量达到预设数量时,再将所有的满条带取出,作为目标条带进行IO指令的合并以及数据向存储单元的写入。

因此预设阈值可以是条带队列存满数据的数据量,当待写入数据所属对象的数据量大于或等于预设阈值时,目标条带中的待写入数据属于同一数据对象,在数据对象写完或条带队列存满时,获取目标条带进行IO指令合并,完成数据向存储单元的写入。当待写入数据所属对象的数据量小于预设阈值时,目标条带中的待写入数据则属于不同数据对象,在条带队列中存满条带的数量大于预设数量或多个数据对象都写完时,再获取目标条带进行IO指令的合并以完成数据的写入。

参照图3,图3为本申请数据存储方法第二实施例的流程示意图。该方法是对步骤S12的进一步扩展,其包括以下步骤:

S21:获取目标条带的起始偏移。

S22:根据起始偏移对目标条带进行排序。

S23:根据条带排序结果对目标条带中相同排序位置的区域的IO指令进行合并。

当待写入数据所属数据对象的数据量小于预设阈值时,获取的目标条带中的待写入数据属于不同的数据对象,由于数据对象的数据量较小,其每次写入的数据对象的数据可能只能占用条带队列中的部分条带,而为了避免生成过多的IO指令,本申请选择当条带队列中满条带的数量达到预设数量后再进行IO指令的合并。

而对于目标条带,由于数据对象的数据量较小,其多个数据对象写入的过程中,其占用条带的顺序可能与条带队列中条带的初始排序是不一致的,因此先按照写入数据的顺序对目标条带进行排序,而后再对其进行IO指令的合并和数据向存储单元的写入。

将目标条带按照在文件中的起始偏移进行排序,这样就可以保证条带中的数据是连续的。排序完成后,再依照条带排序将各目标条带中同排序位置的区域的IO指令进行合并。

参照图4,图4为本申请数据存储方法第三实施例的流程示意图。该方法是对步骤S12的进一步扩展,其包括以下步骤:

S31:获取目标条带中相同排序位置的区域,其中,目标条带中相同排序位置的区域对应的内存存储地址连续。

S32:合并相同排序位置的区域的IO指令。

当待写入数据所属数据对象的数据量大于或等于预设阈值,获取的目标条带中的待写入数据属于同一数据对象,由于数据对象的数据量较大,其每次写入都可以占满条带队列中的全部条带,因此为了进一步方便IO合并以及后续的数据序列化,本申请在进行条带初始化时,将所有条带相同排序位置的数据区域对应的内存存储地址设置为连续的。如图5所示,图5为一条带区域对应内存地址的示意图。在进行IO指令合并时,获取目标条带中相同排序位置的数据区域,由于其在内存中是地址连续的数据,因此便于其进行数据获取和合并。获取之后,将各个数据区域对应的IO指令合并为一个IO指令。

参照图6,图6为本申请数据存储方法第四实施例的流程示意图。该方法是对步骤S12的进一步扩展,其包括以下步骤:

S41:对合并后的IO指令所对应的待写入数据进行序列化。

S42:将序列化后的待写入数据按照合并后的IO指令写入对应的存储单元。

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

在将数据有内存写入至存储单元之前,需要先对合并的数据进行序列化。

参照图7,图7为本申请数据存储方法第五实施例的流程示意图。该方法是对步骤S41的进一步扩展,其包括以下步骤:

S51:获取合并后的IO指令对应的连续的内存存储地址的起始地址以及地址长度。

S52:根据起始地址以及地址长度对待写入数据进行序列化。

当待写入数据所属数据对象的数据量大于或等于预设阈值时,由于其合并IO指令所对应的数据区域的数据在内存中的地址是连续的,因此其仅需要获取该部分数据在内存中的起始地址以及数据的地址长度,即可依照其对合并的数据进行序列化处理。

参照图8,图8为本申请数据存储方法第六实施例的流程示意图。该方法是对步骤S41的进一步扩展,其包括以下步骤:

S61:获取合并后的IO指令对应的每个区域在内存中的起始地址以及地址长度。

S62:根据起始地址以及地址长度对待写入数据进行序列化。

当待写入数据所属数据对象的数据量小于预设阈值时,由于其合并IO指令所对应的数据区域的数据在内存中的地址是不连续的,因此其需要获取每个数据区域在内存中的内存起始地址以及对应的地址长度,而后依照所有内存起始地址和对应的地址长度进行待写入数据的序列化。

起始地址以及地址长度通过iovec进行保存和获取。在进行IO指令合并时,通过iovec保存合并IO指令对应的各个数据区域的内存起始地址以及地址长度,而后在序列化时,遍历iovec,根据每个数据区域的内存起始地址以及地址长度对待写入数据进行序列化。

下面举一具体实施例来对本申请的技术方案进行更加详细的说明。

以写入大图片和小图片为例,大图为1M,小图为100KB,客户端根据图片大小区分不同IO聚合方式。大图使用内存合并方式将对应多个数据区域的IO聚合成一个IO,小图使用条带在文件中起始偏移将对应多个数据区域的IO聚合成一个IO。

进行条带内存初始化时,假设内存空间被划分为16个条带,每个条带为(3+1)piece,其中一个piece为32KB。让每个条带的第i个piece指向内存中连续的地址空间,这样可以方便大图进行IO合并后的数据合并。如图5所示。

在数据写入时,条带队列会分为两个小队列,一个是正在使用的条带队列,一个是空闲的条带队列。在条带初始化完成之后,将所有条带放入空闲队列中,根据当前写入数据在文件中偏移先从正在使用的对列中查询是否存在某个条带满足当前写偏移落在其数据长度范围内,如果存在则使用该条带,如果不存在则从空闲队列中申请一个空调条带,并将数据写入该条带,直至将内存中条带都写满。

在将内存中的数据写入至存储单元之前,由于数据是写入到正在使用队列里面的条带中,因此遍历所有正在使用的队列中的条带,将所有满足条件且还未写入云存储的条带获取出来。满足的条件即条带的数据写满,即一个条带中所有piece的dataLen字段记录的长度都等于piece固定大小,则表示条带写满。

在写大图时,由于写一张大图通常都可以把条带写满,因此获取正在使用队列中所有满条带,这些满条带都是尚未写入存储单元的条带,将这些满条带作为目标条带。将所有目标条带的相同排序位置的数据区域的IO指令进行合并,每个排序位置的所有数据区域都对应一个IO指令。而由于在写大图时,其相同排序位置数据区域在内存中的地址是连续的,因此其序列化时,仅需要知道该排序位置所有数据区域对应的内存地址的起始地址以及地址长度,即可依照该起始地址和地址长度进行数据的序列化。如图9所示,图9为内存数据连续的IO合并示意图。

在写小图时,由于写一张小图往往不能占用所有的条带,如100KB只能占满一个条带,因此在后续写入过程中其占用的条带中的数据区域在内存中的地址可能是不连续的,因此在进行IO指令合并时,在一张小图写完后不立即将条带写入云存储,而是等待多张小图写完成,内存中累积多个满条带且达到预设个数时,将所有满条带取出,并按照满条带在文件中起始偏移进行排序,而后依照条带排序将各目标条带中同排序位置的区域的IO指令进行合并。而由于数据区域的内存地址不连续,在进行数据序列化时,需要获取合并的每个数据区域的内存起始地址和对应的地址长度,以此来进行数据的序列化。如图10所示,图10为数据连续的IO合并示意图。

数据序列化后,通过网络协议将内存中的数据发送至存储节点,存储节点中有多个block(相当于本申请上述的存储单元),而后继续由block写入至目标存储区域中,如各个磁盘节点。

在实际场景中,以图片存储场景为例,申请缓存空间、条带个数、piece大小、大图、小图区分值等相关参数均可通过参数设置,动态调节数据合并和IO聚合粒度。在IO合并方式中,大图保证了内存数据都连续,小图保证了数据连续。

在IO合并后,在存储节点大图片的批次少,小图片的批次多,而且可以通过文件名直观的辨别是大图片的IO还是小图片的IO,便于生命周期管理和其他业务服务处理。

如图11所示,图11为本申请电子设备一实施例的结构示意图。

该电子设备包括处理器110、存储器120。

处理器110控制电子设备的操作,处理器110还可以称为CPU(Central ProcessingUnit,中央处理单元)。处理器110可能是一种集成电路芯片,具有信号序列的处理能力。处理器110还可以是通用处理器、数字信号序列处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器120存储处理器110工作所需要的指令和程序数据。

处理器110用于执行指令以实现本申请前述数据存储方法中的任一实施例及可能的组合所提供的方法。

如图12所示,图12为本申请计算机可读存储介质一实施例的结构示意图。

本申请可读存储介质一实施例包括存储器210,存储器210存储有程序数据,该程序数据被执行时实现本申请数据存储方法中的任一实施例及可能的组合所提供的方法。

存储器210可以包括U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等可以存储程序指令的介质,或者也可以为存储有该程序指令的服务器,该服务器可将存储的程序指令发送给其他设备运行,或者也可以自运行该存储的程序指令。

综上所述,通过获取待写入数据对应的目标条带后,将目标条带中相同排序位置的数据区域的IO指令合并,将相同排序位置的数据区域的IO指令合并为一个IO指令,使得在数据写入存储单元内的过程中,所有目标条带的相同排序位置的数据区域数据仅利用一个IO指令完成写入,避免了过多IO指令的生成,提高了数据写入效率,提高了分布式存储性能。

在本申请所提供的几个实施方式中,应该理解到,所揭露的方法以及设备,可以通过其它的方式实现。例如,以上所描述的设备实施方式仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。

另外,在本申请各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

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

以上所述仅为本申请的实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

相关技术
  • 一种吸收式直冷/热型电池热管理系统及其工作方法
  • 一种智能生态水资源管理系统的工作方法
  • 一种新能源汽车用R290热泵热管理系统及其工作方法
  • 一种新型车用热管理系统及其工作方法
  • 一种吸收式直冷/热型电池热管理系统及其工作方法
技术分类

06120116521475