文件写入方法、系统、电子设备及可读存储介质与流程

文档序号:29912072发布日期:2022-05-06 01:42阅读:91来源:国知局
文件写入方法、系统、电子设备及可读存储介质与流程

1.本发明涉及存储技术领域,具体而言,涉及一种文件写入方法、系统、电子设备及可读存储介质。


背景技术:

2.在如今的存储系统中,存储设备的性能逐渐成为系统性能的瓶颈,难以满足日益增长的数据量对存储性能的需求,因此,出现了一种把多个小文件聚合写入一个大文件的存储方式,该存储方式尤其在图片存储领域应用广泛,可以提高存储利用率,减少文件碎片的方法。
3.在实际的聚合存储场景中,通常会出现以下情况:某个文件的大小超出了某个存储空间的剩余容量,面对这种情况,现有的做法是将这个还未写满的存储空间关闭,当下次需要存储的文件的大小足够小时,再次将其存入这个未写满的存储空间内。这种方式一方面会导致大文件的管理非常复杂,另一方面不同文件的切换也会影响写入性能,还可能由于这个存储空间大文件里面的小文件写入时间不连续,导致小文件的误删。


技术实现要素:

4.本发明的目的之一在于提供一种文件写入方法、系统、电子设备及可读存储介质,用以在避免空间浪费的同时还能保证写入文件的时间连续性,本发明可以这样实现:
5.第一方面,本发明提供一种文件写入方法,所述方法包括:接收文件写入请求,并从所述文件写入请求中提取待写入文件;根据所述待写入文件确定目标写入文件,并基于所述目标写入文件获得目标存储空间;当确定所述目标写入文件的长度大于所述目标存储空间的剩余容量,将所述目标写入文件切分为第一子文件和第二子文件;其中,所述第一子文件的长度与所述剩余容量一致,所述第二子文件为所述目标写入文件中除所述第一子文件外的剩余文件;
6.第二方面,本发明提供一种文件写入系统,包括所述客户端模块,用于接收文件写入请求,从所述文件写入请求中提取待写入文件,并将所述待写入文件发送给所述服务端模块;所述服务端模块,用于:根据所述待写入文件确定目标写入文件,并基于所述目标写入文件获得目标存储空间;当确定所述目标写入文件的长度大于所述目标存储空间的剩余容量,将所述目标写入文件切分为第一子文件和第二子文件;其中,所述第一子文件的长度与所述剩余容量一致,所述第二子文件为所述目标写入文件中除所述第一子文件外的剩余文件;将所述第一子文件写入所述目标存储空间,关闭所述目标存储空间,并将所述第二子文件写入下一个存储空间。
7.第三方面,本发明提供一种电子设备,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机程序,所述处理器可执行所述计算机程序以实现第一方面所述的方法。
8.第四方面,本发明提供一种可读存储介质,其上存储有计算机程序,所述计算机程
序被处理器执行时实现第一方面所述的方法。
9.本发明提供的文件写入方法、系统、电子设备及可读存储介质,方法包括:接收文件写入请求,并从文件写入请求中提取待写入文件;根据待写入文件确定目标写入文件,并基于目标写入文件获得目标存储空间;当确定目标写入文件的长度大于目标存储空间的剩余容量,将目标写入文件切分为第一子文件和第二子文件;将第一子文件写入目标存储空间,关闭目标存储空间,并将第二子文件写入下一个存储空间,可以看出,在目标存储空间的剩余容量不足以将目标写入文件全部存储的情况先下,可以将目标写入文件中的部分文件写入目标存储空间,以使目标存储空间被写满,进而将目标存储空间关闭,将目标写入文件的剩余部分写入到下一个存储空间,从而可以在避免空间浪费的同时还能使得目标存储空间内的文件的写入时间连续,避免文件被误删。
附图说明
10.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
11.图1为一种文件写入的应用环境示意图;
12.图2为本发明实施例提供的电子设备的结构示意图;
13.图3为本发明实施例提供的文件写入方法的示意性流程图;
14.图4为本发明实施例提供的一种目录结构组织示意图;
15.图5为本发明实施例提供的另一种文件写入方法的示意性流程图之一;
16.图6为本发明实施例提供的另一种文件写入方法的示意性流程图之二;
17.图7为本发明实施例提供的大文件中待写入文件与校验文件和地址组合的分布示意图;
18.图8为本发明实施例提供的文件写入系统的功能模块图。
19.图注:10-客户端;11-网络;12-服务端;200-电子设备;201-存储器;202-处理器;203-通信接口;800-文件写入系统;810-客户端模块;820-服务端模块;8101-协议解析单元;8102-数据发送单元;8201-文件处理单元;8202-文件管理单元。
具体实施方式
20.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
21.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
22.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一
个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
23.在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的系统或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
24.此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
25.需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
26.首先对本发明实施例中涉及的相关术语进行解释和说明。
27.小文件:文件大小小于预设阈值的文件,预设阈值可以根据实际需求自定义,此处不作限定。本发明实施例后续的文件的大小和文件的长度实质相同,并不作区分。
28.大文件:大文件是一个抽象的存储空间,实际实施中可以是固定大小的文件形式,也可以是一块连续的磁盘地址,还可以是一个磁盘分区。相对应的,每个大文件标识称也不局限于传统的字符串形式,可以是一个编号,序列号,索引字段等。本发明实施例中后续提到的存储空间和大文件实质相同,此处不作区分。
29.请参见图1,图1为一种文件写入的应用环境示意图,在该应用环境中包括客户端10(例如笔记本电脑、平板电脑、智能终端)、网络11和服务端12,服务端12可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统。
30.在可能的文件写入场景中,用户可以在客户端10上进行一系列的操作,比如上传文件、导入文件、接收文件、生成文件等等,客户端10响应用户的操作,生成文件写入请求,并将文件写入请求通过网络11发送给服务端12,服务端12获得文件后即可根据预设的写入策略,将文件写入存储空间进行存储。
31.可以理解的是,服务端12处理的文件并不是统一大小,为了节约存储空间,提高存储效率,常用的文件存储方式为聚合存储方式,即将多个小文件聚合存储在一个大存储空间中,这种存储方式通常会设置一个文件大小阈值,小于文件大小阈值的文件采用聚合存储,这就造成同一个文件写入系统里面存在两种不同的存储方式,而且大于文件大小阈值的文件也会存在各种大小不一致的情况,最终也会导致磁盘空间分配出现碎片,影响性能和空间利用率。
32.为了避免磁盘碎片,聚合存储的大文件的大小应当满足预设的阈值,当然,可以把大文件的尺寸设置得足够大,大到足以覆盖使用场景的所有文件大小。但这又会导致存储空间浪费的情况:例如,大文件设置为1gb大小,假设该大文件已经聚合存储了多个小文件,还剩下10mb的空间。此时需要再存储一个20mb大小的小文件,则此时只能关闭没写满的大文件,再新建一个1gb的大文件用于20mb小文件的写入。这样就导致前一个大文件中的10mb空间被浪费。
33.相关技术针对上述问题采取的方式是:将未写满的大文件关闭并记录下来,当某次需要存储的小文件大小足够小时可以将其存入某一个未写满的大文件。但这种方式一方面会导致大文件的管理非常复杂,另一方面,不同文件的切换也会影响写入性能。而且如果是在一些按时间覆盖的存储场景(例如监控抓拍图片保存一定天数后自动删除),由于大文件里面的小文件写入时间不连续,也会导致小文件的误删。
34.为了解决上述技术问题,本发明实施例首先提供了一种电子设备200,请参见图2,图2为本发明实施例提供的电子设备的结构示意图,该电子设备200可以是图1中的服务端12。
35.电子设备200包括存储器201、处理器202和通信接口203,该存储器201、处理器202和通信接口203相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
36.存储器201可用于存储软件程序及模块,如本发明实施例提供文件写入系统800对应的程序指令/模块,可以软件或固件(firmware)的形式存储于存储器201中或固化在电子设备200的操作系统(operating system,os)中,处理器202通过执行存储在存储器201内的软件程序及模块,从而执行各种功能应用以及数据处理。该通信接口203可用于与其他节点设备进行信令或数据的通信。
37.其中,存储器201可以是但不限于,随机存取存储器(random access memory,ram),只读存储器(read only memory,rom),可编程只读存储器(programmable read-onlymemory,prom),可擦除只读存储器(erasable programmable read-only memory,eprom),电可擦除只读存储器(electric erasable programmable read-only memory,eeprom)等。
38.处理器202可以是一种集成电路芯片,具有信号处理能力。该处理器202可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digital signal processing,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
39.可以理解,图2所示的结构仅为示意,电子设备200还可以包括比图2中所示更多或者更少的组件,或者具有与图2所示不同的配置。图2中所示的各组件可以采用硬件、软件或其组合实现。
40.下面以上述电子设备200执行本发明实施例提供的文件写入方法为例,介绍本发明实施例提供的文件写入方法,请参见图3,图3为本发明实施例提供的文件写入方法的示意性流程图,该方法可以包括:
41.s301,接收文件写入请求;
42.s302,根据文件写入请求确定目标写入文件,并基于目标写入文件获得目标存储空间;
43.s303,当确定目标写入文件的长度大于目标存储空间的剩余容量,将目标写入文件切分为第一子文件和第二子文件;
44.其中,第一子文件的长度与剩余容量一致,第二子文件为目标写入文件中除第一子文件外的剩余文件;
45.s304,将第一子文件写入目标存储空间,关闭目标存储空间,并将第二子文件写入下一个存储空间;
46.根据本发明实施例提供的文件写入方法,接收文件写入请求,并从文件写入请求中提取待写入文件;根据待写入文件确定目标写入文件,并基于目标写入文件获得目标存
储空间;当确定目标写入文件的长度大于目标存储空间的剩余容量,将目标写入文件切分为第一子文件和第二子文件;将第一子文件写入目标存储空间,关闭目标存储空间,并将第二子文件写入下一个存储空间,可以看出,在目标存储空间的剩余容量不足以将目标写入文件全部存储的情况先下,可以将目标写入文件中的部分文件写入目标存储空间,以使目标存储空间被写满,进而将目标存储空间关闭,将目标写入文件的剩余部分写入到下一个存储空间,从而可以在避免空间浪费的同时还能使得目标存储空间内的文件的写入时间连续,避免文件被误删。
47.下面对上述步骤s301至步骤s304进行详细介绍和说明。
48.在步骤s301中,接收文件写入请求,并从文件写入请求中提取待写入文件。
49.可以理解的是,文件写入请求可以是基于用户的一系列操作生成的,比如,用户可以进行文件的上传、导入、读取、生成等操作。
50.应理解,文件写入请求中包含有待写入文件,还可以包含有该待写入文件的存储协议,本发明实施例还可以针对不同存储协议的待写入文件进行相应的处理,保证对所有文件有统一的处理方式,保证对外访问的一致性。
51.在步骤s302中、根据待写入文件确定目标写入文件,并基于目标写入文件获得目标存储空间。
52.在本技术实施例中,目标存储空间就是预先创建且处于打开状态的大文件,大文件创建的过程将在后续进行详细介绍,这里所说的“打开状态”表征该目标存储空间正处于写入文件的过程中,而且该目标存储空间还处于未写满状态,这样可以保证每个存储空间被写满,避免空间浪费,目标存储空间的数量与目标写入文件的数量一致,也就是说,在确定目标写入文件之后,可以先申请处于打开状态的目标存储空间来存储待写入文件。
53.本技术实施例中的存储空间是由本技术实施例中后续涉及的文件管理模块进行划分和管理的,例如,在一种可能的实施方式中,文件管理模块可以1gb为单位对磁盘空间进行划分,每个划分得到的存储空间的编号可以采用磁盘序列号加偏移加一定的随机数变换确定,为简单起见,本技术实施例以顺序编码的方式表示。例如,以一套存储集群以16节点为例,单个节点具有36块盘,每块盘大小为8tb,则总共可以划分4608000个1gb空间,那么得到的所有存储空间的编号为1到4608000。
54.应理解,上述所涉及的磁盘既可以是操作系统暴露的裸块设备,也可以是经过lvm或raid软件等包装后的虚拟块设备,还可以是通过iscsi或者fc等连接映射的外部设备或云存储设备,磁盘类型可以但不限于是hdd,也可包含ssd等以块方式读写的存储介质。
55.还应理解的是,本技术实例中的1gb空间实际上一块逻辑上(或物理上)连续的存储空间,并不是传统意义上的文件,为简化描述,后续可以以大文件指代。
56.在本技术实施例中,待写入文件是文件写入请求中携带的文件数据,根据不同的写入策略,目标写入文件可以是整个待写入文件,还可以是待写入文件对应的多个子文件,也就是文件分片,还可以是待写入文件的子文件和生成的校验文件,下面针这些情况进行详细介绍。
57.情况1:待写入文件就是目标写入文件,那么步骤s302的实施方式即为:
58.a1,从文件写入请求中提取待写入文件;
59.a2,将待写入文件确定为一个目标写入文件;
60.a3,根据一个目标写入文件,获得一个目标存储空间。
61.在这种情况下,只需要申请一个处于打开状态的目标存储空间,并将该目标存储空间写满,防止空间浪费。
62.情况2:为了更好地提升存储的顺序性和并发性,待写入文件的多个子文件可以为目标写入文件,那么步骤s302的实施方式即为:
63.b1,将待写入文件切分成多个子文件。
64.b2,将每个子文件确定为目标写入文件。
65.b3,根据多个子文件的数量,获得多个目标存储空间。
66.也就是说,可以先对待写入文件做切片处理,得到固定大小的多个子文件,也就是数据块,并基于子文件的数量一次性申请处于开启状态的多个大文件,也就是确定多个目标存储空间,然后在每个目标存储空间中写入一个目标写入文件。
67.情况3:为了提升数据保存的可靠性,还可以加入多副本,纠删码等数据冗余技术进行文件写入,那么步骤s302的实施方式即为:
68.c1,根据预设纠删码,确定待写入文件对应的子文件数量和校验文件数量,并根据子文件数量和校验文件数量之和,获得多个目标存储空间;
69.c2,根据子文件数量,将待写入文件切分成多个子文件,并根据校验文件数量和预设纠删算法,生成多个校验文件;
70.c3,根据多个子文件的数量,获得多个目标存储空间。
71.其中,每个子文件的长度相同,校验文件的长度与子文件的长度相同。
72.c4,将每个子文件和每个校验文件均确定为目标写入文件。
73.针对这种实施方式,用户可以根据实际需求确定纠删码,纠删码形如n+m,其中n为原始数据的个数,在本技术实施例中即为目标文件的个数,m为校验数据的个数,在本技术实施例中即为检验文件的个数,例如纠删码可以是8+2,即8个目标写入文件和2个校验文件等,此处不作限定。
74.在确定纠删码之后,可以将待写入文件分成相同长度的n份,通过特定的纠删码算法,计算出m份相同长度的校验数据,并将这n+m份数据各自写入一个目标存储空间,这样一来,当任意m份数据丢失的情况下,仍能通过剩下的n份数据还原出原始的数据。
75.应理解,在确定目标存储空间时,可以一次性申请打开n+m个大文件,并按照一定的随机算法选择n+m个大文件,随机算法可以是简单的hash,也可以考虑大文件的磁盘和节点分布,以及各节点的资源利用率等,具体方式不限制。
76.还应理解,在情况2和情况3中,目标写入文件存在多个,每个目标写入文件被写入一个目标存储空间的方式相似,那么将每个目标文件写入一个目标存储空间中的过程中,可以执行下述步骤s303和步骤s304。
77.在步骤s303中,当确定目标写入文件的长度大于目标存储空间的剩余容量,将目标写入文件切分为第一子文件和第二子文件;
78.其中,第一子文件的长度与剩余容量一致,第二子文件为目标写入文件中除第一子文件外的剩余文件。
79.可以看出,由于第一子文件的长度与剩余容量相同,那么将第一子文件写入目标存储空间之后,目标存储空间即处于写满的状态,从而可以防止现有技术中出现的空间浪
费。
80.在步骤s304,将第一子文件写入目标存储空间,将目标存储空间关闭,并将第二子文件写入下一个存储空间。
81.在一种可能的实施方式中,上述步骤s304的可以按照如下方式进行:在将第一子文件写入目标存储空间后,将目标存储空间关闭;发送下一个存储空间的申请请求;在获得下一个存储空间后,将第二子文件写入下一个存储空间。
82.本技术实施例中,下一个存储空间可以是重新创建的一个大文件,在将目标存储空间关闭后,可以生成一个大文件申请请求,基于该申请请求创建一个大文件,作为下一个存储空间,应理解,下一个存储空间在写入该第二子文件之前还未被写入任何文件。
83.也就是说,针对每个目标存储空间,只有它被写满之后才会被关闭,这与现有技术中还未写满的文件先关闭记录,等待下一次有写入需求的时候再打开的方式完全不同,本发明实施例可以在避免空间浪费的同时还能保证该目标存储空间内的文件写入的时间连续性。
84.可选地,在完成待写入文件的写入之后,为了后续快速、准确访问或定位待写入文件,实施例还给出了一种可能的实施方式,请参见图5,图5为本发明实施例提供的另一种文件写入方法的示意性流程图之一:
85.s305,基于目标存储空间的存储路径、第一子文件的长度以及第一子文件在目标存储空间的起始写入位置,生成第一子文件的访问地址。
86.s306,基于下一个存储空间的存储路径、第二子文件的长度以及第二子文件在下一个存储空间的起始写入位置,生成第二子文件的访问地址;
87.s307,根据第一子文件的访问地址和第二子文件的访问地址,生成一个文件,并将文件写入下一个存储空间;
88.s308,基于下一个存储空间的存储路径、文件的长度以及目标文件在下一个存储空间的起始写入位置,生成文件的访问地址,并将文件的访问地址返回至客户端。
89.在介绍本发明实施例上述实施过程之前,先对本发明实施例中的目标存储进行介绍说明。
90.本技术实施例中,大文件以传统的文件形式存在,预先创建的多个大文件可以按照如下目录结构进行组织、统一管理:
91.目录最多10级(目录级数与实际业务分组和图片数量相关,也会影响最终产生的小文件访问路径的长度,10级已能满足大多数情况),每级目录支持1024个子目录和1024个大文件。
92.例如,请参见图4,图4为本发明实施例提供的一种目录结构组织示意图,文件管理单元8202前9级全部创建目录,在最后一级全部创建大文件,则本实例大文件个数最多为1024的10次方,远超大多数使用场景的需求。
93.其中,目录标识和文件标识可以按数字编码,每级目录从1到2048(1024个目录和1024个大文件,可以采用偶数表示目录,奇数表示文件或者前1024表示文件,后1024表示目录等方式区分目录和文件),最多需要4字节,预留扩展,每路考虑6字节。10级总共需要60字节,考虑对齐,分配64字节。
94.针对每个大文件,它的文件大小可以为固定大小,比如1gb,写入的文件在其中的
偏移按字节标识,通常小文件长度10字节,则在大文件中最多需要10字节来存储一个小文件。
95.按照上述大文件组织结构,则访问地址形式可以为:大文件存储路径+待写入文件偏移(起始写入位置)+待写入文件长度。
96.比如,一个目标写入文件的访问路径形式为:/2/34/189-3741824-240640,表示存储在一级目录标识为2,二级目录标识为34下的大文件标识为189的大文件3741824字节偏移处,长度为240640字节,访问地址的长度不会超过84字节,考虑辅组字符和对齐的情况下,可以按96字节分配空间。
97.基于上述文件组织结构,下面结合具体实例对上述步骤s305至步骤s308进行示例性说明。
98.假设上述文件写入系统已经运行了一段时间,某个目标存储空间(存储路径为/2/2/1)已经写入了很多小文件,剩余容量为10mb,当前写入偏移为1063256063,此时获得的目标写入文件的长度为20mb。
99.将10mb的第一子文件写入目标存储空间后,根据步骤s305,产生一个访问地址/2/2/1-1063256063-10485760,其中,“/2/2/1”是目标存储空间的存储路径,“1063256063”是起始写入位置,“10485760”为第一子文件的长度;进而,将下一个存储空间写入剩余的10mb的第二子文件,根据步骤s306,产生访问地址/2/2/3-0-10485760,其中,“/2/2/3”是下一个存储空间的存储路径,“0”是起始写入位置,“10485760”是第二子文件的长度。根据步骤s307,将访问地址“/2/2/1-1063256063-10485760”和“/2/2/3-0-10485760”组合成一个新文件,文件内容至少包含分片个数和每个分片的访问地址(可以根据情况增加其它可选内容),可以采用各种方式组织,例如使用json格式表示如下:
100.{“num”:”2”,“fids”:[”/2/2/1-1063256063-10485760”,”/2/2/3-0-10485760”]}
[0101]
将以上json数据继续写入下一个存储空间/2/2/3中,产生一个新的访问地址
“”
/2/2/3-10485760-104,将此新的访问地址/2/2/3-10485760-104返回客户端,后续客户端可以使用此地址访问待写入文件。
[0102]
在可选地实施方式中,在知晓如何确定一个目标写入文件的访问地址的情况下,针对上述情况1和情况2,为了统一管理每个目标写入文件的访问地址,本发明实施例还给出了一种可能的实施方式,请参见图6,图6为本发明实施例提供的另一种文件写入方法的示意性流程图之二,该方法还包括:
[0103]
s309,当确定目标写入文件的长度小于或等于目标存储空间的剩余容量,将目标写入文件直接写入到目标存储空间。
[0104]
s310,当确定全部目标写入文件均写入完成时,确定每个目标写入文件各自对应的访问地址,并将全部访问地址组合成一个新文件;
[0105]
上述确定每个目标写入文件各自对应的访问地址的实现方式可以按照图4所示的实现方式进行,此处不再赘述。
[0106]
s311,确定多个目标存储空间的排列顺序,将所述排列顺序中前预设数量个目标存储空间作为第一目标存储空间,并分别在每个所述第一目标存储空间中写入所述新文件。
[0107]
为了方便理解,下面以情况3为例进行介绍,假设本实施例采用8+2纠删码的方式
对原始数据做一定冗余处理,则一次性获得的目标存储空间为10个,假设返回的目标存储空间的编号分别:220375,441659,251876,452165,176551,184217,186615,435627,270302,40184。
[0108]
需要注意的是,为了后续子文件和校验文件能够均匀分布在各个目标存储空间中,上述获得10个目标存储空间之间具有排列顺序。
[0109]
下面以一个300kb大小的待写入文件的存储过程为例描述上述处理步骤:将8份子文件和2份校验文件,并分别以追加写的方式写入上述10个目标存储空间中,可以先写子文件,再写校验文件,产生10个访问地址分别为:220375-0-38400、441659-0-38400、251876-0-38400、452165-0-38400、176551-0-38400、184217-0-38400、186615-0-38400、435627-0-38400、270302-0-38400、40184-0-38400。
[0110]
将上述这10个访问地址组合成一个新文件,文件内容至少包含分片个数和每个分片的访问地址以及纠删算法(可以根据情况增加其它可选内容),可以采用各种方式组织,例如使用json格式表示如下:
[0111]
{"ec":"8+2","fids":
[0112]
["220375-0-38400","441659-0-38400","251876-0-38400","452165-0-38400","176551-0-38400","184217-0-38400","186615-0-38400","435627-0-38400","270302-0-38400","40184-0-38400",]}
[0113]
获得以上json数据(也就是上述步骤s310中的新文件)之后,从上述10个目标存储空间中确定出3个第一目标存储空间,并将得到的json数据分别写入这3个第一目标存储空间内即可。
[0114]
在本技术实施例中,在确定第一目标存储空间时,可以按照上述10个目标存储空间的排列顺序从前到后确定出3个,进而在每个第一目标存储空间内写入一个子文件,每个子文件的访问地址可以如下:"220375-38400-222""441659-38400-222""251876-38400-222"。进而对这个3个访问地址做一个组合,将其大文件标识和偏移分别合并,长度由于肯定是相同的,因此只保留一个,组合结果如下:“220375&441659&251876-38400&38400&38400-222”,此处的3个偏移38400是相同的是因为第一个小文件写入的特殊情况,后续会出现不同,将组合后的访问地址返回客户端,后续客户端可以使用此地址访问小文件数据。
[0115]
在本技术实施例中,将上述得到的json数据之所以写三份,是因为小文件采用了8+2的纠删码,可以允许3个数据分片的丢失,因此,组合成的地址文件,也需要在两份数据丢失的情况下,仍然可访问。
[0116]
可选地,针对上述情况2和情况3,为了获得待写入最终的访问地址,本发明实施例还可以包括以下方法:
[0117]
根据每个第一目标存储空间的存储地址、每个第一目标存储空间内写入的新文件的长度和起始写入位置,生成每个第一目标存储空间内写入的新文件的访问地址;将得到的新文件的访问地址进行组合,得到一个目标访问地址;将目标访问地址返回至客户端。
[0118]
在上述实施例中,为了后续子文件和校验文件能够均匀分布在各个目标存储空间中,上述获得多个目标存储空间之间具有排列顺序,那么在前预设数量个目标存储空间中写入访问地址之后,还可以在完成待写入文件的写入操作之后,将多个目标存储空间的顺序做一个调整,例如第一个目标存储空间放到第10位,后面9个目标存储空间依次前进一
位,以使得每个待写文件的子文件和校验文件能够均匀分布在各个大文件中,访问地址组合文件也均匀分布在各个大文件中,保证大文件的利用率均衡,调整情况如图7,图7为本发明实施例提供的大文件中待写入文件与校验文件和地址组合的分布示意图。
[0119]
基于与上述文件写入方法相同的发明构思,本发明实施例还提供了一种文件写入系统800,请参见图8,图8为本发明实施例提供的文件写入系统800的功能模块图,包括:客户端模块810和服务端模块820;其中,客户端模块810还包括协议解析单元8101和数据发送单元8102,服务端模块820还包括文件处理单元8201和文件管理单元8202。
[0120]
应理解,本发明实施例中的客户端模块810和服务端模块820这两部分可分别部署在不同的服务器,也可以部署在同一台服务器,还可以采取集群方式部署,此处不作限定。
[0121]
客户端模块810,用于接收文件写入请求,从文件写入请求中提取待写入文件,并将待写入文件发送给服务端模块820。
[0122]
服务端模块820,用于:根据待写入文件确定目标写入文件,并基于目标写入文件获得目标存储空间;当确定目标写入文件的长度大于目标存储空间的剩余容量,将目标写入文件切分为第一子文件和第二子文件;其中,第一子文件的长度与剩余容量一致,第二子文件为目标写入文件中除第一子文件外的剩余文件;将第一子文件写入目标存储空间,关闭目标存储空间,并将第二子文件写入下一个存储空间。
[0123]
下面针对图8中示例性的客户端模块810和服务端模块820作详细介绍。
[0124]
在本技术实施例中,客户端模块810可以但不限于包括协议解析单元8101和数据发送单元8102。
[0125]
其中,协议解析单元8101用于接收各种标准或非标准存储协议发送的数据,并将接收到的数据转换成统一的标准文件格式(小文件格式)。协议解析单元8101用于接收文件写入请求,针对不同存储协议的数据,协议解析单元8101可以作如下处理:
[0126]
第一种情况:对于标准存储类协议,如nfs,s8等,协议解析单元8101可以先通过元数据存储服务记录待写入文件的元数据,并将提取的待写入文件转给数据发送单元8102。
[0127]
第二种情况:对于视频监控类协议,如ga/t-1400等,协议解析单元8101可以将结构化数据转给视图库服务处理,进而将提取的图片数据转(也就是待写入文件)发给数据发送单元8102。
[0128]
数据发送单元8102,用于将待写入文件发往服务端模块820,做后续的写入存储处理,并向协议解析单元8101返回待写入文件的存储地址信息。
[0129]
在可选的实施方式中,数据发送单元8102获得待写入文件之后,可以将待写入文件封装成固定格式的网络包,发往服务端模块820,例如,可以采用进程间的调用,共享内存,还可以采用rpc远程调用、rdma远程直接内存访问,webservice,restfull等各种技术实现。
[0130]
继续参见图8,在本技术实施例中,服务端模块820可以包括文件处理单元8201和文件管理单元8202。
[0131]
文件管理单元8202,用于维护多个大文件,根据业务需求维护大文件的打开写入和关闭等状态、负责存储空间的分配,与底层存储硬件交互。
[0132]
文件处理单元8201:用于根据待写入文件确定目标写入文件,并基于目标写入文件获得目标存储空间;当确定目标写入文件的长度大于目标存储空间的剩余容量,将目标
写入文件切分为第一子文件和第二子文件;其中,第一子文件的长度与剩余容量一致,第二子文件为目标写入文件中除第一子文件外的剩余文件;将第一子文件写入目标存储空间,关闭目标存储空间,并将第二子文件写入下一个存储空间。
[0133]
本技术实施例中,文件管理单元8202可以在接收到文件处理单元8201的大文件申请请求时,创建多个大文件,在可能的实施方式中,文件管理单元8202可以用来执行以下步骤:
[0134]
a1,根据获得的文件申请请求,创建一级目录以及预设数量个第一级大文件,并为每个第一级大文件分配标识,比如,创建1024个的第一级大文件,全部第一级大文件的标识分别为出1,3,5直到2047。
[0135]
a2,当确定预设数量个第一级大文件全部处于写满状态时,在获得文件申请请求后,创建预设数量个子目录,并为每个子目录分配标识。比如,创建1024个的子目录,全部子目录的标识分别为出2,4,6直到2048。
[0136]
a8,在每个子目录下,依次创建预设数量个大文件,并为每个大文件分配标识,分配标识的方式和步骤a1中的方式一致,此处不在赘述。
[0137]
依次类推,在创建的每个子目录下就可以继续按照步骤a2和a8的方式创建孙子目录以及每个孙子目录的大文件,直到达到预设层级(例如10级),可以看出,上述文件创建方式是利用广度优先模式进行大文件创建,可有效减少大多数情况下最终生成的小文件访问路径长度。
[0138]
为了方便理解上述实施原理,下面给出一个例子,假设上述文件写入系统800已经运行了一段时间,某个大文件/2/2/1已经写入了很多小文件,剩余容量为10mb,当前写入偏移为1068256068,此时,小文件处理单元8201获得的目标写入文件的长度为20mb,则上述文件写入系统800可以是这样运行的:
[0139]
协议解析单元8101用于根据获得的文件写入请求,提取20mb的文件数据,并将20mb的文件数据发送给数据发送单元8102。
[0140]
数据发送单元8102,用于将获得20mb的文件数据发送给文件处理单元8201。
[0141]
文件处理单元8201用于先将前10mb的文件数据写入一个大文件,进一步,文件处理单元8201向文件管理单元8202申请一个新的大文件。
[0142]
文件处理单元8201将这个新的大文件中写入剩余的10mb数据。
[0143]
在可选地的实施方式中,为了后续快速、准确的访问待写入文件,服务端模块820中的文件处理单元8201可以用来执行图5中的各个步骤,此处不再赘述。
[0144]
在可选地的实施方式中,文件处理单元8201还可以用来执行上述情况1中的步骤a1至步骤a3、情况2中的步骤b1至步骤b2以及上述情况3中的步骤c1至步骤c2,此处不再赘述。
[0145]
在可选地的实施方式中,文件处理单元8201还可以用来执行图6中的各个步骤以实现相应的技术效果。
[0146]
本发明实施例还提供一种可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前述实施方式中任一项的文件写入方法。该计算机可读存储介质可以是,但不限于,u盘、移动硬盘、rom、ram、prom、eprom、eeprom、磁碟或者光盘等各种可以存储程序代码的介质。
[0147]
应该理解到,在本发明所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0148]
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0149]
功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0150]
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1