数据存储方法、装置、系统及存储介质转让专利

申请号 : CN202010878608.X

文献号 : CN112019788B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴波夏伟强苏霞

申请人 : 杭州海康威视系统技术有限公司

摘要 :

本申请提供一种数据存储方法、装置、系统及存储介质,应用于云存储技术领域,通过获取待写入的录像数据,将录像数据切分为多个数据块,并将多个数据块存放至未满数据条带池中的可用数据条带的块缓存中,在可用数据条带写满时,对可用数据条带中的所有数据块进行数据编码,得到校验块,将录像数据的多个数据块和校验块写入磁盘阵列中。上述过程实现不同录像数据复用同一数据条带,属于条带级别的复用,提高了云存储系统的磁盘空间利用率。

权利要求 :

1.一种数据存储方法,其特征在于,包括:

获取待写入的录像数据;

将所述录像数据切分为多个数据块,并将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中;

在所述可用数据条带写满时,对所述可用数据条带中的所有数据块进行数据编码,得到校验块;

将所述可用数据条带中新增的多个数据块和所述校验块写入磁盘阵列中;

所述将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中之后,所述方法还包括:生成所述录像数据的索引数据,所述索引数据用于记录所述录像数据的属性信息;

将所述索引数据存放至未满索引条带池中的可用索引条带的块缓存中;

所述未满数据条带池中的可用数据条带包括其他录像数据占用的数据块,至少一个空闲的数据块,以及至少一个校验块;

所述未满索引条带池中的可用索引条带包括至少两个索引块,所述至少两个索引块的每一个索引块可存储多份不同录像数据的索引数据,且所述至少两个索引块均未被占满。

2.根据权利要求1所述的方法,其特征在于,若所述未满数据条带池中的所有可用数据条带中的空闲数据块的个数小于所述录像数据切分后的数据块的个数,所述方法还包括:生成一个新的数据条带,将所述录像数据中的剩余数据块存放至所述新的数据条带的块缓存中。

3.根据权利要求1所述的方法,其特征在于,若未满数据条带池中没有可用数据条带,所述方法还包括:生成一个或多个新的数据条带,将所述录像数据切分的多个数据块存放至所述新的数据条带的块缓存中。

4.根据权利要求2或3所述的方法,其特征在于,若生成的所述新的数据条带未写满,所述方法还包括:将所述新的数据条带存储至所述未满数据条带池中。

5.根据权利要求1所述的方法,其特征在于,若未满索引条带池中没有可用索引条带,所述方法还包括:生成一个新的索引条带,将所述录像数据的索引数据存放至所述新的索引条带的块缓存中。

6.根据权利要求5所述的方法,其特征在于,若生成的所述新的索引条带未写满,所述方法还包括:将所述新的索引条带存储至所述未满索引条带池中。

7.根据权利要求5或6所述的方法,其特征在于,若生成的所述新的索引条带未写满,且所述新的索引条带的大小与所述新的索引条带存储的所有索引数据对应的录像数据的总大小的比值大于预设值,将所述新的索引条带存储至所述未满索引条带池中。

8.一种数据存储装置,其特征在于,包括:

数据获取模块,用于获取待写入的录像数据;

数据处理模块,用于将所述录像数据切分为多个数据块,并将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中;

在所述可用数据条带写满时,对所述可用数据条带中的所有数据块进行数据编码,得到校验块;

数据写入模块,用于将所述可用数据条带中新增的多个数据块和所述校验块写入磁盘阵列中;

所述将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中之后,所述数据处理模块,还用于:生成所述录像数据的索引数据,所述索引数据用于记录所述录像数据的属性信息;

将所述索引数据存放至未满索引条带池中的可用索引条带的块缓存中;

其中,所述未满数据条带池中的可用数据条带包括其他录像数据占用的数据块,至少一个空闲的数据块,以及至少一个校验块;

所述未满索引条带池中的可用索引条带包括至少两个索引块,所述至少两个索引块的每一个索引块可存储多份不同录像数据的索引数据,且所述至少两个索引块均未被占满。

9.一种数据存储装置,其特征在于,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述数据存储装置能够执行权利要求1‑7中任一项所述的数据存储方法。

10.一种计算机可读存储介质,其特征在于,包括:用于存储计算机程序,当所述计算机程序在计算机上执行时,使得所述计算机执行权利要求1‑7中任一项所述的数据存储方法。

11.一种数据存储系统,其特征在于,包括:至少一个存储管理服务器,多个数据存储装置,以及磁盘阵列;

所述至少一个存储管理服务器通过虚拟服务器对外提供统一的虚拟IP地址,并在接收到数据写入请求时,根据多个所述数据存储装置的负载状态,确定执行数据存储的第一数据存储装置;

所述第一数据存储装置通过执行如权利要求1‑7中任一项所述的数据存储方法,将所述数据写入请求中的录像数据写入所述磁盘阵列中。

说明书 :

数据存储方法、装置、系统及存储介质

技术领域

[0001] 本申请涉及云存储技术领域,尤其涉及一种数据存储方法、装置、系统及存储介质。

背景技术

[0002] 随着视频监控系统规模越来越大,以及高清视频的大规模应用,视频监控系统中需要存储的数据和应用的复杂程度在不断提高,且视频数据需要长时间持续地保存到存储系统中,并要求随时可以调用,对存储系统的可靠性和性能等方面都提出了新的要求。在未来的复杂系统中,数据将呈现爆炸性的海量增长,提供对海量数据的快速存储及检索技术,显得尤为重要,存储系统正在成为视频监控技术未来发展的决定性因素。
[0003] 在移动侦测应用中,前端设备通常在检测到感兴趣的事件或异常事件时,才会产生实时录像,且事件持续的时间很短,因此录像数据比较小,可能只有几MB,录像数据对应的索引数据的冗余占比非常大,导致云存储的有效空间利用率非常低。另外,当前端设备频发异常或者云存储服务器与流媒体服务器之间的网络频发异常时,均会导致存储的录像数据为断断续续的小片段,同样会导致云存储的空间利用率低的问题。

发明内容

[0004] 本申请提供一种数据存储方法、装置、系统及存储介质,提高云存储的磁盘空间利用率。
[0005] 第一方面,本申请提供一种数据存储方法,包括:
[0006] 获取待写入的录像数据;
[0007] 将所述录像数据切分为多个数据块,并将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中;
[0008] 在所述可用数据条带写满时,对所述可用数据条带中的所有数据块进行数据编码,得到校验块;
[0009] 将所述录像数据的多个数据块和所述校验块写入磁盘阵列中。
[0010] 在一种可能的实施方式中,所述未满数据条带池中的可用数据条带包括其他录像数据占用的数据块,至少一个空闲的数据块,以及至少一个校验块。
[0011] 在一种可能的实施方式中,若所述未满数据条带池中的所有可用数据条带中的空闲数据块的个数小于所述录像数据切分后的数据块的个数,所述方法还包括:生成一个新的数据条带,将所述录像数据中的剩余数据块存放至所述新的数据条带的块缓存中。
[0012] 在一种可能的实施方式中,若未满数据条带池中没有可用数据条带,所述方法还包括:生成一个或多个新的数据条带,将所述录像数据切分的多个数据块存放至所述新的数据条带的块缓存中。
[0013] 在一种可能的实施方式中,若生成的所述新的数据条带未写满,所述方法还包括:将所述新的数据条带存储至所述未满数据条带池中。
[0014] 在一种可能的实施方式中,所述将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中之后,所述方法还包括:
[0015] 生成所述录像数据的索引数据,所述索引数据用于记录所述录像数据的属性信息;
[0016] 将所述索引数据存放至未满索引条带池中的可用索引条带的块缓存中。
[0017] 在一种可能的实施方式中,所述未满索引条带池中的可用索引条带包括至少两个索引块,所述至少两个索引块的每一个索引块可存储多份不同录像数据的索引数据,且所述至少两个索引块均未被占满。
[0018] 在一种可能的实施方式中,若未满索引条带池中没有可用索引条带,所述方法还包括:生成一个新的索引条带,将所述录像数据的索引数据存放至所述新的索引条带的块缓存中。
[0019] 在一种可能的实施方式中,若生成的所述新的索引条带未写满,所述方法还包括:将所述新的索引条带存储至所述未满索引条带池中。
[0020] 在一种可能的实施方式中,若生成的所述新的索引条带未写满,且所述新的索引条带的大小与所述新的索引条带存储的所有索引数据对应的录像数据的总大小的比值大于预设值,将所述新的索引条带存储至所述未满索引条带池中。
[0021] 第二方面,本申请提供一种数据存储装置,包括:
[0022] 数据获取模块,用于获取待写入的录像数据;
[0023] 数据处理模块,用于将所述录像数据切分为多个数据块,并将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中;
[0024] 在所述可用数据条带写满时,对所述可用数据条带中的所有数据块进行数据编码,得到校验块;
[0025] 数据写入模块,用于将所述录像数据的多个数据块和所述校验块写入磁盘阵列中。
[0026] 第三方面,本申请提供一种数据存储装置,包括:
[0027] 至少一个处理器;以及
[0028] 与所述至少一个处理器通信连接的存储器;其中,
[0029] 所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述数据存储装置能够执行如第一方面中任一项所述的数据存储方法。
[0030] 第四方面,本申请提供一种计算机可读存储介质,包括:用于存储计算机程序,当所述计算机程序在计算机上执行时,使得所述计算机执行如第一方面中任一项所述的数据存储方法。
[0031] 第五方面,本申请提供一种数据存储系统,包括:至少一个存储管理服务器,多个数据存储装置,以及磁盘阵列;
[0032] 所述至少一个存储管理服务器通过虚拟服务器对外提供统一的虚拟IP地址,并在接收到数据写入请求时,根据多个所述数据存储装置的负载状态,确定执行数据存储的第一数据存储装置;
[0033] 所述第一数据存储装置通过执行如第一方面中任一项所述的数据存储方法,将所述数据写入请求中的录像数据写入所述磁盘阵列中。
[0034] 本申请提供一种数据存储方法、装置、系统及存储介质,应用于云存储技术领域,通过获取待写入的录像数据,将录像数据切分为多个数据块,并将多个数据块存放至未满数据条带池中的可用数据条带的块缓存中,在可用数据条带写满时,对可用数据条带中的所有数据块进行数据编码,得到校验块,将录像数据的多个数据块和校验块写入磁盘阵列中。上述过程实现不同录像数据复用同一数据条带,属于条带级别的复用,提高了云存储系统的磁盘空间利用率。

附图说明

[0035] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0036] 图1为本申请实施例提供的一种数据存储方法的场景示意图;
[0037] 图2为本申请实施例提供的一种视频云存储系统的结构示意图;
[0038] 图3为本申请实施例提供的一种数据存储方法的流程图;
[0039] 图4为本申请实施例提供的一种数据条带的结构示意图;
[0040] 图5为本申请实施例提供的一种数据存储方法的流程图;
[0041] 图6为本申请实施例提供的一种索引条带的结构示意图;
[0042] 图7为本申请实施例提供的一种索引块的结构示意图;
[0043] 图8为本申请实施例提供的一种数据存储装置的结构示意图;
[0044] 图9为本申请实施例提供的一种数据存储装置的硬件结构示意图。

具体实施方式

[0045] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0046] 本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。
[0047] 此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0048] 首先,对本申请实施例涉及的专业名词进行简要说明。
[0049] 元数据服务器(Meta Data Server,MDS):用于存储录像数据的元数据信息,包括数据的对象标识object key、桶bucket、条带stripe信息,对象写入存储节点的IP,磁盘wwn(world wide name,全球唯一名字)信息等。
[0050] 对象存储设备(Object Storage Device,OSD):管理对象数据,并将它们放置在标准的磁盘系统上。
[0051] 切片服务(Split Service,SS)模块:用于对录像数据进行切分处理。
[0052] 桶:对象存储中,对数据存储区域的虚拟划分。
[0053] 画面组(Group of Pictures,GOP):一组连续的画面。
[0054] 纠删码(Erasure Code,EC)技术:主要通过纠删码算法将原始的数据进行编码得到冗余,并将数据和冗余一并存储起来,以达到容错的目的。其基本思想是将n块原始的数据元素通过一定的计算,得到m块冗余元素(校验块)。对于这n+m块的元素,当其中任意的m块元素出错(包括原始数据和冗余数据)时,均可以通过对应的重构算法恢复出原来的n块数据。生成校验的过程被成为编码(encoding),恢复丢失数据块的过程被称为解码(decoding)。
[0055] 多副本策略:将数据存储为多个副本(比如分布式文件系统HDFS,通常采用三副本),当某个副本丢失时,可以通过其他副本恢复数据。
[0056] 索引数据:是指录像数据的索引,记载了录像数据的相关属性信息,以GOP为单位进行组织,包括录像数据的大小,写入开始时间,结束时间,录像类型,包含多少个GOP,以及每个GOP的时间戳,大小,I帧长度等。该数据的特点是比较小,但非常重要,通常采用多副本策略进行数据存储。冗余数据是视频云存储系统内部产生的数据,用户并没有上传该数据,相对于录像数据而言,索引数据为非用户数据,属于冗余数据。
[0057] 索引数据的冗余占比:索引数据占用的数据块大小与索引数据对应的录像数据占用数据块的总大小的比值。需要说明的是,通常情况下采用三副本形式存储索引数据,一条录像数据对应的索引数据实际需要占用3个数据块(例如默认数据块大小为1M,则一条录像数据对应的索引数据需要占用3M的存储空间)。
[0058] 码流(Data Rate):是指视频文件在单位时间内使用的数据流量,也叫码率或码流率,是视频编码中画面质量控制中最重要的部分。一般来说同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。码流越大,说明单位时间内取样率越大,数据流,精度就越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。
[0059] 目前的视频云存储系统中,主要存储两种数据:录像数据和索引数据。索引数据作为视频云存储系统内的附属数据,一般数据比较小。以一路4MBps码流的录像为例,写入持续2小时,该录像数据本身的大小为4×2×3600/8MB=3600MB≈3.5GB,该录像数据的索引数据可能只有几百甚至几十KB(这里假定为100KB)。由于索引数据比较重要,如果丢失的话会影响录像数据的处理,因此索引数据会以副本方式存储。假设以三副本方式写入存储节点,云存储系统以块为逻辑单元写入数据,假设一个块的大小为1MB,那么100KB的索引数据,需要3个块来承载,即索引数据会占用3MB的空间。相对于3.5GB的录像数据,索引数据作为冗余数据,索引数据的冗余占比为3/(3.5×1024)≈0.08%。表面上看冗余占比不算大,然而当索引数据量不断增加,实际上会影响磁盘空间利用率,造成严重的空间浪费问题。
[0060] 对于录像数据而言,以下的三种场景会使得录像数据较小,可能只有几MB,这时录像数据的索引数据将会产生较大的冗余占比,也就意味着云存储系统的有效空间利用率非常低:
[0061] (1)移动侦测应用中,前端视频采集设备检测到感兴趣的事件或异常事件时开启实时录像,一般该事件的持续时间较短,所以录像数据较小,索引数据的冗余占比会非常大;
[0062] (2)前端视频采集设备频繁异常时,将导致流媒体服务器上的数据本身为断断续续的小片段,同样会产生(1)的问题;
[0063] (3)云存储系统与流媒体服务器之间的网络异常,也会产生(1)的问题。
[0064] 除了索引数据,其实小段的录像数据同样存在空间浪费问题,只是没有索引数据那么严重。示例性的,以1MB的录像数据为例,该数据只占用1个条带的一个unit块(假设块的大小为1MB),那么对于4+2类型的条带,该条带有5MB的冗余数据,1MB的有效数据,空间浪费比较严重。
[0065] 针对上述技术问题,本申请实施例提供一种数据存储方法,应用于云存储技术领域,考虑采用条带数据的复用策略来解决数据存储的空间浪费问题。通过获取待写入的录像数据,对录像数据进行切片处理,获取已有数据条带和索引条带,或者生成新的数据条带和索引条带,将录像数据和索引数据分别存放至数据条带和索引条带的块缓存中,通过判断条带的使用情况,确定是否需要将条带放入缓存池中,如果条带已满则无需继续复用。上述数据存储方法能够有效提高云存储系统的磁盘利用率,避免磁盘空间的浪费问题。
[0066] 在介绍本申请实施例提供的数据存储方法之前,首先对该方法的应用场景进行简要介绍。
[0067] 图1为本申请实施例提供的一种数据存储方法的场景示意图,如图1所示,本实施例提供的场景中包括多个视频采集设备(例如监控摄像头)、流媒体服务器、客户端、监控管理平台以及视频云存储系统。
[0068] 用户通过客户端在监控管理平台中设置录像计划,录像计划下发到存储管理节点集群,存储管理节点集群将这些录像计划通过负载均衡到各个存储节点上。存储节点根据录像计划,从流媒体服务器拉取录像流数据,然后写入视频云存储系统的磁盘阵列中。
[0069] 本实施例中,视频云存储系统是基于对象的分布式存储系统,包括存储管理节点集群、存储节点集群以及磁盘阵列。其中,存储管理节点集群中的各存储管理节点用于存储数据的元数据信息,包括数据的对象标识,桶,条带信息,对象写入存储节点的IP,磁盘wwn等。存储节点集群中的各存储节点用于存储具体的对象数据。
[0070] 在数据写入过程中,用户通过客户端向视频云存储系统的存储管理节点集群发起数据写入请求,存储管理节点集群根据当前视频云存储系统中的各个存储节点的负载情况,选择负载压力最小的存储节点对录像数据进行存储,存储是基于对象进行的。除了存储录像数据之外,还需要对录像数据的索引数据进行存储。其中,录像数据的存储采用纠删码技术,保证数据安全性。录像数据的索引数据采用副本存储模式,例如三副本存储模式。
[0071] 在数据读取过程中,用户可通过客户端在监控管理平台上调取存储于视频云存储系统中的至少一路视频采集设备的历史录像数据或实时录像数据,并通过监控管理平台的大屏幕观看至少一路录像数据。
[0072] 本申请实施例提供的数据存储方法主要涉及上述的数据写入过程。
[0073] 在上述场景示意图的基础上,下面对视频云存储系统的结构作进一步说明。作为一种示例,图2示出了一种视频云存储系统的结构示意图,如图2所示,视频云存储系统包括:取流模块、对象存储模块和磁盘。其中,对象存储模块包括MDS模块、SS模块和OSD模块。对象存储模块中一切皆对象,对象存储模块将对象存储在以bucket为单位的虚拟资源存储池中。图2中的MDS1~MDS3为3台存储管理节点,SS1+OSD1~SS3+OSD3为3台存储节点,www1~wwwn为存储节点上所有的磁盘。存储管理节点通过LVS(Linux虚拟服务器)对外提供虚拟IP作为对象云存储的唯一入口。
[0074] 作为一种示例,取流模块根据录像计划,从流媒体服务器获取录像流数据,SS模块和OSD模块根据预设的数据存储规则将录像流数据写入磁盘中。
[0075] 作为一种示例,取流模块还可以作为存储节点的一个模块,取流模块可通过调用软件开发工具包SDK,将录像数据写入对象存储模块。具体的,取流模块通过对象存储模块中的MDS模块获取当前负载压力最小的存储节点,然后通过该存储节点的IP和端口连接存储节点,将录像数据通过协议发送给存储节点中的SS模块。
[0076] 作为一种示例,MDS模块接收数据写入请求,MDS模块根据当前各个存储节点的负载情况,选择负载压力最小的存储节点,MDS模块向取流模块发送选择的存储节点的IP和端口PORT,取流模块通过该存储节点的IP和PORT,向该存储节点发送从流媒体服务器获取的录像流数据。SS模块和OSD模块根据预设的数据存储规则将录像流数据写入磁盘中。
[0077] 作为一种示例,SS模块接收取流模块传输的待写入的录像流数据,首先将该数据对应的录像编码器ID上报给MDS模块,MDS模块根据录像编码器ID生成一个对象,并返回对象的版本号和纠删码级别(即条带的类型,比如4+1表示一个条带有4个数据块和1个校验块)。MDS模块同时在其数据库中记录该对象的元数据信息。SS模块根据MDS模块返回的纠删码级别,存储接收到的录像流数据。
[0078] 下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
[0079] 图3为本申请实施例提供的一种数据存储法的流程图。本实施例的数据存储方法可应用于图1所示的任一存储节点,或者图2所示的对象存储模块。为了便于理解,下面以存储节点为执行主体进行方案说明。
[0080] 如图3所示,该数据存储方法包括如下步骤:
[0081] 步骤101、获取待写入的录像数据。
[0082] 本实施例中,客户端向存储管理节点集群发起数据写入请求,该数据写入请求包括录像编码器ID以及待写入的录像数据,存储管理节点集群根据当前各个存储节点的负载情况,选择负载压力最小的存储节点,向客户端返回选择的存储节点的IP和端口PORT,客户端通过该存储节点的IP和PORT,向该存储节点发送从流媒体服务器获取的待写入的录像数据。
[0083] 另外,存储管理节点集群可根据数据写入请求中的录像编码器ID,确定存储录像数据的纠删码级别,例如纠删码级别为4+1,则表示数据条带由4个数据块和1个校验块组成。
[0084] 步骤102、将录像数据切分为多个数据块,并将多个数据块存放至未满数据条带池中的可用数据条带的块缓存中。
[0085] 其中,未满数据条带池中的可用数据条带包括其他录像数据占用的数据块,至少一个空闲的数据块,以及至少一个校验块。
[0086] 本实施例中,存储节点中的SS模块首先根据纠删码级别,将录像数据进行切分处理,得到多个数据块。SS模块查找未满数据条带池,如果未满数据条带池中有可用的数据条带,则取出该数据条带,并将录像数据的多个数据块写入未满数据条带的块缓存中。
[0087] 可选的,在一些实施例中,若未满数据条带池中的所有可用数据条带中的空闲数据块的个数小于录像数据切分后的数据块的个数,SS模块生成一个新的数据条带,将录像数据中的剩余数据块存放至新的数据条带的块缓存中。
[0088] 可选的,在一些实施例中,若未满数据条带池中没有可用数据条带,SS模块生成一个或多个新的数据条带,将录像数据切分的多个数据块存放至新的数据条带的块缓存中。
[0089] 可选的,在一些实施例中,若生成的新的数据条带未写满,SS模块将新的数据条带放入未满数据条带池中,以便后续的录像数据复用该数据条带中的数据块。
[0090] 图4为本申请实施例提供的一种数据条带的结构示意图,如图4所示,数据条带0和数据条带1均为4+1类型的条带,可用于存储4个数据块和1个校验块。其中,数据条带0中的块0存储对象1(即录像数据1的一个数据块),数据条带0中的块1~块3存储对象2(即录像数据2的三个数据块),此时数据条带0已写满,不用退回到未满数据条带池。数据条带1中的块0存储对象2(即录像数据2的最后一个数据块),数据条带1中的块1和块2存储对象3(即录像数据3的两个数据块),由于数据条带1存在一个空闲块3,数据条带1将被退回至未满数据条带池,以便后续的其他录像数据复用该空闲块。上述录像数据1、2、3为不同的录像数据,录像数据1和录像数据2复用数据条带0,录像数据2和录像数据3复用数据条带1。
[0091] 综上可见,本实施例的录像数据在数据条带中以块为单位进行存储。
[0092] 步骤103、在可用数据条带写满时,对可用数据条带中的所有数据块进行数据编码,得到校验块。
[0093] 步骤104、将录像数据的多个数据块和校验块写入磁盘阵列中。
[0094] 本实施例中,存储节点中的SS模块将录像数据的多个数据块存放至未满数据条带池中的可用数据条带的块缓存之后,如果该数据条带写满,对该数据条带中的所有数据块进行数据编码,即计算纠删码,得到冗余数据(即校验块),将该数据条带中的新增的多个数据块和计算得到的校验块,一起写入存储节点的OSD模块中,OSD模块根据分配规则将该数据条带中的新增的多个数据块和校验块写入磁盘阵列中。
[0095] 示例性的,如图4所示的数据条带0,在写入对象2的多个数据块之前,数据条带0已经写入对象1的1个数据块,即数据条带0中的块0,此时对应的校验块是对数据条带中的块0进行数据编码得到的。采用本实施例提供的数据条带复用方案,在写入新的对象2时,可复用数据条带池中未写满的数据条带0,将对象2的多个数据块写入数据条带0中的块1至块3,此时数据条带0写满,此时需要重新计算数据条带0中的校验块,对数据条带0中的所有数据块(块0至块4)进行数据编码,得到最新的校验块,将数据条带0中新增的块1至块3以及最新的校验块一起写入OSD模块,再由OSD模块将新增的块1至块3写入磁盘阵列中,同时更新该数据条带0在磁盘阵列中已存储的校验块。
[0096] 需要说明的是,当磁盘中的局部数据块损坏的情况下,可以通过其他正常的数据块来恢复损坏的数据块。本实施例的录像数据采用纠删码技术进行数据存储,与多副本方式存储相比,具有冗余度低、磁盘利用率高等优势。
[0097] 本实施例示出了一种数据存储方法,通过获取待写入的录像数据,将录像数据切分为多个数据块,并将多个数据块存放至未满数据条带池中的可用数据条带的块缓存中,在可用数据条带写满时,对可用数据条带中的所有数据块进行数据编码,得到校验块,将录像数据的多个数据块和校验块写入磁盘阵列中。上述过程实现不同录像数据复用同一数据条带,属于条带级别的复用,提高了云存储系统的磁盘空间利用率。
[0098] 图5为本申请实施例提供的一种数据存储方法的流程图,在图3所示实施例的基础上,将多个数据块存放至未满数据条带池中的可用数据条带的块缓存中之外,如图5所示,本实施例的数据存储方法还包括如下步骤:
[0099] 步骤201、生成录像数据的索引数据,索引数据用于记录录像数据的属性信息。
[0100] 本实施例中,存储节点的SS模块将录像数据写入数据条带的块缓存后,与此同时,会生成录像数据对应的索引数据,并将索引数据写入索引条带。
[0101] 如前述实施例所述,录像数据的索引数据是录像数据的索引,记载包括录像数据的大小,写入开始时间,结束时间,录像类型,包含GOP的个数,以及每个GOP的时间戳、大小、I帧长度等属性信息。索引数据在数据读取过程是非常重要的数据,云存储系统通过解析索引数据,结合用户传递的查询参数,可快速查找到满足条件的数据范围,从而快速下载该数据范围内的录像数据。
[0102] 步骤202、将索引数据存放至未满索引条带池中的可用索引条带的块缓存中。
[0103] 本实施例中,SS模块查找未满索引条带池,如果未满索引条带池中有可用的索引条带,则取出该索引条带,并将索引数据写入未满索引条带的块缓存中。
[0104] 其中,未满索引条带池中的可用索引条带包括至少两个索引块,至少两个索引块的每一个索引块可存储多份不同录像数据的索引数据,且至少两个索引块均未被占满。
[0105] 需要说明的是,索引条带采用多副本模式,因此索引条带至少包括两个索引块,若采用三副本模式,则索引条带包括三个索引块。
[0106] 图6为本申请实施例提供的一种索引条带的结构示意图,如图6所示,索引条带0采用三副本模式,包括3个索引块,分别为块0、块1、块2。当前索引条带0的每一个索引块中均存储有:对象1的索引数据(即录像数据1的索引数据),对象2的索引数据(即录像数据2的索引数据),对象3的索引数据(即录像数据3的索引数据),且当前索引条带0的每一个索引块均未写满。
[0107] 由图6可知,索引条带采用的是三副本模式,块0~块2的数据内容完全相同。以块0为例,里面存储的数据内容包括不同录像数据的索引数据,这主要是因为索引数据比较小,为了进一步提高磁盘空间利用率,本实施例对索引数据进行块级别的复用。
[0108] 可选的,在一些实施例中,若未满索引条带池中没有可用索引条带,SS模块生成一个新的索引条带,将录像数据的索引数据存放至新的索引条带的块缓存中。
[0109] 可选的,在一些实施例中,若生成的新的索引条带未写满,SS模块将新的索引条带放入未满索引条带池中。示例性的,如图6所示,索引条带0的每一个索引块均未写满,可将该索引条带0退回至未满索引条带池。
[0110] 可选的,在一些实施例中,若生成的新的索引条带未写满,且新的索引条带的大小与新的索引条带存储的所有索引数据对应的录像数据的总大小的比值大于预设值,SS模块会将新的索引条带放入未满索引条带池中。
[0111] 上述示例中,SS模块会实时更新未满索引条带中所有索引数据对应的录像数据的总大小,实时统计未满索引条带的大小与未满索引条带存储的所有索引数据对应的录像数据的总大小的比值,在该索引条带未写满且上述比值大于预设值时,说明索引数据的冗余占比较大,可以继续复用该索引条带,因此将该索引条带退回至未满索引条带池,以便后续写入的新的录像数据的索引数据复用该索引条带中的空闲块。反之,在该索引条带未写满,且上述比值小于预设值时,或者,在索引条带写满时,则不用退回未满索引条带池。
[0112] 本实施例示出了一种数据存储方法,在将录像数据存储后,生成录像数据的索引数据,将索引数据存放至未满索引条带池中的可用索引条带的块缓存中。上述过程实现不同录像数据的索引数据复用索引条带中的同一索引块,属于块级别的复用,进一步提高了云存储系统的磁盘空间利用率。
[0113] 上述实施例示出的索引条带的索引块可能混杂了不同录像数据的索引数据,如果要从中查找到某一录像数据的索引数据时,需要能快速定位并从索引块中提取出来。本实施例还提供一种索引块的数据结构设计方法,将索引块的存储区域进行切分。图7为本申请实施例提供的一种索引块的结构示意图。如图7所示,该索引块包括三部分信息,分别为公共信息、映射信息以及帧信息。以索引块为2MB为例,索引块的前192字节为公共信息字段,包括签名、版本号、类型、录像头长度、总个数、有效个数、锁定时间、锁定持续时间、校验值、录像头数据等字段。索引块的中间78024字节为映射信息字段,主要记录每个复用的录像数据的索引信息在该块中的偏移,例如录像数据1的索引的偏移是78025~79000,录像数据2的索引的偏移是79001~80000等。索引块的剩余字节为帧信息,即具体的录像数据的索引数据,主要是录像数据的属性信息。应理解,定位某一录像索引时,只需要读取映射信息,找到对应的录像索引的偏移,根据偏移定位到帧信息段,即可读取出索引数据。
[0114] 本实施例示出了索引块的数据结构设计,通过快速定位某段录像的索引数据,为录像数据下载、回放业务提供技术支撑。
[0115] 本申请实施例可以根据上述方法实施例对数据存储装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以使用硬件的形式实现,也可以使用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。下面以使用对应各个功能划分各个功能模块为例进行说明。
[0116] 图8为本申请实施例提供的一种数据存储装置的结构示意图。如图8所示,该数据存储装置300,包括:
[0117] 数据获取模块301,用于获取待写入的录像数据;
[0118] 数据处理模块302,用于将所述录像数据切分为多个数据块,并将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中;
[0119] 在所述可用数据条带写满时,对可用数据条带中的所有数据块进行数据编码,得到校验块;
[0120] 数据写入模块303,用于将所述录像数据的多个数据块和所述校验块写入磁盘阵列中。
[0121] 在一种可能的实施方式中,所述未满数据条带池中的可用数据条带包括其他录像数据占用的数据块,至少一个空闲的数据块,以及至少一个校验块。
[0122] 在一种可能的实施方式中,若所述未满数据条带池中的所有可用数据条带中的空闲数据块的个数小于所述录像数据切分后的数据块的个数,数据处理模块302,还用于生成一个新的数据条带,将所述录像数据中的剩余数据块存放至所述新的数据条带的块缓存中。
[0123] 在一种可能的实施方式中,若未满数据条带池中没有可用数据条带,数据处理模块302,还用于生成一个或多个新的数据条带,将所述录像数据切分的多个数据块存放至所述新的数据条带的块缓存中。
[0124] 在一种可能的实施方式中,若生成的所述新的数据条带未写满,数据处理模块302,还用于将所述新的数据条带存储至所述未满数据条带池中。
[0125] 在一种可能的实施方式中,所述将所述多个数据块存放至未满数据条带池中的可用数据条带的块缓存中之后,数据处理模块302,还用于:
[0126] 生成所述录像数据的索引数据,所述索引数据用于记录所述录像数据的属性信息;
[0127] 将所述索引数据存放至未满索引条带池中的可用索引条带的块缓存中。
[0128] 在一种可能的实施方式中,所述未满索引条带池中的可用索引条带包括至少两个索引块,所述至少两个索引块的每一个索引块可存储多份不同录像数据的索引数据,且所述至少两个索引块均未被占满。
[0129] 在一种可能的实施方式中,若未满索引条带池中没有可用索引条带,数据处理模块302,还用于生成一个新的索引条带,将所述录像数据的索引数据存放至所述新的索引条带的块缓存中。
[0130] 在一种可能的实施方式中,若生成的所述新的索引条带未写满,数据处理模块302,还用于将所述新的索引条带存储至所述未满索引条带池中。
[0131] 在一种可能的实施方式中,若生成的所述新的索引条带未写满,且所述新的索引条带的大小与所述新的索引条带存储的所有索引数据对应的录像数据的总大小的比值大于预设值,数据处理模块302,用于将所述新的索引条带存储至所述未满索引条带池中。
[0132] 本实施例的数据获取模块301相当于图2所示的取流模块,数据处理模块相当于图2所示的SS模块,数据写入模块相当于图2所示的OSD模块。
[0133] 本申请实施例提供的数据存储装置,用于执行前述任一方法实施例中的各个步骤,其实现原理和技术效果类似,在此不再赘述。
[0134] 图9为本申请实施例提供的一种数据存储装置的硬件结构示意图。如图9所示,该数据存储装置400,包括:
[0135] 至少一个处理器401(图9中仅示出了一个处理器);以及
[0136] 与所述至少一个处理器通信连接的存储器402;其中,
[0137] 所述存储器402存储有可被所述至少一个处理器401执行的指令,所述指令被所述至少一个处理器401执行,以使所述数据存储装置400能够执行前述任一方法实施例中的各个步骤。
[0138] 本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当所述计算机执行指令被处理器执行时用于实现前述任一方法实施例中的技术方案。
[0139] 本申请还提供一种数据存储系统,包括:至少一个存储管理服务器,多个数据存储装置,以及磁盘阵列。具体可参见附图1中的视频云存储系统,本实施例的存储管理服务器相当于图1所示的存储管理节点,本实施例的数据存储装置相当于图1所示的存储节点。
[0140] 至少一个存储管理服务器通过虚拟服务器对外提供统一的虚拟IP地址,并在接收到数据写入请求时,根据多个数据存储装置的负载状态,确定执行数据存储的第一数据存储装置。
[0141] 第一数据存储装置通过执行如前述任一方法实施例中的各个步骤,将数据写入请求中的录像数据写入磁盘阵列中。
[0142] 应理解,本申请实施例中提及的处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0143] 还应理解,本申请实施例中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read‑Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DR RAM)。
[0144] 需要说明的是,当处理器为通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件时,存储器(存储模块)集成在处理器中。
[0145] 应注意,本文描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
[0146] 应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
[0147] 以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。