本发明属于文件系统设计技术领域,具体涉及一种基于小文件的自动化聚合打包方法及系统。
背景技术:
分布式文件系统具有良好的可扩展性和容错性,能够满足海量数据存储的需求。
但是,在很多应用场合除了要求支持海量大文件的存储,还需要支持海量小文件的存储,然后存储海量小文件时,支持的文件数量少、文件读取效率低。
故而提出以目录为单位对文件进行聚合存储,可以很好地解决每个目录包含众多文件的海量小文件的高效存储和实时访问。但是,由于某些小文件场景的项目现场业务初期并没有使用聚合功能,随着业务量的增加,集群所受压力逐渐增加。此为现有技术的不足之处。
因此,针对现有技术中的上述缺陷,提供设计一种基于小文件的自动化聚合打包方法及系统;以解决现有技术中的上述缺陷,是非常有必要的。
技术实现要素:
本发明的目的在于,针对上述现有技术存在的缺陷,提供设计一种基于小文件的自动化聚合打包方法及系统,以解决上述技术问题。
为实现上述目的,本发明给出以下技术方案:
一种基于小文件的自动化聚合打包方法,其特征在于,包括以下步骤:
s1:服务端与客户端之间建立链接关系;
s2:对临时文件中的子目录进行分配;
s3:执行聚合打包任务。
作为优选,所述步骤s1具体包括以下步骤:
s1.1:服务端根据指定的客户端个数,启动socket服务等待客户端的链接;
s1.2:客户端和服务端建立socket服务连接。
作为优选,所述步骤s2具体包括以下步骤:
s2.1:服务端与客户端建立连接后,服务端将临时文件中的所有子目录进行平均分配,并通过socket发送至各个客户端;
s2.2:客户端根据指定的进程平均分配子目录。
作为优选,所述步骤s3具体包括以下步骤:
s3.1:服务端子进程聚合打包零散文件;
s3.2:客户端进行聚合打包操作。
本发明还提供一种基于小文件的自动化聚合打包系统,其特征在于,包括:
通信关系建立模块:服务端与客户端之间建立链接关系;
子目录分配模块:对临时文件中的子目录进行分配;
聚合打包模块:执行聚合打包任务。
作为优选,所述的通信关系建立模块具体包括:
服务端根据指定的客户端个数,启动socket服务等待客户端的链接;客户端和服务端建立socket服务连接。
作为优选,所述的子目录分配模块具体包括:
服务端与客户端建立连接后,服务端将临时文件中的所有子目录进行平均分配,并通过socket发送至各个客户端;客户端根据指定的进程平均分配子目录。
作为优选,所述的聚合打包模块具体包括:
服务端子进程聚合打包零散文件;客户端进行聚合打包操作。
本发明的有益效果在于,将原始的普通文件,转化为聚合文件,使用聚合功能减少osd压力、增加顺序读取性能等优化,提高文件读取性能。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
图1是本发明提供的一种基于小文件的自动化聚合打包方法的原理框图。
图2是本发明提供的一种基于小文件的自动化聚合打包方法的流程图。
图3是本发明提供的一种基于小文件的自动化聚合打包系统的原理框图。
具体实施方式
下面结合附图并通过具体实施例对本发明进行详细阐述,以下实施例是对本发明的解释,而本发明并不局限于以下实施方式。
实施例1:
如图1和2所示,本发明提供的一种基于小文件的自动化聚合打包方法,其特征在于,包括以下步骤:
s1:服务端与客户端之间建立链接关系;
s2:对临时文件中的子目录进行分配;
s3:执行聚合打包任务。
本实施例中,所述步骤s1具体包括以下步骤:
s1.1:服务端根据指定的客户端个数,启动socket服务等待客户端的链接;
s1.2:客户端和服务端建立socket服务连接。
本实施例中,所述步骤s2具体包括以下步骤:
s2.1:服务端与客户端建立连接后,服务端将临时文件中的所有子目录进行平均分配,并通过socket发送至各个客户端;
s2.2:客户端根据指定的进程平均分配子目录。
本实施例中,所述步骤s3具体包括以下步骤:
s3.1:服务端子进程聚合打包零散文件;
s3.2:客户端进行聚合打包操作。
本实施例中:
客户端执行命令:./icfs_tools_aggpack.py–c–ixx.xx.xx.xx–tx;
-c是指以客户端运行此程序;-t后跟多线程个数;-i后跟需与服务端网络互通的publicip;
执行上述命令行后,首先会对命令行进行解析,通过-c和-s来判断是server端和客户端;
客户端有两个参数,合法则继续,不合法则退出并输出提示:输入合法字符;
解析目录,如果有子目录则继续解析,直至解析遍历完所有子目录;
对所有文件进行均分处理;
客户端多线程处理非聚合小文件,进行文件聚合打包。
服务端执行命令:./icfs_tools_aggpack.py–s–ixx.xx.xx.xx–nx–d/mnt/icfs/x–tx;
-s是指以服务端运行此程序;-t后跟多线程个数;-i后跟需与服务端网络互通的publicip;-n后跟客户端个数;-d后跟需要聚合的目录;
执行上述命令行后,首先会对命令行进行解析,通过-c和-s来判断是server端和客户端;
客户端有四个参数,判定这四个参数是否合法,合法则继续,不合法则退出并输出提示:输入合法字符;
解析目录,如果有子目录则继续解析,直至解析遍历完所有子目录;
服务端主线程进行监听,如果客户端的个数小于设定n,则继续监听,不执行聚合打包;如果客户端个数等于设定的n,则将目录进行均分,并将目录依次发送到客户端;
客户端对指定目录进行递归查找所有的非聚合文件,将扫描到的非聚合文件整理至临时文件中,计算出所有客户端任务的起始位置,并开始进行多进程处理文件。
实施例2:
如图3所示,本发明提供的一种基于小文件的自动化聚合打包系统,其特征在于,包括:
通信关系建立模块:服务端与客户端之间建立链接关系;
子目录分配模块:对临时文件中的子目录进行分配;
聚合打包模块:执行聚合打包任务。
本实施例中,所述的通信关系建立模块具体包括:
服务端根据指定的客户端个数,启动socket服务等待客户端的链接;客户端和服务端建立socket服务连接。
本实施例中,所述的子目录分配模块具体包括:
服务端与客户端建立连接后,服务端将临时文件中的所有子目录进行平均分配,并通过socket发送至各个客户端;客户端根据指定的进程平均分配子目录。
本实施例中,所述的聚合打包模块具体包括:
服务端子进程聚合打包零散文件;客户端进行聚合打包操作。
以上公开的仅为本发明的优选实施方式,但本发明并非局限于此,任何本领域的技术人员能思之的没有创造性的变化,以及在不脱离本发明原理前提下所作的若干改进和润饰,都应落在本发明的保护范围内。