数据读写方法、装置、设备及计算机可读存储介质与流程

文档序号:18830373发布日期:2019-10-09 03:11阅读:152来源:国知局
数据读写方法、装置、设备及计算机可读存储介质与流程

本发明涉及存储技术领域,尤其涉及数据读写方法、装置、设备及计算机可读存储介质。



背景技术:

在目前的分布式存储系统中,条带化技术被广泛应用,所谓条带化技术,就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去,这样能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的i/o(input/output,磁盘的输入和输出)并行能力,从而获得非常好的性能。

在条带化技术中包含两个重要的参数:条带深度和条带宽度。条带深度即条带的大小,也叫条带大小,指的是写在每块磁盘上的条带数据块的大小;条带宽度指的是同时可以并发读或写的条带数量,这个数量等于raid(redundantarraysofindependentdrives,磁盘阵列)中的物理硬盘数量,例如一个经过条带化的,具有4块物理硬盘的阵列的条带宽度就是4。

现有的分布式存储系统均是采用固定的条带深度和条带宽度,这种方式的缺陷在于:无法自适应主机的物理配置变化,以及上层应用下发的io请求变化,导致分布式存储系统无法达到最佳的读写性能。



技术实现要素:

本发明实施例的主要目的在于提出一种数据读写方法、装置、设备及计算机可读存储介质,旨在实现条带深度和条带宽度的自适应调整,从而提高分布式存储系统的读写性能。

为实现上述目的,本发明提供一种数据读写方法,所述数据读写方法包括如下步骤:

获取分布式存储系统当前的各物理节点包含的硬盘数量;

获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小;

根据所述硬盘数量调整与所述上层应用对应的条带宽度;

根据所述单位数据流的大小调整与所述上层应用对应的条带深度;

根据调整后的所述条带宽度和所述条带深度执行对所述各物理节点的数据读写操作。

优选地,所述根据所述硬盘数量调整与所述上层应用对应的条带宽度的步骤包括:

获取所述上层应用的io策略;

若所述上层应用的io策略为io本地化策略,则获取包含硬盘数量最少的物理节点的硬盘数,并将获取到的所述硬盘数作为目标硬盘数;

将与所述上层应用对应的条带宽度调整为小于或等于所述目标硬盘数。

优选地,所述根据所述单位数据流的大小调整与所述上层应用对应的条带深度的步骤包括:

获取在所述预设时长内出现频次最高的单位数据流的大小;

确定所述出现频次最高的单位数据流的大小所处的预设区间;

查询单位数据流的大小区间与条带深度之间的预设映射关系,得到与所述预设区间对应的条带深度,并将与所述预设区间对应的条带深度作为目标条带深度;

将与所述上层应用对应的条带深度调整为所述目标条带深度。

优选地,所述数据读写方法还包括:

若检测到创建文件分片组的指令,则获取调整后的所述条带宽度和所述条带深度;

根据调整后的所述条带宽度和所述条带深度创建文件分片组;

根据创建的所述文件分片组,执行对所述各物理节点的数据读写操作。

优选地,所述数据读写方法还包括:

检测所述分布式存储系统是否满足预设的空闲条件;

若所述分布式存储系统满足预设的空闲条件,则获取不符合调整后的所述条带宽度和所述条带深度的文件分片;

将获取到的所述文件分片按照预设的业务类型进行归类;

根据调整后的所述条带宽度和所述条带深度,将同一分类下的所述文件分片重新写入至所述分布式存储系统各物理节点的硬盘中。

此外,为实现上述目的,本发明实施例还提供一种数据读写装置,所述数据读写装置包括:

第一获取模块,用于获取分布式存储系统当前的各物理节点包含的硬盘数量;

第二获取模块,用于获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小;

第一调整模块,用于根据所述硬盘数量调整与所述上层应用对应的条带宽度;

第二调整模块,用于根据所述单位数据流的大小调整与所述上层应用对应的条带深度;

读写模块,用于根据调整后的所述条带宽度和所述条带深度执行对所述各物理节点的数据读写操作。

优选地,所述第一调整模块还用于:

获取所述上层应用的io策略;

若所述上层应用的io策略为io本地化策略,则获取包含硬盘数量最少的物理节点的硬盘数,并将获取到的所述硬盘数作为目标硬盘数;

将与所述上层应用对应的条带宽度调整为小于或等于所述目标硬盘数。

优选地,所述第二调整模块还用于:

获取在所述预设时长内出现频次最高的单位数据流的大小;

确定所述出现频次最高的单位数据流的大小所处的预设区间;

查询单位数据流的大小区间与条带深度之间的预设映射关系,得到与所述预设区间对应的条带深度,并将与所述预设区间对应的条带深度作为目标条带深度;

将与所述上层应用对应的条带深度调整为所述目标条带深度。

优选地,所述条带调整装置还包括:

第三获取模块,用于若检测到创建文件分片组的指令,则获取调整后的所述条带宽度和所述条带深度;

创建模块,用于根据调整后的所述条带宽度和所述条带深度创建文件分片组。

优选地,所述条带调整装置还包括:

检测模块,用于检测所述分布式存储系统是否满足预设的空闲条件;

第四获取模块,用于若所述分布式存储系统满足预设的空闲条件,则获取不符合调整后的所述条带宽度和所述条带深度的文件分片;

归类模块,用于将获取到的所述文件分片按照预设的业务类型进行归类;

重写模块,用于根据调整后的所述条带宽度和所述条带深度,将同一分类下的所述文件分片重新写入至所述分布式存储系统各物理节点的硬盘中。

此外,为实现上述目的,本发明实施例还提供一种数据读写设备,所述数据读写设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的数据读写程序,所述数据读写程序被所述处理器执行时实现如上所述的数据读写方法的步骤。

此外,为实现上述目的,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有数据读写程序,所述数据读写程序被处理器执行时实现如上所述的数据读写方法的步骤。

本发明实施例获取分布式存储系统当前的各物理节点包含的硬盘数量;获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小;根据所述硬盘数量调整与所述上层应用对应的条带宽度;根据所述单位数据流的大小调整与所述上层应用对应的条带深度;根据调整后的所述条带宽度和所述条带深度执行对所述各物理节点的数据读写操作。通过这种方式,使得分布式存储系统的条带深度和条带宽度能够自适应主机的物理配置变化,以及上层应用下发的数据读写请求所请求读写的单位数据流的大小变化,从而提高了分布式存储系统的读写性能。

附图说明

图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图;

图2为本发明实施例数据读写方法的流程示意图;

图3为本发明实施例数据读写装置的模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图。

本发明实施例数据读写设备可以是搭载有分布式存储系统的pc机或服务器(如x86服务器)等终端设备。

如图1所示,该数据读写设备可以包括:处理器1001,例如cpu,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图1中示出的设备结构并不构成对设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及数据读写程序。

在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的数据读写程序,并执行以下操作:

获取分布式存储系统当前的各物理节点包含的硬盘数量;

获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小;

根据所述硬盘数量调整与所述上层应用对应的条带宽度;

根据所述单位数据流的大小调整与所述上层应用对应的条带深度;

根据调整后的所述条带宽度和所述条带深度执行对所述各物理节点的数据读写操作。

进一步地,处理器1001可以调用存储器1005中存储的数据读写程序,还执行以下操作:

获取所述上层应用的io策略;

若所述上层应用的io策略为io本地化策略,则获取包含硬盘数量最少的物理节点的硬盘数,并将获取到的所述硬盘数作为目标硬盘数;

将与所述上层应用对应的条带宽度调整为小于或等于所述目标硬盘数。

进一步地,处理器1001可以调用存储器1005中存储的数据读写程序,还执行以下操作:

获取在所述预设时长内出现频次最高的单位数据流的大小;

确定所述出现频次最高的单位数据流的大小所处的预设区间;

查询单位数据流的大小区间与条带深度之间的预设映射关系,得到与所述预设区间对应的条带深度,并将与所述预设区间对应的条带深度作为目标条带深度;

将与所述上层应用对应的条带深度调整为所述目标条带深度。

进一步地,处理器1001可以调用存储器1005中存储的数据读写程序,还执行以下操作:

若检测到创建文件分片组的指令,则获取调整后的所述条带宽度和所述条带深度;

根据调整后的所述条带宽度和所述条带深度创建文件分片组;

根据创建的所述文件分片组,执行对所述各物理节点的数据读写操作。

进一步地,处理器1001可以调用存储器1005中存储的数据读写程序,还执行以下操作:

检测所述分布式存储系统是否满足预设的空闲条件;

若所述分布式存储系统满足预设的空闲条件,则获取不符合调整后的所述条带宽度和所述条带深度的文件分片;

将获取到的所述文件分片按照预设的业务类型进行归类;

根据调整后的所述条带宽度和所述条带深度,将同一分类下的所述文件分片重新写入至所述分布式存储系统各物理节点的硬盘中。

基于上述硬件结构,提出本发明数据读写方法实施例。

参照图2,图2为本发明实施例数据读写方法的流程示意图,所述方法包括:

步骤s10,获取分布式存储系统当前的各物理节点包含的硬盘数量;

本实施例分布式存储方法应用于分布式存储系统,该分布式存储系统采用了条带化技术,每个逻辑条带会分布到不同主机的硬盘上,以实现系统的io负载分担。在条带化技术中包含两个重要的参数:条带深度和条带宽度,条带深度即条带的大小,也叫条带大小,指的是写在每块磁盘上的条带数据块的大小;条带宽度指的是同时可以并发读或写的条带数量,这个数量等于raid中的物理硬盘数量,例如一个经过条带化的,具有4块物理硬盘的阵列的条带宽度就是4。

由于分布式存储对异构的兼容,不同主机的硬盘数量可能不同,若采用固定的条带宽度,在某些情形下会导致无法达到最佳的读写性能效果。比如,当主机缩容时,可能出现设定的条带宽度大于分布式存储的总盘数的情况,这会导致一个条带组的多个条带分布在同一个硬盘上,从而导致上层一个顺序的读写请求在该盘上变成一个随机的读写请求,由于硬盘的随机性能远低于顺序性能,这将导致巨大的性能降低,又如,当主机扩容时,可能出现设定的条带宽度小于分布式存储的总盘数的情况,这就可能导致没有充分利用多块硬盘的性能,从而达不到最佳的性能效果。此外,由于上层应用业务的不同,若采用固定的条带深度,在某些情形下也会导致无法达到最佳的读写性能效果,比如当前上层应用业务所请求读写的单位数据流的大小是1mb(追求io吞吐量的业务),而下层的条带深度是4kb,这会导致一个io请求被拆分成多个发到不同的硬盘上,从而不能发挥出最佳的吞吐性能。为此,本实施例提出一种数据读写方法。

首先,分布式存储系统可以定期获取当前的各物理节点包含的硬盘数量,其中,硬盘可以是hdd(harddiskdrive,硬盘驱动器)、也可以是ssd(solidstatedrive,固态硬盘),也可以是hdd和ssd的混合硬盘,本实施例对此不作限定。

步骤s20,获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小;

该步骤中,分布式存储系统获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小,即iosize(io大小),其中,上层应用是相对底层硬件而言,指的是在应用层运行的软件服务,预设时长可以灵活设置,比如过去1小时、1天等。

步骤s30,根据所述单位数据流的大小调整与所述上层应用对应的条带深度;

该步骤中,分布式存储系统根据上述获取到的硬盘数量自适应调整与上层应用对应的条带宽度。

在一实施方式中,该步骤s30可以进一步包括:获取所述上层应用的io策略;若所述上层应用的io策略为io本地化策略,则获取包含硬盘数量最少的物理节点的硬盘数,并将获取到的所述硬盘数作为目标硬盘数;将与所述上层应用对应的条带宽度调整为小于或等于所述目标硬盘数。

具体地,在根据硬盘数量调整条带宽度时,首先获取上层应用当前的io策略,当上层应用当前的io策略为io本地化策略,即仅通过本地主机响应io请求时,获取包含硬盘数最少的物理节点,将该物理节点的硬盘数作为目标硬盘数,之后,调整上层应用对应的条带宽度,使得条带宽度小于或等于该目标硬盘数。由此,能够避免一个条带组内的条带落在同一个硬盘上,从而提高分布式存储系统的读写性能。

需要说明的是,当上层应用当前的io策略为io本地化策略时,还可以检测与io请求对应的待读写的数据是否为多副本数据,若是,则条带宽度应调整为小于或等于上述目标硬盘数除以相应的副本数。

步骤s40,根据所述单位数据流的大小调整与所述上层应用对应的条带深度。

该步骤中,分布式存储系统根据上述获取到的硬盘数量自适应调整与上层应用对应的条带宽度。

在一实施方式中,该步骤s30可以进一步包括:获取在所述预设时长内出现频次最高的单位数据流的大小;确定所述出现频次最高的单位数据流的大小所处的预设区间;查询单位数据流的大小区间与条带深度之间的预设映射关系,得到与所述预设区间对应的条带深度,并将与所述预设区间对应的条带深度作为目标条带深度;将与所述上层应用对应的条带深度调整为所述目标条带深度。

具体地,在本实施例中,可以预先设置单位数据流的大小区间与条带深度之间的映射关系,其中不同的区间对应不同的条带深度,区间的大小和数量可以灵活设置。在根据单位数据流的大小调整条带深度时,首先获取在所述预设时长内出现频次最高的单位数据流的大小,比如在预设时长内单位数据流的大小为1m出现了10次,128k出现了3次,64k出现了5次,则在所述预设时长内出现频次最高的单位数据流的大小为1m;然后,确定出现频次最高的单位数据流的大小所处的预设区间;之后,查询单位数据流的大小区间与条带深度之间的预设映射关系,得到与该预设区间对应的条带深度,并将与该预设区间对应的条带深度作为目标条带深度;最后,将与上层应用对应的条带深度调整为该目标条带深度。由此,能够使条带深度适应上层应用的单位数据流的大小,从而提高分布式存储系统的读写性能。

当然,除根据预设时长内出现频次最高的单位数据流的大小调整条带深度的方式外,也可以采用其它方式调整条带深度,比如将预设时长分为若干个时间段,分别为每个时间段设置对应的权重值,然后,将各时间段内下发的单位数据流的大小乘以对应的权重值后进行求和,得到一个单位数据流的大小的参考值,然后根据该参考值调整与上层应用对应的条带深度,具体实施时可灵活设置。

步骤s50,根据调整后的所述条带宽度和所述条带深度执行对所述各物理节点的数据读写操作。

该步骤中,当后续接收到上层应用下发的数据读写请求时,根据上述调整后的条带宽度和条带深度执行对各物理节点的数据读写操作,由此,实现了根据自适应调整后的条带深度和条带宽度执行对各物理节点的数据读写操作,有利于提高分布式存储系统的读写性能。

在本实施例中,获取分布式存储系统当前的各物理节点包含的硬盘数量;获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小;根据所述硬盘数量调整与所述上层应用对应的条带宽度;根据所述单位数据流的大小调整与所述上层应用对应的条带深度;根据调整后的所述条带宽度和所述条带深度执行对所述各物理节点的数据读写操作。通过这种方式,使得分布式存储系统的条带深度和条带宽度能够自适应主机的物理配置变化,以及上层应用下发的数据读写请求所请求读写的单位数据流的大小变化,从而提高了分布式存储系统的读写性能。

进一步地,基于本发明数据读写方法第一实施例,提出本发明数据读写方法第二实施例。

在本实施例中,所述数据读写方法还可以包括:若检测到创建文件分片组的指令,则获取调整后的所述条带宽度和所述条带深度;根据调整后的所述条带宽度和所述条带深度创建文件分片组。

在本实施例中,分布式存储系统在创建新文件或需要增加旧文件大小时,即触发创建文件分片的指令,此时分布式存储系统获取上述调整后的条带宽度和条带深度,然后根据调整后的条带宽度和条带深度确定文件分片的数量及每个分片的大小,根据文件分片的数量及每个分片的大小创建文件分片组。由此,保证了最新创建的文件分片组能够符合分布式存储系统物理节点的硬盘数量以及当前系统的数据分布策略,为提高文件的读写性能提供了前提保证。

进一步地,所述数据读写方法还可以包括:检测所述分布式存储系统是否满足预设的空闲条件;若所述分布式存储系统满足预设的空闲条件,则获取不符合调整后的所述条带宽度和所述条带深度的文件分片;将获取到的所述文件分片按照预设的业务类型进行归类;根据调整后的所述条带宽度和所述条带深度,将同一分类下的所述文件分片重新写入至所述分布式存储系统各物理节点的硬盘中。

在本实施例中,分布式存储系统可以启用一个检测程序,以实时检测系统当前是否满足预设的空闲条件,其中空闲条件包括但不限于系统cpu使用率和内存使用率小于预设阈值,当前系统时间处于预设的空闲时段等;若分布式存储系统当前满足预设的空闲条件,则对系统当前的所有文件分片进行扫描,以获取当前不符合上述调整后的条带宽度和所述条带深度的文件分片;然后,将获取到的文件分片按照预设的业务类型进行归类,其中预设的业务类型包括但不限于上传/下载视频、备份、大数据分析、读写数据库等;之后,根据调整后的条带宽度和条带深度,将同一分类下的文件分片重新写入至分布式存储系统各物理节点的硬盘中。

上述方式通过在系统空闲时,将不符合当前条带宽度和条带深度的文件分片重新写入硬盘,进一步提高了分布式存储系统的读写性能。

本发明还提供一种分布式存储装置。参照图3,图3为本发明实施例数据读写装置的模块示意图。本实施例中,所述分布式存储装置包括:

第一获取模块10,用于获取分布式存储系统当前的各物理节点包含的硬盘数量;

第二获取模块20,用于获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小;

第一调整模块30,用于根据所述硬盘数量调整与所述上层应用对应的条带宽度;

第二调整模块40,用于根据所述单位数据流的大小调整与所述上层应用对应的条带深度;

读写模块50,用于根据调整后的所述条带宽度和所述条带深度执行对所述各物理节点的数据读写操作。

进一步地,所述第一调整模块30还用于:

获取所述上层应用的io策略;

若所述上层应用的io策略为io本地化策略,则获取包含硬盘数量最少的物理节点的硬盘数,并将获取到的所述硬盘数作为目标硬盘数;

将与所述上层应用对应的条带宽度调整为小于或等于所述目标硬盘数。

进一步地,所述第二调整模块40还用于:

获取在所述预设时长内出现频次最高的单位数据流的大小;

确定所述出现频次最高的单位数据流的大小所处的预设区间;

查询单位数据流的大小区间与条带深度之间的预设映射关系,得到与所述预设区间对应的条带深度,并将与所述预设区间对应的条带深度作为目标条带深度;

将与所述上层应用对应的条带深度调整为所述目标条带深度。

进一步地,所述数据读写装置还包括:

第三获取模块,用于若检测到创建文件分片组的指令,则获取调整后的所述条带宽度和所述条带深度;

创建模块,用于根据调整后的所述条带宽度和所述条带深度创建文件分片组。

进一步地,所述数据读写装置还包括:

检测模块,用于检测所述分布式存储系统是否满足预设的空闲条件;

第四获取模块,用于若所述分布式存储系统满足预设的空闲条件,则获取不符合调整后的所述条带宽度和所述条带深度的文件分片;

归类模块,用于将获取到的所述文件分片按照预设的业务类型进行归类;

重写模块,用于根据调整后的所述条带宽度和所述条带深度,将同一分类下的所述文件分片重新写入至所述分布式存储系统各物理节点的硬盘中。

上述各功能模块实现的方法可参照本发明数据读写方法实施例,此处不再赘述。

本实施例第一获取模块10获取分布式存储系统当前的各物理节点包含的硬盘数量;第二获取模块20获取上层应用在预设时长内下发的数据读写请求所请求读写的单位数据流的大小;第一调整模块30根据所述硬盘数量调整与所述上层应用对应的条带宽度;第二调整模块40根据所述单位数据流的大小调整与所述上层应用对应的条带深度;读写模块50根据调整后的所述条带宽度和所述条带深度执行对所述各物理节点的数据读写操作。通过这种方式,使得分布式存储系统的条带深度和条带宽度能够自适应主机的物理配置变化,以及上层应用下发的数据读写请求所请求读写的单位数据流的大小变化,从而提高了分布式存储系统的读写性能。

本发明还提供一种计算机可读存储介质。

本发明计算机可读存储介质上存储有数据读写程序,所述数据读写程序被处理器执行时实现如上所述的数据读写方法的步骤。

其中,在所述处理器上运行的数据读写程序被执行时所实现的方法可参照本发明数据读写方法各个实施例,此处不再赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个计算机可读存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

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

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