一种均衡分布的文件存储方法及系统的制作方法
【技术领域】
[0001]本发明涉及数据存储领域,尤其涉及一种均衡分布的文件存储方法及系统。
【背景技术】
[0002]随着大数据时代的到来,所需处理的数据量越来越大,文件存储系统在云存储领域得到越来越大的应用。由于互联网用户基数越来越大,单系统需要支持的用户应用需求越来越多,从而导致系统磁盘单目录下的存储的文件也越来越多。如果在单目录下存放大量文件,那么在进行目录项的遍历时搜索文件将非常繁琐,导致性能降低。另外Linux的ext3文件系统(第三代扩展文件系统)单目录下能够存放的文件数默认不越过3.2万个。而实际上,为了安全考虑,一般单目录都不建议存储如此多的文件。而如果在多目录下存储用户上传的文件,则会出现文件访问效率低、以及容易覆盖现有文件的问题。
[0003]因此,现有技术还有待于改进和发展。
【发明内容】
[0004]鉴于上述现有技术的不足,本发明的目的在于提供一种均衡分布的文件存储方法及系统,旨在解决现有的多目录文件存储方式访问效率低、容易覆盖现有文件的问题。
[0005]本发明的技术方案如下:
一种均衡分布的文件存储方法,包括步骤:
A、根据上传的目标文件的文件信息、以及上传信息组织成编码,然后以所述编码生成所述目标文件在服务器的唯一的存储名称;
B、对所述存储名称进行加密生成加密值,截取所述加密值的一部分字符作为其所属存储目录的目录名称,根据所述目录名称将所述目标文件存储于相应所述存储目录下。
[0006]在一实施例中,所述文件信息包括目标文件的原始名称、字节长度及CRC32值。所述上传信息包括所述目标文件的上传时间和所述目标文件的计数;其中,每接收到一个上传的所述目标文件,所述服务器维护的计数器加1。
[0007]在一实施例中,所述步骤B具体包括:
对所述存储名称进行md5运算,截取所得md5值的前面一部分字符,作为所述存储目录的所述目录名称。
[0008]在一实施例中,所述步骤B之后还包括:
C、建立一个目标文件的所述原始名称与生成的所述存储名称的映射表。
[0009]在一实施例中,所述步骤A之前包括:
预先建立所述存储目录,所述存储目录的所述目录名称以多个字符命名。
[0010]—种均衡分布的文件存储系统,包括:
存储名称生成模块,用于根据上传的目标文件的文件信息、上传信息组织成编码,然后以所述编码生成所述目标文件在服务器的唯一的存储名称;存储模块,用于对所述存储名称进行加密生成加密值,截取所述加密值的一部分字符作为其所属存储目录的目录名称,根据所述目录名称将所述目标文件存储于相应所述存储目录下。
[0011]在一实施例中,所述文件信息包括所述目标文件的原始名称、字节长度及CRC32值;所述上传信息包括所述目标文件的上传时间和所述目标文件的计数;其中,每接收到一个上传的所述目标文件,所述服务器维护的计数器加1。
[0012]在一实施例中,所述存储模块包括:
md5运算单元,用于对所述存储名称进行md5运算,截取所得md5值的前面一部分字符,作为所述存储目录的所述目录名称。
[0013]在一实施例中,均衡分布的文件存储系统,还包括:
映射表建立模块,用于建立一个所述目标文件的所述原始名称与生成的所述存储名称的映射表。
[0014]有益效果:本发明根据一些目标文件以及其他特有的信息生成唯一的存储名称,并且对存储名称进行加密处理得到加密值,截取加密值前面的一部分作为所属存储目录的目录名称,将上传的文件均匀地分布在存储目录下,且不会错误地覆盖其他现有的文件。同时还能提供方便快速的文件访问。
【附图说明】
[0015]图1为本发明一种均衡分布的文件存储方法较佳实施例的流程图。
[0016]图2为本发明一种均衡分布的文件存储系统较佳实施例的结构框图。
【具体实施方式】
[0017]本发明提供一种均衡分布的文件存储方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0018]请参阅图1,图1为本发明一种均衡分布的文件存储方法较佳实施例的流程图,如图所示,其包括步骤:
5101、根据上传的目标文件的文件信息、上传信息组织成编码,然后以所述编码生成目标文件在服务器的唯一的存储名称;
5102、对所述存储名称进行加密生成加密值,截取所述加密值的一部分字符作为其所属存储目录的目录名称,根据所述目录名称将目标文件存储于相应存储目录下。
[0019]其中上述目标文件的文件信息包括原始名称、字节长度及CRC32值。其中的字节长度是指目标文件内容大小,保留字节长度和CRC32值可以方便目标文件上传完成后对文件完整性进行检测,以避免在网络传输和实际的硬盘存储过程中出现问题。其中,上传信息包括目标文件的上传时间和服务器维护的计数器上对目标文件的计数,目标文件的上传时间是指上传目标文件时服务器当前的unix时间戳。服务器维护的计数器上对目标文件的计数则是指每接收到一个上传的目标文件,则所述服务器维护的计数器加1。通过这些特有的信息就能确保存储名称的唯一性。在进行编码时,可采用base64的编码,其是用于传输8bit字节代码的编码方式之一。然后以上述编码生成目标文件在服务器上的存储名称(即直接将所述编码作为存储名称),该存储名称在服务器上是唯一的,确保不会出现在上传时现有文件被覆盖的情况。
[0020]然后对存储名称进行在线加密得到加密值,截取其中的一部分字符作为其所属存储目录的目录名称。由于哈希具有很好的负载均衡性,可以将生成的唯一文件名(即前面的存储名称),进行md5计算(信息摘要算法,其可将数据运算为另一固定长度值,即md5值),然后截取md5值的前面一部分字符,以其作为其所属存储目录的目录名称。另外还可截取不同部分分别作为各级目录的名称,从而可以构建得到二级目录(即二级存储目录)或三级目录(即三级存储目录)或更多级的目录,并将目标文件存放于对应的目录下。
[0021 ] 选择字符的方式可以是一级目录选择头N个字符作为目录名称,二级目录选择紧接着后面的N个字符作为目录名称,依次类推,其中的N可以是I或2或3或者4等等。举例来说,可以根据文件存储系统中所用磁盘的容量大小来确定构造几级目录。由于md5值是长度为32个字符的十六进制数,如82bdc4a5890adc59cec82cb60f8af692,那么构造二级目录时,假设选取2个字符作为每一级目录的目录名称,即取