一种基于分布式文件系统的批量文件操作方法及系统的制作方法

文档序号:6512304阅读:141来源:国知局
一种基于分布式文件系统的批量文件操作方法及系统的制作方法
【专利摘要】本发明涉及一种基于分布式文件系统的批量文件操作方法,具体包括以下步骤:步骤1:初始化;步骤2:打开分布式文件系统中的一个或多个文件;步骤3:判断是否有需要连续写入的数据内容,如果有,进行步骤4;否则,进行步骤5;步骤4:将多个字符串拼接成长字符;步骤5:对文件进行写操作;步骤6:判断是否到达预设的批次时间,如果到达,进行步骤7,否则,转向步骤3;步骤7:将缓存的数据刷到磁盘上,判断数据是否写完,如果写完,进行步骤8;否则,跳转至步骤3;步骤8:关闭该文件。本发明提高了应用程序在分布式文件系统上的写性能和文件操作的性能;同时保证数据的正确性和准确性。
【专利说明】一种基于分布式文件系统的批量文件操作方法及系统
【技术领域】
[0001]本发明涉及一种基于分布式文件系统的批量文件操作方法及系统,属于分布式文件系统的应用领域,云存储领域。
【背景技术】
[0002]目前全球企业数据的总容量大约是每三年就要翻两番。因此,如何保证企业拥有足够的存储空间可靠地存储数据,并能满足企业对低成本和高可用的数据需求,已经成为绝大多数企业面对的越来越严峻的挑战。
[0003]现有技术中,采用分布式文件系统,进行存储和检索,可以减少投资的成本,而采用文件系统方式又存在对于频繁变动数据的存储检索的效率低下的问题。
[0004]采用分布式文件系统存储数据,实现云存储;云底层应用采用分布式文件系统作存储,在分布式文件系统上操作会跨网络,性能与网络带宽和I/o的限制,应用程序直接在分布式文件系统上写很慢,无法满足实际生产系统的需求。

【发明内容】

[0005]本发明所要解决的技术问题是,针对现有技术的不足,提供一种提高应用程序在分布式文件系统上的写性能和文件操作性能的,并且在实际生产系统中可应用的基于分布式文件系统的批量文件操作方法。
[0006]本发明解决上述技术问题的技术方案如下:一种基于分布式文件系统的批量文件操作方法,具体包括以下步骤:
[0007]步骤1:初始化,读入程序的配置信息,记录第一个批次开始的时间;
[0008]步骤2:打开分布式文件系统中的一个或多个文件,对于频繁读写的文件,将文件句柄和对应的文件名称保存在内存中;
[0009]步骤3:判断是否有需要连续写入的数据内容,如果有,进行步骤4 ;否则,进行步骤5 ;
[0010]步骤4:将准备连续写入的多个字符串拼接成一个长字符串,以便将长字符串一次性写入分布式文件系统的文件;
[0011]步骤5:对文件进行写操作,根据步骤2在内存中记录的内容,按照文件名称找到对应的文件句柄,直接进行写入操作,把数据写入分布式文件系统文件中;
[0012]步骤6:获取当前时间,判断是否到达预设的批次时间,如果到达预设的批次时间,进行步骤7,否则,转向步骤3,进行下一个循环的数据写入;
[0013]步骤7:对于频繁写的文件,需要调用分布式文件系统的刷数据接口(如flush接口),将写入分布式文件系统缓存的数据刷到磁盘上,判断对应文件的数据是否写完,如果写完,进行步骤8 ;否则,将当前时间置为下一个批次的开始时间;跳转至步骤3,进行下一个循环的数据写入;
[0014]步骤8:对应文件的数据写完,关闭该文件。[0015]本发明的有益效果是:本发明所述的批量文件操作方法,大大提高应用程序在分布式文件系统上的写性能和文件操作的性能;同时保证数据的正确性和准确性,以及容错性和异常恢复的能力;使分布式文件系统在实际生产系统可用。
[0016]在上述技术方案的基础上,本发明还可以做如下改进。
[0017]进一步,所述步骤7中将写入分布式文件系统缓存的数据刷到磁盘上时,同时将文件名称和偏移量记录到断点文件中,保证断点与实际数据文件的一致性。
[0018]进一步,如果在程序运行的过程中,发生异常退出,程序重启恢复的方法如下:初始化,读入程序的配置信息,获取断点文件内容,打开分布式文件系统上的数据文件,根据断点文件记录的各个数据文件的名称的和对应的偏移量(调用feek方法)调整每个数据文件的偏移量,对断点批次处理的数据内容进行重新写入。
[0019]采用上述进一步方案的有益效果是,详单存储应用程序减少写断点次数,每刷一次数据到物理磁盘记录一次断点,记录每个详单存储文件的偏移量,这样既可以减少写断点文件次数,也可以保证每次的断点都是有效的;异常恢复时从断点处重新处理覆盖详单存储文件。
[0020]进一步,所述配置信息,包括数据文件目录、批次时间段大小、断点文件目录等。
[0021]进一步,所述步骤2中将文件句柄和对应的文件名称保存在内存中,可以定义一个数据结构:包括文件名称、文件句柄、偏移量、断点文件名称等信息,以数组、hash表等形式存在内存中。
[0022]因为在分布式文件系统上打开关闭文件操作属于跨主机跨网络操作,比较浪费时间;减少打开关闭文件操作可以大大减少处理时间。
[0023]字符串拼接属于内存操作,速度很快,对处理时间的影响可以忽略;减少写文件的次数可以减少分布式文件系统的开关,而每次对分布式文件系统的写操作都是跨网络的,是慢的,减少写操作的次数可以有效提高处理性能。
[0024]本发明所要解决的另一个技术问题是,针对现有技术的不足,提供一种提高应用程序在分布式文件系统上的写性能和文件操作性能的,并且在实际生产系统中可应用的基于分布式文件系统的批量文件操作系统。
[0025]本发明解决上述技术问题的技术方案如下:一种基于分布式文件系统的批量文件操作系统,包括初始化模块、保存模块、判断写入模块、写操作模块、判断批次模块和所述判断完成t旲块;
[0026]所述初始化模块进行初始化,读入程序的配置信息,记录第一个批次开始的时间;
[0027]所述保存模块打开分布式文件系统中的一个或多个文件,对于频繁读写的文件,将文件句柄和对应的文件名称保存在内存中;
[0028]所述判断写入模块判断是否有需要连续写入的数据内容,如果有,将准备连续写入的多个字符串拼接成一个长字符串,将长字符串一次性写入分布式文件系统的文件;否贝U,直接将数据写入分布式文件系统的文件;
[0029]所述写操作模块对文件进行写操作,根据保存模块在内存中记录的内容,按照文件名称找到对应的文件句柄,直接进行写入操作,把数据写入分布式文件系统文件中;
[0030]所述判断批次模块采集获取当前时间,判断是否到达预设的批次时间,如果到达预设的批次时间,调用分布式文件系统的刷数据接口(如flush接口),将写入分布式文件系统缓存的数据刷到磁盘上,否则,进行下一个循环的数据写入;
[0031]所述判断完成模块判断对应文件的数据是否写完,如果写完,关闭该文件;否则,将当前时间置为下一个批次的开始时间,进行下一个循环的数据写入。
[0032]本发明的有益效果是:本发明所述的批量文件操作方法,大大提高应用程序在分布式文件系统上的写性能和文件操作的性能;同时保证数据的正确性和准确性,以及容错性和异常恢复的能力;使分布式文件系统在实际生产系统可用。
[0033]在上述技术方案的基础上,本发明还可以做如下改进。
[0034]进一步,所述判断完成模块将写入分布式文件系统缓存的数据刷到磁盘上时,同时将文件名称和偏移量记录到断点文件中,保证断点与实际数据文件的一致性。
[0035]进一步,如果在程序运行的过程中,发生异常退出,程序重启恢复的方法如下:初始化,读入程序的配置信息,获取断点文件内容,打开分布式文件系统上的数据文件,根据断点文件记录的各个数据文件的名称的和对应的偏移量(调用feek方法)调整每个数据文件的偏移量,对断点批次处理的数据内容进行重新写入。
[0036]进一步,所述配置信息,包括数据文件目录、批次时间段大小、断点文件目录等。
[0037]进一步,所述保存模块将文件句柄和对应的文件名称保存在内存中,可以定义一个数据结构:包括文件名称、文件句柄、偏移量、断点文件名称等信息,以数组、hash表等形式存在内存中。
[0038]步骤1,尽可能减少打开关闭文件的次数,对于频繁读写操作的文件,不要每次对该文件的读写操作都打开关闭一次文件,采用一次打开,使该文件在频繁的读写操作过程中一直处于打开状态,直到对该文件的读写操作完成之后再关闭该文件。
[0039]如果同时有多个文件是打开的,要注意保存文件句柄和对应的文件名称,可以根据具体的需求采用数组,哈希表来保存,以便操作正确的文件,写数据时写到正确的文件里。
[0040]因为在分布式文件系统上打开关闭文件操作属于跨主机跨网络操作,比较浪费时间;减少打开关闭文件操作可以大大减少处理时间。
[0041]步骤2、尽量减少写文件次数,把能合并一次写的尽量合并后再写,将原本分多次写入文件的字符串拼接成一个长字符串,一次性写入文件系统;减少写的次数,最大限度的减少I/o操作;
[0042]可以将字符串在内存中拼接好之后一次性写到文件里;字符串拼接属于内存操作,速度很快,对处理时间的影响可以忽略;减少写文件的次数可以减少分布式文件系统的I/O,而每次对分布式文件系统的写操作都是跨网络的,是慢的。减少写操作的次数可以有效提闻处理性能;
[0043]计费系统的详单存储,每条话单记录写入文件是分三部分:
[0044]话单头:30字节的摘要,包含该条话单的关键信息;
[0045]话单记录:整条话单记录;
[0046]话单尾:一个换行符;
[0047]把这三部分拼接成一个字符串,一次写到文件里。
[0048]可以一次性写很大的一块数据和一次性写少量数据对性能的影响几乎一样。[0049]步骤3、定时把数据从分布式文件系统的缓存刷到磁盘,一段时间刷一次,固定时间长度的时间段;
[0050]因为分布式文件系统的写入机制是带缓存的(缓存大小可配置),即由应用写入分布式文件系统的数据,是先写入分布式文件系统的缓存,然后多次累计的数据达到缓存大小的时候,分布式文件系统会把缓存的数据刷到分布式文件系统的磁盘上,其他的程序才可以看到。
[0051]而在分布式文件系统缓存中的数据,其他程序是读不到的。而如果在缓存中有数据未刷到磁盘时,系统发生断电等故障,导致文件系统及应用进程挂掉,在缓存中的数据就会丢失,无法找回来了。
[0052]分布式文件系统提供一个强制刷数据到磁盘的接口(类似于flush接口),供应用程序调用。由应用程序控制写的正确性,和断点恢复机制。
[0053]应用程序设置一个批次时间配置项,表示没两次刷缓存数据到磁盘的之间的时间段长度。每隔一个批次的时间,调用分布式文件系统的flush接口,刷缓存数据到磁盘一次。然后记录文件的偏移量(即文件中数据的位置信息)和应用程序的数据信息(如处理到什么数据),将这些信息写入断点文件,断点恢复时使用。每次写断点文件时需要实时刷断点信息到分布式文件系统的磁盘。
[0054]步骤4、此步骤用于在使用分布式文件系统的应用系统发生异常停止的时候,重新启动时用的。保证重新启动的程序能够正确的接着停止时的数据接着处理,不会有数据丢失或重复。也称断点恢复。
[0055]应用程序重启时,先读断点信息,根据断点信息处理数据。因为断点以前的数据都是刷到磁盘的,从断点往后开始处理,断电时缓存里丢失的数据会被重新处理,保障数据正确性。
[0056]通过断点恢复机制来弥补不能实时刷数据到磁盘的不足;每次刷数据后记断点;如果异常退出,重启恢复时从断点恢复。
[0057]这样,一方面不需要实时刷数据到磁盘,同时又能保证数据准确性。
【专利附图】

【附图说明】
[0058]图1为本发明具体实施例1所述的一种基于分布式文件系统的批量文件操作方法流程图;
[0059]图2为本发明具体实施例2所述的一种基于分布式文件系统的批量文件操作系统框图。
[0060]附图中,各标号所代表的部件列表如下:
[0061 ] 1、初始化模块,2、保存模块,3、判断写入模块,4、写操作模块,5、判断批次模块,6、所述判断完成模块。
【具体实施方式】
[0062]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0063]如图1所示,本发明具体实施例1所述的一种基于分布式文件系统的批量文件操作方法,具体包括以下步骤:
[0064]步骤1:初始化,读入程序的配置信息,记录第一个批次开始的时间;
[0065]步骤2:打开分布式文件系统中的一个或多个文件,对于频繁读写的文件,将文件句柄和对应的文件名称保存在内存中;
[0066]步骤3:判断是否有需要连续写入的数据内容,如果有,进行步骤4 ;否则,进行步骤5 ;
[0067]步骤4:将准备连续写入的多个字符串拼接成一个长字符串,以便将长字符串一次性写入分布式文件系统的文件;
[0068]步骤5:对文件进行写操作,根据步骤2在内存中记录的内容,按照文件名称找到对应的文件句柄,直接进行写入操作,把数据写入分布式文件系统文件中;
[0069]步骤6:获取当前时间,判断是否到达预设的批次时间,如果到达预设的批次时间,进行步骤7,否则,转向步骤3,进行下一个循环的数据写入;
[0070]步骤7:对于频繁写的文件,需要调用分布式文件系统的flush接口,将写入分布式文件系统缓存的数据flush到磁盘上,判断对应文件的数据是否写完,如果写完,进行步骤8 ;否则,将当前时间置为下一个批次的开始时间;跳转至步骤3,进行下一个循环的数据写入;
[0071]步骤8:对应文件的数据写完,关闭该文件。
[0072]所述步骤7中将写入分布式文件系统缓存的数据flush到磁盘上时,同时将文件名称和偏移量记录到断点文件中,保证断点与实际数据文件的一致性。
[0073]如果在程序运行的过程中,发生异常退出,程序重启恢复的方法如下:初始化,读入程序的配置信息,获取断点文件内容,打开分布式文件系统上的数据文件,根据断点文件记录的各个数据文件的名称的和对应的偏移量(调用feek方法)调整每个数据文件的偏移量,对断点批次处理的数据内容进行重新写入。
[0074]所述配置信息,包括数据文件目录、批次时间段大小、断点文件目录等。
[0075]所述步骤2中将文件句柄和对应的文件名称保存在内存中,可以定义一个数据结构:包括文件名称、文件句柄、偏移量、断点文件名称等信息,以数组、hash表等形式存在内存中。
[0076]因为在分布式文件系统上打开关闭文件操作属于跨主机跨网络操作,比较浪费时间;减少打开关闭文件操作可以大大减少处理时间。
[0077]字符串拼接属于内存操作,速度很快,对处理时间的影响可以忽略;减少写文件的次数可以减少分布式文件系统的开关,而每次对分布式文件系统的写操作都是跨网络的,是慢的,减少写操作的次数可以有效提高处理性能。
[0078]如图2所示,本发明具体实施例2所示的一种基于分布式文件系统的批量文件操作系统,包括初始化模块1、保存模块2、判断写入模块3、写操作模块4、判断批次模块5和所述判断完成1吴块6 ;
[0079]所述初始化模块I进行初始化,读入程序的配置信息,记录第一个批次开始的时间;
[0080]所述保存模块2打开分布式文件系统中的一个或多个文件,对于频繁读写的文件,将文件句柄和对应的文件名称保存在内存中;[0081]所述判断写入模块3判断是否有需要连续写入的数据内容,如果有,将准备连续写入的多个字符串拼接成一个长字符串,将长字符串一次性写入分布式文件系统的文件;否则,直接将数据写入分布式文件系统的文件;
[0082]所述写操作模块4对文件进行写操作,根据保存模块在内存中记录的内容,按照文件名称找到对应的文件句柄,直接进行写入操作,把数据写入分布式文件系统文件中;
[0083]所述判断批次模块5采集获取当前时间,判断是否到达预设的批次时间,如果到达预设的批次时间,调用分布式文件系统的flush接口,将写入分布式文件系统缓存的数据flush到磁盘上,否则,进行下一个循环的数据写入;
[0084]所述判断完成模块6判断对应文件的数据是否写完,如果写完,关闭该文件;否贝U,将当前时间置为下一个批次的开始时间,进行下一个循环的数据写入。
[0085]所述判断完成模块6将写入分布式文件系统缓存的数据flush到磁盘上时,同时将文件名称和偏移量记录到断点文件中,保证断点与实际数据文件的一致性。
[0086]如果在程序运行的过程中,发生异常退出,程序重启恢复的方法如下:初始化,读入程序的配置信息,获取断点文件内容,打开分布式文件系统上的数据文件,根据断点文件记录的各个数据文件的名称的和对应的偏移量(调用feek方法)调整每个数据文件的偏移量,对断点批次处理的数据内容进行重新写入。
[0087]所述配置信息,包括数据文件目录、批次时间段大小、断点文件目录等。
[0088]所述保存模块2将文件句柄和对应的文件名称保存在内存中,可以定义一个数据结构:包括文件名称、文件句柄、偏移量、断点文件名称等信息,以数组、hash表等形式存在内存中。
[0089]四川移动云详单试点项目,采用此技术方案进行优化:
[0090]优化前后详单存储性能测试数据(生产需求是5000条/s):
[0091]应用分布式文件系统存储优化前70条/s ;
[0092]应用分布式文件系统存储优化后5148条/s ;
[0093]优化步骤:
[0094]1、把打开关闭详单存储文件改为一直打开
[0095]原系统是写一条话单,需要打开关闭详单存储文件一次;改进方法是:定义一个数组来保存每个号段的详单存储文件名称和对应的文件句柄,直到写完当天的详单存储文件,开始写第二天的文件时再关闭;
[0096]2、减少写文件的次数
[0097]原系统是每条话单写详单存储文件三次,记录头、变长话单、记录尾;改进方法是:在内存中把详单记录头、详单记录和详单记录尾拼接合并,然后一次性写到详单存储文件里
[0098]3、定时刷数据
[0099]原系统应用程序没有主动刷数据的操作,只有分布式文件系统本身累计4K从分布式文件系统的缓存刷到磁盘一次;这样如果某些文件写数据的大小不到4K,则无法刷到物理磁盘中;如遇机器故障或断电等异常情况,系统退出,在分布式文件系统缓存中未到4K的数据就会丢失,无法找回来了
[0100]改进方法是:[0101]详单存储应用程序定时刷数据从分布式文件系统的缓存到磁盘,每个固定一段时间刷一次,比如15分钟;保证刷完数据的那一刻所有在缓存中的数据已写到物理磁盘上
[0102]4、分批次记录断点,异常时按批次恢复
[0103]原系统记录断点的方式,处理每条话单记录一次断点;这样写文件次数太多,而且数据未实时刷到磁盘,记录的断点也没有意义
[0104]改进方法是:详单存储应用程序减少写断点次数,每刷一次数据到物理磁盘记录一次断点,记录每个详单存储文件的偏移量,这样既可以减少写断点文件次数,也可以保证每次的断点都是有效的;异常恢复时从断点处重新处理覆盖写详单存储文件。
[0105]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种基于分布式文件系统的批量文件操作方法,其特征在于,具体包括以下步骤: 步骤1:初始化,读入程序的配置信息,记录第一个批次开始的时间; 步骤2:打开分布式文件系统中的一个或多个文件,对于频繁读写的文件,将文件句柄和对应的文件名称保存在内存中; 步骤3:判断是否有需要连续写入的数据内容,如果有,进行步骤4 ;否则,进行步骤5 ;步骤4:将准备连续写入的多个字符串拼接成一个长字符串,以便将长字符串一次性写入分布式文件系统的文件; 步骤5:对文件进行写操作,根据步骤2在内存中记录的内容,按照文件名称找到对应的文件句柄,直接进行写入操作,把数据写入分布式文件系统文件中; 步骤6:获取当前时间,判断是否到达预设的批次时间,如果到达预设的批次时间,进行步7,否则,转向步骤3,进行下一个循环的数据写入; 步骤7:对于频繁写的文件,需要调用分布式文件系统的刷数据接口,将写入分布式文件系统缓存的数据刷到磁盘上,判断对应文件的数据是否写完,如果写完,进行步骤8 ;否贝U,将当前时间置为下一个批次的开始时间;跳转至步骤3,进行下一个循环的数据写入;步骤8:对应文件的数据写完,关闭该文件。
2.根据权利要求1所述的一种基于分布式文件系统的批量文件操作方法,其特征在于,所述步骤7中将写入分布式文件系统缓存的数据刷到磁盘上时,同时将文件名称和偏移量记录到断点文件中,保证断点与实际数据文件的一致性。
3.根据权利要求1或2所述的一种基于分布式文件系统的批量文件操作方法,其特征在于,如果在程序运行的过程中,发生异常退出,程序重启恢复的方法如下:初始化,读入程序的配置信息,获取断点文件内容,打开分布式文件系统上的数据文件,根据断点文件记录的各个数据文件的名称的和对应的偏移量调整每个数据文件的偏移量,对断点批次处理的数据内容进行重新写入。
4.根据权利要求3所述的一种基于分布式文件系统的批量文件操作方法,其特征在于,所述配置信息,包括数据文件目录、批次时间段大小、断点文件目录。
5.根据权利要求4所述的一种基于分布式文件系统的批量文件操作方法,其特征在于,所述步骤2中将文件句柄和对应的文件名称保存在内存中,可以定义一个数据结构:包括文件名称、文件句柄、偏移量、断点文件名称等信息,以数组、hash表形式存在内存中。
6.一种基于分布式文件系统的批量文件操作系统,其特征在于,包括初始化模块、保存模块、判断写入模块、写操作模块、判断批次模块和所述判断完成模块; 所述初始化模块进行初始化,读入程序的配置信息,记录第一个批次开始的时间; 所述保存模块打开分布式文件系统中的一个或多个文件,对于频繁读写的文件,将文件句柄和对应的文件名称保存在内存中; 所述判断写入模块判断是否有需要连续写入的数据内容,如果有,将准备连续写入的多个字符串拼接成一个长字符串,将长字符串一次性写入分布式文件系统的文件;否则,直接将数据写入分布式文件系统的文件; 所述写操作模块对文件进行写操作,根据保存模块在内存中记录的内容,按照文件名称找到对应的文件句柄,直接进行写入操作,把数据写入分布式文件系统文件中; 所述判断批次模块采集获取当前时间,判断是否到达预设的批次时间,如果到达预设的批次时间,调用分布式文件系统的刷数据接口,将写入分布式文件系统缓存的数据刷到磁盘上,否则,进行下一个循环的数据写入; 所述判断完成模块判断对应文件的数据是否写完,如果写完,关闭该文件;否则,将当前时间置为下一个批次的开始时间,进行下一个循环的数据写入。
7.根据权利要求6所述的一种基于分布式文件系统的批量文件操作系统,其特征在于,所述判断完成模块将写入分布式文件系统缓存的数据刷到磁盘上时,同时将文件名称和偏移量记录到断点文件中,保证断点与实际数据文件的一致性。
8.根据权利要求6或7所述的一种基于分布式文件系统的批量文件操作系统,其特征在于,如果在程序运行的过程中,发生异常退出,程序重启恢复的方法如下:初始化,读入程序的配置信息,获取断点文件内容,打开分布式文件系统上的数据文件,根据断点文件记录的各个数据文件的名称的和对应的偏移量调整每个数据文件的偏移量,对断点批次处理的数据内容进行重新写入。
9.根据权利要求8所述的一种基于分布式文件系统的批量文件操作系统,其特征在于,所述配置信息,包括数据文件目录、批次时间段大小、断点文件目录。
10.根据权利要求9所述的一种基于分布式文件系统的批量文件操作系统,其特征在于,所述保存模块将文件句柄和对应的文件名称保存在内存中,可以定义一个数据结构:包括文件名称、文件句柄、偏移量、 断点文件名称等信息,以数组、hash表形式存在内存中。
【文档编号】G06F11/07GK103488433SQ201310429874
【公开日】2014年1月1日 申请日期:2013年9月18日 优先权日:2013年9月18日
【发明者】李晓静 申请人:北京思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1