一种面向流数据的分布式文件系统及流数据写入方法转让专利

申请号 : CN201910020732.X

文献号 : CN109766325B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴思齐

申请人 : 吴思齐

摘要 :

本发明提供一种面向流数据的分布式文件系统及流数据写入方法,面向流数据的分布式文件系统包括存储单元、目录结构和文件结构;目录结构为三层结构,分别为文件系统根目录NetRoot、文件系统文件夹NetDir和文件系统文件NetFile;文件系统文件NetFile结构为:按存储天数周期T,自上而下划分为T层;对于任意的层,按小时分区,每1小时1个分区,对于任意的分区,按所述功能组包含的节点数量分块,包含N个数据块。优点为:本发明提供的面向流数据的分布式文件系统,提供了相对简单的目录结构和文件结构,能够低成本高效率的满足流数据存储、备份和循环覆盖的功能需求,并方便快速的检索和读取。

权利要求 :

1.一种面向流数据的分布式文件系统,其特征在于,包括存储单元、目录结构和文件结构;

所述存储单元包括功能组和备份节点;其中,所述功能组包括N个节点Node_i,i=1、

2,…,N;在所述N个节点中,X个节点为用于存储原始数据的存储节点,Y个节点为用于存储校验数据的校验节点;X+Y=N;所述备份节点用于当某个所述功能组中的节点出现故障时,临时替换故障节点;

对于任意的节点Node_i,均包含D块硬盘Drv_ij,j=1、2,…,D,硬盘Drv_ij含义为:所述功能组的第i个节点Node_i包含的第j块硬盘;

将原始文件系统的文件夹,简称为真实文件夹;将原始文件系统的文件,简称为真实文件;

对于任意的硬盘Drv_ij,均具有与数据源S唯一对应的第一级真实文件夹DiskDirS_ij,S第一级真实文件夹DiskDir_ij含义为:位于节点Node_i的第j块硬盘上的并且与数据源S唯一对应的第一级真实文件夹;

每个所述第一级真实文件夹DiskDirS_ij包含T个第二级真实文件夹DiskDirS_ijk,k=1、

2,…,T,其中,T为存储天数周期;第二级真实文件夹DiskDirS_ijk的含义为:第一级真实文件夹DiskDirS_ij包含的第k个第二级真实文件夹;

每个所述第二级真实文件夹DiskDirS_ijk具有m个真实文件,m=24/D;其中,位于节点Node_i的第1块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hrSk_

0.ci、hrSk_1.ci,…,hrSk_(m-1).ci;其中,hrk_0.ci代表第K天第0个小时采集到的数据源S的各个文件周期的第i个簇组成的真实文件;hrSk_1.ci代表第K天第1个小时采集到的数据源S的各个文件周期的第i个簇组成的真实文件;依此类推,hrSk_(m-1).ci代表第K天第m-1个小时采集到的数据源S的各个文件周期的第i个簇组成的真实文件;

位于节点Node_i的第2块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hrSk_m.ci、hrSk_(m+1).ci,…,hrSk_(2m-1).ci;依此类推,位于节点Node_i的第D块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hrSk_(D-1)m.ci、hrSk_((D-1)m+1).ci,…,hrSk_(Dm-1).ci;其中,hrSk_(Dm-1).ci即为hrSk_23.ci;

所述目录结构为三层结构,分别为文件系统根目录NetRoot、文件系统文件夹NetDir和文件系统文件NetFile;其中,所述文件系统根目录NetRoot包含多个文件系统文件夹NetDir;每个所述文件系统文件夹NetDir为面向流数据的分布式文件系统的文件夹,唯一对应一个所述存储单元,所述文件系统文件夹NetDir的命名为对应的存储单元ID;每个所述文件系统文件夹NetDir包含多个文件系统文件NetFile,每个所述文件系统文件NetFile唯一对应一个数据源,所述文件系统文件NetFile的命名为对应的数据源ID;

每个所述文件系统文件NetFile的组织结构为:所述文件系统文件NetFile按存储天数周期T,自上而下划分为T层LayerS_p,p=1、2,…,T,其中,LayerS_p的含义为:与数据源S对应的所述文件系统文件NetFile中的第p层的数据内容,用于存储在某个存储天数周期的第p天所采集到的数据源S的数据;

S S

对于任意的Layer _p,按小时分区,每1小时1个分区,因此,Layer _p包含24个分区DistrictS_pq,q=1、2,…,24;DistrictS_pq的含义为:与数据源S对应的所述文件系统文件NetFile中的第p层第q个分区的数据内容,用于存储在某个存储天数周期的第p天的第q个小时所采集到的数据源S的数据;

对于任意的DistrictS_pq,按所述功能组包含的节点数量分块,包含N个数据块BlockS_pqi,i=1、2,…,N;每个数据块BlockS_pqi唯一对应所述存储单元中的一个真实文件,即:对应hrSP_q.ci,为第p天第q个小时采集到的数据源S的各个文件周期的所有第i个簇组成的真实文件。

2.根据权利要求1所述的一种面向流数据的分布式文件系统,其特征在于,所述存储单元包括至少一个功能组和1个备份节点;各个所述功能组共享同一个所述备份节点。

3.根据权利要求1所述的一种面向流数据的分布式文件系统,其特征在于,N为7;X为6;

Y为1;D为4。

4.一种基于权利要求1-3任一项所述的面向流数据的分布式文件系统的流数据写入方法,其特征在于,包括以下步骤:步骤1,对于数据源S输出的流数据,确定以下流数据存储要求:确定存储天数周期为T、每簇Cluster的数据大小、每个文件生成周期所需要的簇Cluster的个数为N个、每个文件生成周期所需要的原始簇的个数为X个、每个文件生成周期所需要的校验簇的个数为Y个;其中,X+Y=N;

步骤2,根据所述流数据存储要求,构建与所述数据源S对应的权利要求1所述的面向流数据的分布式文件系统;

步骤3,设定基准日为第1日,从基准日开始,假设在第u日实时接收数据源S输出的流数据,则数据源S输出的流数据通过以下方法写入到所述面向流数据的分布式文件系统中:步骤3.1,计算u除以T的余数,余数为k;则第u日对应某个存储天数周期中的第k天;

步骤3.2,设当前接收小时为0~23小时中的第hrSk_f小时,其中,f=0、1,…,23;

确定与当前接收小时对应的硬盘编号,方法为:

如果f为0、1,…,(m-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_i1;

如果f为m、(m+1),…,(2m-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_i2;

依此类推

如果f为(D-1)m、((D-1)m+1),…,(Dm-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_iD;

设本步骤中确定的与当前接收小时hrSk_f对应的硬盘编号为Drv_iF;F=1、2,…,D,Drv_iF代表功能组的第i个节点Node_i第F块硬盘;

步骤3.3:

步骤3.3.1,从第hrSv_f小时开始,在第1个文件生成周期,依次接收到流数据的X个簇,编号为:簇C11、簇C12,…,簇C1X;根据簇C11、簇C12,…,簇C1X,计算出Y个检验簇,分别编号为:簇C1(X+1)、簇C1(X+2),…,簇C1(X+Y);簇C1(X+Y)即为簇C1N;

由此得到第1个文件生成周期对应的N个簇,编号为:簇C11、簇C12,…,簇C1X、簇C1(X+1)、簇C1(X+2),…,簇C1N;

Sk

将簇C11写入节点Node_1的第F块硬盘上的第k个第二级真实文件夹中的真实文件hr _f.c1;

将簇C12写入节点Node_2的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c2;

依此类推

将簇C1N写入节点Node_N的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.cN;

步骤3.3.2,在第hrSv_f小时的第2个文件生成周期,共得到N个簇,编号为:簇C21、簇C22,…,簇C2X、簇C2(X+1)、簇C2(X+2),…,簇C2N;其中,簇C21、簇C22,…,簇C2X为原始流数据簇;簇C2(X+1)、簇C2(X+2),…,簇C2N为校验簇;

Sk

将簇C21写入节点Node_1的第F块硬盘上的第k个第二级真实文件夹中的真实文件hr _f.c1;

将簇C22写入节点Node_2的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c2;

依此类推

将簇C2N写入节点Node_N的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.cN;

步骤3.3.3,如此不断循环,将第hrSv_f小时的每个完整的文件生成周期中的各个簇分散存储到对应节点的真实文件中;

对于最后一个第hrSv_f小时的文件生成周期,设为第b个文件生成周期,簇Cb1、簇Cb2,…,簇CbX、簇Cb(X+1)、簇Cb(X+2),…,簇CbN采用以下方式确定:簇Cb(X+1)、簇Cb(X+2),…,簇CbN为校验簇;簇CbX为用于存储标识数据的标识簇;对于其余X-1个簇,即:簇Cb1、簇Cb2,…,簇Cb(X-1)中,如果在本文件生成周期,只接收到部分数据流的原始簇,则其余簇补0;然后采用步骤3.3.1和步骤3.3.1的方式,将N个簇分散存储到对应节点的真实文件中。

说明书 :

一种面向流数据的分布式文件系统及流数据写入方法

技术领域

[0001] 本发明属于数据存储技术领域,具体涉及一种面向流数据的分布式文件系统及流数据写入方法。

背景技术

[0002] 随着信息技术和网络技术的发展,所产生的数据规模越来越大,其中很大一部分是流数据,如音频数据、视频数据、物联网采集数据等。这类流数据在工业和商业应用环境中,一直在不间断的产生。
[0003] 目前,对流数据的存储,大多采用普通文件的方式,但由于流数据一直在不停的产生,受限于存储空间的限制,需要定期的备份、删除或覆盖,且受限于普通文件系统的文件结构,需要对存储文件按时间或尺寸进行不断分割。由于存在以上问题,造成流数据存储效率低,不易对流数据进行有效的管理。

发明内容

[0004] 针对现有技术存在的缺陷,本发明提供一种面向流数据的分布式文件系统及流数据写入方法,可有效解决上述问题。
[0005] 本发明采用的技术方案如下:
[0006] 本发明提供一种面向流数据的分布式文件系统,包括存储单元、目录结构和文件结构;
[0007] 所述存储单元包括功能组和备份节点;其中,所述功能组包括N个节点 Node_i,i=1、2,…,N;在所述N个节点中,X个节点为用于存储原始数据的存储节点,Y个节点为用于存储校验数据的校验节点;X+Y=N;所述备份节点用于当某个所述功能组中的节点出现故障时,临时替换故障节点;
[0008] 对于任意的节点Node_i,均包含D块硬盘Drv_ij,j=1、2,…,D,硬盘Drv_ij含义为:所述功能组的第i个节点Node_i包含的第j块硬盘;
[0009] 将原始文件系统的文件夹,简称为真实文件夹;将原始文件系统的文件,简称为真实文件;
[0010] 对于任意的硬盘Drv_ij,均具有与数据源S唯一对应的第一级真实文件夹 DiskDirS_ij,第一级真实文件夹DiskDirS_ij含义为:位于节点Node_i的第j块硬盘上的并且与数据源S唯一对应的第一级真实文件夹;
[0011] 每个所述第一级真实文件夹DiskDirS_ij包含T个第二级真实文件夹DiskDirS_ ijk,k=1、2,…,T,其中,T为存储天数周期;第二级真实文件夹DiskDirS_ijk的含义为:第一级真实文件夹DiskDirS_ij包含的第k个第二级真实文件夹;
[0012] 每个所述第二级真实文件夹DiskDirS_ijk具有m个真实文件,m=24/D;其中,位于节点Node_i的第1块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hrSk_0.ci、hrSk_1.ci,…,hrSk_(m-1).ci;其中,hrk_0.ci代表第K天第 0个小时采集到的数据源S的各个文件周期的第i个簇组成的真实文件;hrSk_1.ci 代表第K天第1个小时采集到的数据源S的各个文件周期的第i个簇组成的真实文件;依此类推,hrSk_(m-1).ci代表第K天第m-1个小时采集到的数据源S的各个文件周期的第i个簇组成的真实文件;
[0013] 位于节点Node_i的第2块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hrSk_m.ci、hrSk_(m+1).ci,…,hrSk_(2m-1).ci;依此类推,位于节点Node_i的第D块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hrSk_(D-1)m.ci、hrSk_((D-1)m+1).ci,…,hrSk_(Dm-1).ci;其中, hrSk_(Dm-1).ci即为hrSk_23.ci;
[0014] 所述目录结构为三层结构,分别为文件系统根目录NetRoot、文件系统文件夹NetDir和文件系统文件NetFile;其中,所述文件系统根目录NetRoot包含多个文件系统文件夹NetDir;每个所述文件系统文件夹NetDir为面向流数据的分布式文件系统的文件夹,唯一对应一个所述存储单元,所述文件系统文件夹NetDir 的命名为对应的存储单元ID;每个所述文件系统文件夹NetDir包含多个文件系统文件NetFile,每个所述文件系统文件NetFile唯一对应一个数据源,所述文件系统文件NetFile的命名为对应的数据源ID;
[0015] 每个所述文件系统文件NetFile的组织结构为:所述文件系统文件NetFile按存储天数周期T,自上而下划分为T层LayerS_p,p=1、2,…,T,其中,LayerS_p 的含义为:与数据源S对应的所述文件系统文件NetFile中的第p层的数据内容,用于存储在某个存储天数周期的第p天所采集到的数据源S的数据;
[0016] 对于任意的LayerS_p,按小时分区,每1小时1个分区,因此,LayerS_p包含 24个分区DistrictS_pq,q=1、2,…,24;DistrictS_pq的含义为:与数据源S对应的所述文件系统文件NetFile中的第p层第q个分区的数据内容,用于存储在某个存储天数周期的第p天的第q个小时所采集到的数据源S的数据;
[0017] 对于任意的DistrictS_pq,按所述功能组包含的节点数量分块,包含N个数据块BlockS_pqi,i=1、2,…,N;每个数据块BlockS_pq i唯一对应所述存储单元中的一个真实文件,即:对应hrSP_q.ci,为第p天第q个小时采集到的数据源S的各个文件周期的所有第i个簇组成的真实文件。
[0018] 优选的,所述存储单元包括至少一个功能组和1个备份节点;各个所述功能组共享同一个所述备份节点。
[0019] 优选的,N为7;X为6;Y为1;D为4。
[0020] 本发明还提供一种基于面向流数据的分布式文件系统的流数据写入方法,包括以下步骤:
[0021] 步骤1,对于数据源S输出的流数据,确定以下流数据存储要求:确定存储天数周期为T、每簇Cluster的数据大小、每个文件生成周期所需要的簇Cluster的个数为N个、每个文件生成周期所需要的原始簇的个数为X个、每个文件生成周期所需要的校验簇的个数为Y个;其中,X+Y=N;
[0022] 步骤2,根据所述流数据存储要求,构建与所述数据源S对应的权利要求1所述的面向流数据的分布式文件系统;
[0023] 步骤3,设定基准日为第1日,从基准日开始,假设在第u日实时接收数据源 S输出的流数据,则数据源S输出的流数据通过以下方法写入到所述面向流数据的分布式文件系统中:
[0024] 步骤3.1,计算u除以T的余数,余数为k;则第u日对应某个存储天数周期中的第k天;
[0025] 步骤3.2,设当前接收小时为0~23小时中的第hrSk_f小时,其中,f=0、1,…,23;
[0026] 确定与当前接收小时对应的硬盘编号,方法为:
[0027] 如果f为0、1,…,(m-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_i1;
[0028] 如果f为m、(m+1),…,(2m-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_i2;
[0029] 依此类推
[0030] 如果f为(D-1)m、((D-1)m+1),…,(Dm-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_iD;
[0031] 设本步骤中确定的与当前接收小时hrSk_f对应的硬盘编号为Drv_iF;F=1、 2,…,D,Drv_iF代表功能组的第i个节点Node_i第F块硬盘;
[0032] 步骤3.3:
[0033] 步骤3.3.1,从第hrSv_f小时开始,在第1个文件生成周期,依次接收到流数据的X个簇,编号为:簇C11、簇C12,…,簇C1X;根据簇C11、簇C12,…,簇C1X,计算出Y个检验簇,分别编号为:簇C1(X+1)、簇C1(X+2),…,簇C1(X+Y);簇C1(X+Y)即为簇C1N;
[0034] 由此得到第1个文件生成周期对应的N个簇,编号为:簇C11、簇C12,…,簇 C1X、簇C1(X+1)、簇C1(X+2),…,簇C1N;
[0035] 将簇C11写入节点Node_1的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c1;
[0036] 将簇C12写入节点Node_2的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c2;
[0037] 依此类推
[0038] 将簇C1N写入节点Node_N的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.cN;
[0039] 步骤3.3.2,在第hrSv_f小时的第2个文件生成周期,共得到N个簇,编号为:簇C21、簇C22,…,簇C2X、簇C2(X+1)、簇C2(X+2),…,簇C2N;其中,簇C21、簇C22,…, 簇C2X为原始流数据簇;簇C2(X+1)、簇C2(X+2),…,簇C2N为校验簇;
[0040] 将簇C21写入节点Node_1的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c1;
[0041] 将簇C22写入节点Node_2的第F块硬盘上的第k个第二级真实文件夹中的真实文件Skhr _f.c2;
[0042] 依此类推
[0043] 将簇C2N写入节点Node_N的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.cN;
[0044] 步骤3.3.3,如此不断循环,将第hrSv_f小时的每个完整的文件生成周期中的各个簇分散存储到对应节点的真实文件中;
[0045] 对于最后一个第hrSv_f小时的文件生成周期,设为第b个文件生成周期,簇 Cb1、簇Cb2,…,簇CbX、簇Cb(X+1)、簇Cb(X+2),…,簇CbN
[0046] 采用以下方式确定:簇Cb(X+1)、簇Cb(X+2),…,簇CbN为校验簇;簇CbX为用于存储标识数据的标识簇;对于其余X-1个簇,即:簇Cb1、簇Cb2,…,簇Cb(X-1)中,如果在本文件生成周期,只接收到部分数据流的原始簇,则其余簇补0;然后采用步骤3.3.1和步骤3.3.1的方式,将N个簇分散存储到对应节点的真实文件中。
[0047] 本发明提供的一种面向流数据的分布式文件系统及流数据写入方法具有以下优点:
[0048] 本发明提供的面向流数据的分布式文件系统,提供了相对简单的目录结构和文件结构,能够低成本高效率的满足流数据存储、备份和循环覆盖的功能需求,并方便快速的检索和读取。

附图说明

[0049] 图1为本发明提供的目录结构的组织方式示意图;
[0050] 图2为本发明提供的文件结构的组织方式示意图。

具体实施方式

[0051] 为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0052] 本发明提供一种面向流数据的分布式文件系统,专为不间断的流数据的存储设计,可将其命名为NSFS,与之相对应的,原始文件系统(如NTFS/EXT2等) 命名为OSFS。本发明提供的面向流数据的分布式文件系统,提供了相对简单的目录结构和文件结构,能够低成本高效率的满足流数据存储、备份和循环覆盖的功能需求,并方便快速的检索和读取。
[0053] 具体的,本发明的面向流数据的分布式文件系统,主要创新性的设计三大部分内容:存储单元、目录结构和文件结构。下面对存储单元、目录结构和文件结构分别详细介绍:
[0054] (一)存储单元
[0055] 存储单元StoreUnit包括功能组Group和备份节点BakNode。其中,所述功能组包括N个节点Node_i,i=1、2,…,N;每个节点Node_i包含多块硬盘Drv,节点 Node_i可以是通用的计算机,也可以是专用的存储设备。在所述N个节点中,X 个节点为用于存储原始数据的存储节点,Y个节点为用于存储校验数据的校验节点;X+Y=N;校验算法可根据需要选择,如纠删码。所述备份节点用于当某个所述功能组中的节点出现故障时,临时替换故障节点。
[0056] 实际应用中,可以多个功能组共享一个备份节点,例如,两个功能组共享一个备份节点。当两个功能组共享一个备份节点时,两个功能组之间是完全独立的,与一个功能组对应一个备份节点的实现原理相同。因此,为方便描述,在后续例子中,仅以一个功能组对应一个备份节点的情况为例进行介绍。
[0057] 为描述方便,本发明将原始文件系统的文件夹,简称为真实文件夹;将原始文件系统的文件,简称为真实文件。
[0058] 对于任意的节点Node_i,均包含D块硬盘Drv_ij,j=1、2,…,D,硬盘Drv_ij含义为:所述功能组的第i个节点Node_i包含的第j块硬盘;
[0059] 对于任意的硬盘Drv_ij,均具有与数据源S唯一对应的第一级真实文件夹 DiskDirS_ij,第一级真实文件夹DiskDirS_ij含义为:位于节点Node_i的第j块硬盘上的并且与数据源S唯一对应的第一级真实文件夹;当有多个数据源时,硬盘 Drv_ij上即建立多个第一级真实文件夹。
[0060] 每个所述第一级真实文件夹DiskDirS_ij包含T个第二级真实文件夹DiskDirS_ ijk,k=1、2,…,T,其中,T为存储天数周期;第二级真实文件夹DiskDirS_ijk的含义为:第一级真实文件夹DiskDirS_ij包含的第k个第二级真实文件夹;
[0061] 每个所述第二级真实文件夹DiskDirS_ijk具有m个真实文件,m=24/D;其中,位于节点Node_i的第1块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hrSk_0.ci、hrSk_1.ci,…,hrSk_(m-1).ci;其中,hrk_0.ci代表第K天第 0个小时采集到的数据源S的各个文件周期的第i个簇组成的真实文件;hrSk_1.ci 代表第K天第1个小时采集到Sk
的数据源S的各个文件周期的第i个簇组成的真实文件;依此类推,hr _(m-1).ci代表第K天第m-1个小时采集到的数据源S的各个文件周期的第i个簇组成的真实文件;
[0062] 位于节点Node_i的第2块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hrSk_m.ci、hrSk_(m+1).ci,…,hrSk_(2m-1).ci;依此类推,位于节点Node_iSk的第D块硬盘上的第k个第二级真实文件夹中,具有的m个真实文件分别编号为:hr _(D-1)m.ci、hrSk_((D-1)m+1).ci,…,hrSk_(Dm-1).ci;其中, hrSk_(Dm-1).ci即为hrSk_23.ci。
[0063] 为方便对上面介绍的存储单元进行理解,以N=7,X=6,Y=1、D=4为例介绍:
[0064] 存储单元包括的7个节点Node_i,分别为:Node_1、Node_2、Node_3、 Node_4、Node_5、Node_6、Node_7;一个备份节点为BakNode。其中,Node_1、 Node_2、Node_3、Node_4、Node_5、Node_6为用于存储原始数据的存储节点;Node_7为用于存储校验数据的校验节点。
[0065] 对于上面的7个节点Node_i,每个节点均包括4块硬盘,因此,存储单元共有 28块硬盘,形成以下硬盘矩阵:
[0066] Node_1--------Drv_11 Drv_12 Drv_13 Drv_14
[0067] Node_2--------Drv_21 Drv_22 Drv_23 Drv_24
[0068] ……
[0069] Node_7--------Drv_71 Drv_72 Drv_73 Drv_74
[0070] 对于上面的28块硬盘,对于某个特定的数据源,每个硬盘均具有与该数据源唯一对应的第一级真实文件夹。因此,对于某个特定的数据源,共有28个第一级真实文件夹,形成以下第一级真实文件夹矩阵:
[0071] Node_1--------DiskDirS_11 DiskDirS_12 DiskDirS_13 DiskDirS_14
[0072] Node_2--------DiskDirS_21 DiskDirS_22 DiskDirS_23 DiskDirS_24
[0073] ……
[0074] Node_7--------DiskDirS_71 DiskDirS_72 DiskDirS_73 DiskDirS_74
[0075] 实际应用中,当对某个流数据进行存储时,例如,对某个摄像机的监控视频流进行存储时,一般只需要存储最近若干天的流数据,例如,只需要存储最近90天的数据,则存储S天数周期T为90。所以,每个第一级真实文件夹DiskDir _ ij包含90个第二级真实文件夹DiskDirS_ijk,例如,对于第一级真实文件夹 DiskDirS_11,包含的90个第二级真实文件夹分别为:DiskDirS_111、DiskDirS_ 112,…,DiskDirS_1190,分别用于对存储天数周期中的第1天、第2天,…,第90天流数据存储。例如,以2000年1月1日为第1天,第1天、第2天,…,第90天的流数据依次存储到DiskDirS_111、DiskDirS_112,…,DiskDirS_1190;而第91天的流数据覆盖存储到DiskDirS_111,即:自动覆盖DiskDirS_111中原来存储的第1天的流数据,由此简单方便的满足流数据存储的需求。为检索方便,对于第一级真实文件夹DiskDirS_11包含的90个第二级真实文件夹,由于分别用于存储第1天到第90天的数据,因此,可分别命名为:[day_1]、[day_2],…,[day_90]。采取这种固定名称的命名方式至少带来以下好处:
[0076] 1)存储路径及文件命名固定,省去了生成元数据的数据量及维护代价
[0077] 2)当进入一个新的存储周期时,不需要考虑过期文件的删除问题,新文件的生成将自动覆盖过期文件。
[0078] 对于每个第二级真实文件夹DiskDirS_ijk具有6个真实文件,例如,对于 DiskDirS_111,具有的6个真实文件分别为:hrSk_0.c1、hrSk_1.c1,…,hrSk_5.c1。为对真实文件的概念进行理解,下面列举一个具体的数据存储例子:
[0079] 本发明中,在对流数据进行存储时,采用分布式存储思想,并对需要存储的流数据以天和小时为单位进行存储处理。
[0080] 由于第一级真实文件夹和硬盘为一对一关系,所以,以硬盘为例,系统中预先设定:各个节点Node_i的第1位的硬盘均统一存储0点-5点时间段的流数据,第2位的硬盘均统一存储6点-11点时间段的流数据,均统一存储12点-17点时间段的流数据,均统一存储18点-23点时间段的流数据,因此,具有以下对应关系:
[0081]
[0082] 即:对于任意一天,0点-5点的流数据对应存储到Drv_11、Drv_21,…,Drv_71; 6点-11点的流数据对应存储到Drv_12、Drv_22,…,Drv_72;12点-17点的流数据对应存储到Drv_13、Drv_23,…,Drv_73;18点-23点的流数据对应存储到Drv_14、Drv_24,…,Drv_74;
[0083] 仍然以2000年1月1日为第1天,第95天12点,即12点-12点59分59秒这一个小时的流数据,具体采用以下方式存储:
[0084] 流数据以簇Cluster为单位进行接收,由于本发明中以X=6举例,因此,接收到6个簇为一个文件生成周期,即:从12点开始,按顺序接收到的前6个簇分别编号为:簇C11、簇C12,…,簇C16;然后,采用校验算法对簇C11、簇C12,…,簇C16的值进行计算,例如,对簇C11、簇C12,…,簇C16进行XOR运算,得到一个检验簇,编号为:簇C17。
[0085] 因为接收天数为第95天,所以,95/90取余数为5,位于一个存储天数周期中的第5天,k=5;由于接收小时数为12点,对应各个节点Node_i的第2位的硬盘,也就是说,在此接收小时数内接收到的数据,仅与各个节点Node_i的第2位的硬盘有关,与各个节点的其他硬盘无关,此时,其他硬盘为空闲状态。所以,簇 C11写入到节点Node_1的硬盘Drv_12的第二级真实文件夹DiskDirS_125中;簇C12写入到节点Node_2的硬盘Drv_22的第二级真实文件夹DiskDirS_225中;依此类推,簇 C17写入到节点Node_7的硬盘Drv_72的第二级真实文件夹DiskDirS_725中;
[0086] 然后,后续按顺序接收到的第7个簇到第12个簇,为第二个文件生成周期,分别编号为:簇C21、簇C22,…,簇C26,计算出的校验簇为簇C27;将簇C21、簇C22,…, 簇C27分别写入到DiskDirS_125、DiskDirS_225,…,DiskDirS_725中;
[0087] 依此类推,假设在这一个小时中,共有6个文件生成周期,并且,在第6个文件生成周期中,仅接收到3个簇,分别编号为:簇C61、簇C62,簇C63,则令簇 C64、簇C65为0,簇C66写入标识数据,由此计算出簇C61到簇C66的校验簇,即:簇C67,然后,将簇C61、簇C62,…,簇C67分别写入到DiskDirS_125、DiskDirS_225,…, DiskDirS_725中。
[0088] 此时,DiskDirS_125中写入的簇C11簇C21簇C31簇C41簇C51簇C61簇C71即形成一个真实文件,编号为:hrS5_12.c1,代表在存储周期中第5天第12点采集到的流数据中位于不同文件生成周期中的第1簇组成的真实文件,位于节点Node_1。
[0089] 同样的,DiskDirS_225写入的簇C12簇C22簇C32簇C42簇C52簇C62簇C72即形成一个真实S5文件,编号为:hr _12.c2,位于节点Node_2。
[0090] 依此类推,DiskDirS_725写入的簇C12簇C27簇C37簇C47簇C57簇C67簇C77即形成一个真实文件,编号为:hrS5_12.c7,位于节点Node_7。
[0091] 这一个小时的簇写入方式以及对应的真实文件生成方式见下面示意方式:
[0092] Node_1--------DiskDirS_125 簇C11簇C21簇C31簇C41簇C51簇C61簇C7→hrS5_12.c1[0093] Node_2--------DiskDirS_225 簇C12簇C22簇C32簇C42簇C52簇C62簇C72→hrS5_12.c2[0094] Node_7--------DiskDirS_725 簇C12簇C27簇C37簇C47簇C57簇C67簇C77→hrS5_12.c7[0095] 而对于第95天13点接收到的数据流,仍然分布式存储于各个节点的第二级真实文件夹DiskDirS_i25中,生成的真实文件分别命名为:hrS5_13.c1、 hrS5_13.c2,…,hrS5_13.c7。因此,12点-17点共有6个小时的数据,所以,最终,不同节点的每个第二级真实文件夹DiskDirS_i25,共具有6个真实文件。每个真实文件对应一个数据块Block。
[0096] 因此,上面描述的流数据写入方法,概括描述为以下步骤:
[0097] 步骤1,对于数据源S输出的流数据,确定以下流数据存储要求:确定存储天数周期为T、每簇Cluster的数据大小、每个文件生成周期所需要的簇Cluster的个数为N个、每个文件生成周期所需要的原始簇的个数为X个、每个文件生成周期所需要的校验簇的个数为Y个;其中,X+Y=N;
[0098] 步骤2,根据所述流数据存储要求,构建与所述数据源S对应的权利要求1所述的面向流数据的分布式文件系统;
[0099] 步骤3,设定基准日为第1日,从基准日开始,假设在第u日实时接收数据源S输出的流数据,则数据源S输出的流数据通过以下方法写入到所述面向流数据的分布式文件系统中:
[0100] 步骤3.1,计算u除以T的余数,余数为k;则第u日对应某个存储天数周期中的第k天;
[0101] 步骤3.2,设当前接收小时为0~23小时中的第hrSk_f小时,其中,f=0、1,…,23;
[0102] 确定与当前接收小时对应的硬盘编号,方法为:
[0103] 如果f为0、1,…,(m-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_i1;
[0104] 如果f为m、(m+1),…,(2m-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_i2;
[0105] 依此类推
[0106] 如果f为(D-1)m、((D-1)m+1),…,(Dm-1)中的任意一个数,则与当前接收小时对应的硬盘编号为Drv_iD;
[0107] 设本步骤中确定的与当前接收小时hrSk_f对应的硬盘编号为Drv_iF;F=1、 2,…,D,Drv_iF代表功能组的第i个节点Node_i第F块硬盘;
[0108] 步骤3.3:
[0109] 步骤3.3.1,从第hrSv_f小时开始,在第1个文件生成周期,依次接收到流数据的X个簇,编号为:簇C11、簇C12,…,簇C1X;根据簇C11、簇C12,…,簇C1X,计算出Y个检验簇,分别编号为:簇C1(X+1)、簇C1(X+2),…,簇C1(X+Y);簇C1(X+Y)即为簇C1N;
[0110] 由此得到第1个文件生成周期对应的N个簇,编号为:簇C11、簇C12,…,簇 C1X、簇C1(X+1)、簇C1(X+2),…,簇C1N;
[0111] 将簇C11写入节点Node_1的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c1;
[0112] 将簇C12写入节点Node_2的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c2;
[0113] 依此类推
[0114] 将簇C1N写入节点Node_N的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.cN;
[0115] 步骤3.3.2,在第hrSv_f小时的第2个文件生成周期,共得到N个簇,编号为:簇C21、簇C22,…,簇C2X、簇C2(X+1)、簇C2(X+2),…,簇C2N;其中,簇C21、簇C22,…, 簇C2X为原始流数据簇;簇C2(X+1)、簇C2(X+2),…,簇C2N为校验簇;
[0116] 将簇C21写入节点Node_1的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c1;
[0117] 将簇C22写入节点Node_2的第F块硬盘上的第k个第二级真实文件夹中的真实文件hrSk_f.c2;
[0118] 依此类推
[0119] 将簇C2N写入节点Node_N的第F块硬盘上的第k个第二级真实文件夹中的真实文件Skhr _f.cN;
[0120] 步骤3.3.3,如此不断循环,将第hrSv_f小时的每个完整的文件生成周期中的各个簇分散存储到对应节点的真实文件中;
[0121] 对于最后一个第hrSv_f小时的文件生成周期,设为第b个文件生成周期,簇 Cb1、簇Cb2,…,簇CbX、簇Cb(X+1)、簇Cb(X+2),…,簇CbN
[0122] 采用以下方式确定:簇Cb(X+1)、簇Cb(X+2),…,簇CbN为校验簇;簇CbX为用于存储标识数据的标识簇;对于其余X-1个簇,即:簇Cb1、簇Cb2,…,簇Cb(X-1)中,如果在本文件生成周期,只接收到部分数据流的原始簇,则其余簇补0;然后采用步骤3.3.1和步骤3.3.1的方式,将N个簇分散存储到对应节点的真实文件中。
[0123] (二)目录结构
[0124] 所述目录结构为三层结构,参考图2,为一种具体的目录结构的示意图,分别为文件系统根目录NetRoot、文件系统文件夹NetDir和文件系统文件NetFile;其中,所述文件系统根目录NetRoot包含多个文件系统文件夹NetDir;每个所述文件系统文件夹NetDir为面向流数据的分布式文件系统的文件夹,唯一对应一个所述存储单元,所述文件系统文件夹NetDir的命名为对应的存储单元ID;每个所述文件系统文件夹NetDir包含多个文件系统文件NetFile,每个所述文件系统文件 NetFile唯一对应一个数据源,所述文件系统文件NetFile的命名为对应的数据源 ID;
[0125] (三)文件结构
[0126] 每个所述文件系统文件NetFile的组织结构为:所述文件系统文件NetFile按存储天数周期T,自上而下划分为T层LayerS_p,p=1、2,…,T,其中,LayerS_p 的含义为:与数据源S对应的所述文件系统文件NetFile中的第p层的数据内容,用于存储在某个存储天数周期的第p天所采集到的数据源S的数据;
[0127] 对于任意的LayerS_p,按小时分区,每1小时1个分区,因此,LayerS_p包含 24个分区DistrictS_pq,q=1、2,…,24;DistrictS_pq的含义为:与数据源S对应的所述文件系统文件NetFile中的第p层第q个分区的数据内容,用于存储在某个存储天数周期的第p天的第q个小时所采集到的数据源S的数据;
[0128] 对于任意的DistrictS_pq,按所述功能组包含的节点数量分块,包含N个数据块BlockS_pqi,i=1、2,…,N;每个数据块BlockS_pq i唯一对应所述存储单元中的一个真实文件,即:对应hrSP_q.ci,为第p天第q个小时采集到的数据源S的各个文件周期的所有第i个簇组成的真实文件。
[0129] 以存储天数周期T为90天为例,文件结构如图2所示,即:按存储天数分为 90层Layer,每层Layer对应一天的数据;每层Layer按小时分区District,每1个分区District对应一小时的数据;每个分区District按功能组内节点数据分块,因此,一个分区包含7个Block,每个Block位于一个节点上,对应此节点上的真实文件夹(DiskDir)中的一个真实文件(DiskFile),通过此种对映关系,即将文件结构与存储单元联系起来,实现通过操作目录结构和文件结构,对存储单元进行数据写入、检索等操作。
[0130] 本发明中,由于每个功能组均对应一个备份节点,因此,在功能组中各个节点均正常情况下,只通过功能组中各个节点进行数据存储和访问;当有节点出现故障时,由备份节点替换故障节点的功能。
[0131] 具体的,对于备份节点BakNode,保存有此存储单元StoreUnit的所有节点的真实文件夹和真实文件,因此,当功能组中的多个节点发生故障,导致磁盘无法操作时,备份节点可以同时替代多个故障节点,接替故障节点的工作,工作逻辑完全相同。在BakNode的每一块磁盘的根目录,都有一个名为error.txt的记录DiskFile,记录备份节点的工作日志和备份DiskFile的状态,供系统恢复使用。当故障节点恢复正常时,根据error.txt中的记录,对数据进行恢复,并将备份节点中的相应DiskFile删除。
[0132] 另外,存储单元StoreUnit中的任何一个Node,都可以用作备份节点使用,当预设的备份节点故障时,可以按小时轮流使用其他节点进行代存,代存规则一致。
[0133] 本发明提供的一种面向流数据的分布式文件系统及流数据写入方法具有以下优点:
[0134] (1)对于存储单元,每个第一级真实文件夹具有与存储周期天数对应数量的第二级真实文件夹,每个第二级真实文件夹对应于存储周期中的某一天;而每个第二级真实文件夹以小时为分割单位,具有与对应小时对应的真实文件;由此实现以每天的每个小时为存储对象的存储方式,对于新的流式数据,直接存储于对应天的对应小时位置即可,存储方便;
[0135] (2)对于存储单元,对于含检验数据的每7个簇,均采用分布式存储方式,分布式存储于各个节点的对应位置,提高了数据存储效率;
[0136] (3)对于目录结构,与其他常规目录结构不同的是,本发明目录结构仅采用三层结构,即:文件系统根目录NetRoot、文件系统文件夹NetDir和文件系统文件NetFile,检索方便,管理方便;
[0137] (4)对于文件结构,与存储单元的存储思想一致,文件结构采用多层多分区的组织方式,提高了存储和检索效率。
[0138] 因此,本发明提供的面向流数据的分布式文件系统,提供了相对简单的目录结构和文件结构,能够低成本高效率的满足流数据存储、备份和循环覆盖的功能需求,并方便快速的检索和读取。
[0139] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。