一种特定分布式数据存储文件结构去冗余构造方法及系统的制作方法
【技术领域】
[0001]本发明涉及分布式系统技术领域,特别涉及一种特定分布式数据存储文件结构去冗余构造方法及系统。
【背景技术】
[0002]随着网络应用数据量的不断增大,对数据存储系统的存取性能、开销以及可靠性等方面都有更高的要求,而分布式存储系统可以满足上述的存储。分布式顺序表是分布式存储系统中比较常用的数据组织格式,在数据存储文件中数据按照键值对的方式存储,文件中的键值对按照键值对的主键的顺序排列,分布式顺序表的数据文件组织格式如图1所不O
[0003]在已有方法和技术中,针对分布式顺序表的数据加载一般通过两种途径实现,(I)通过分布式顺序表系统外部接口实现,类似数据库ODBC/JDBC接口,分布式顺序表也提供外部API,通过调用这个API可以实现单条记录的写入操作,反复调用该接口可实现批量数据的加载任务,这种方法只适用于少量数据的交互式写入操作,并不适用于大批量数据的加载。
[0004](2)利用MapReduce的框架直接生成分布式顺序表底层数据存储文件,再通过激活操作使分布式顺序表系统能够访问该文件中存储的新的表数据,图2展示了一种分布式顺序表数据的并行加载方法(例如发明“一种分布式顺序表的数据导入方法及其系统”)的流程图,该并行数据加载方法分为了数据读入、数据排序、数据分片、数据转换、数据写入以及数据加载共六个步骤,其中从数据排序开始,到数据写入均可并行执行,虽然该方法已经利用了并行数据处理技术加速了数据加载性能,但是受限于外排序过程的耗时过长,使得多服务器磁盘聚合I/O吞吐率只能达到约50MB/S,无法随服务器数量增加而增长。
[0005]通过对现有的数据加载方式进行研究发现其技术缺点是:(I)加载性能不够理想;
(2)生成的数据文件庞大,这两个缺点的存在原因是数据文件的数据格式有比较多的冗余,使得在数据加载过程中,构建数据文件的时候会增加数据字段拼接次数,以及增加生成数据文件大小。
[0006]发明专利“一种分布式顺序表的数据导入方法及其系统”,该发明公开了一种分布式顺序表的数据导入方法及其系统,方法包括:S1、使用Map函数将待导入数据转换为键值对;S2、将所述键值对按照键进行排序;S3、对排序后的键值对进行分片,分别将每个分片分配给一个Reduce函数;S4、各Reduce函数对各自分配的分片进行格式转换,将所述分片转换为所述分布式顺序表的底层数据存储文件要求的格式,将所述格式转换后的分片写入到底层数据存储文件中;S5、将所述底层数据存储文件加载到所述分布式顺序表中。该发明把待导入数据直接写入分布式顺序表的底层数据存储文件,能节省分片定位时间,加快导入速度,该发明是将需要导入的数据分片,然后利用通用的Map/Reduce并行计算模型对数据分片进行并行排序和并行数据写入,从而提高数据导入的性能,但因为受制于分布式顺序表的文件存储结构,该发明的数据导入(数据写入)性能无法得到进一步提高,而本发明针对上述发明中的性能问题加以改进,通过将目标数据文件中的冗余数据加以合理归并,从而大大减少写入的数据量,因此能够提高数据加载的性能。
[0007]发明专利“一种电网时序大数据并行加载方法”,该发明公开了一种电网时序大数据并行加载方法,以解决多客户端并行加载海量历史时序数据时遇到的不能并行加载而产生等待现象的问题。该发明通过对索引映射表做分区处理、根据待加载的数据量的大小对历史时序数据存储表做分区预处理、根据各数据节点上所分配的历史时序数据存储表分区的范围,对待加载的海量历史时序数据做保持数据局部性的处理,经过上述处理后能够有效减少并行加载海量历史时序数据时多客户端读写索引映射表文件遇到的磁盘1冲突和集群不同节点之间网络通信开销,避免单节点加载海量历史时序数据时负载过重带来的性能问题。该方法能充分利用分布式并行处理能力,大大减少海量历史时序数据加载的时间。该发明是利用多计算机通过对待加载数据进行分区预先处理,从而降低多客户端并行加载数据时出现的瓶颈问题,与该发明解决问题不同,本发明主要针对分布式顺序表的并行加载问题,另外,本发明的要点主要在于如何减少分布式顺序表存储文件中的冗余数据。
【发明内容】
[0008]现有技术中上述两种缺陷是由于分布式顺序表的底层数据存储文件有较多的冗余导致的,这些冗余主要是为了在分布式顺序表查询的过程中能够加快查询速度,但是这些冗余增加了数据加载过程中的计算机性能的消耗,并且增大了生成数据文件的大小,降低了加载性能,解决上述两项缺陷可以通过减少底层存储数据文件的冗余来实现,即对现有的分布式顺序表的数据加载过程中的写入的底层存储数据文件格式进行修改,将文件中属于同一行数据的键值对合并成一个键值对,减少底层存储数据文件的冗余,故本发明提出一种特定分布式数据存储文件结构的去冗余构造方法及系统。
[0009]本发明提出一种特定分布式数据存储文件结构去冗余构造方法,包括:
[0010]步骤I,创建底层存储文件格式,将底层存储文件以所述底层存储文件格式进行存储,生成新底层存储文件;
[0011 ]步骤2,设置读取所述新底层存储文件的存储文件读取方式,将所述新底层存储文件还原成分布式系统能够读取的原始底层存储文件,并进行读取。
[0012]所述创建底层存储文件格式的具体步骤为将所述底层存储文件的一行数据拆分成多列数据;将所述多列数据合并到一个值中;将底层存储文件的主键与所述值组合成一对键值对。
[0013]所述步骤2包括当读取数据的时,将多对键值对从所述新底层存储文件中读出,并转换为分布式系统能够识别的键值对格式,并将分布式系统能够识别的键值对格式的键值对缓存在内存。
[0014]所述步骤2的具体步骤为通过查找主键定位到需要拆分的键值对的位置;将所述键值对及后续多条键值对读取出来;将读取出的键值对转换为分布式系统能够识别的键值对并缓存在内存中。
[0015]本发明还提出一种特定分布式数据存储文件结构去冗余构造系统,包括:
[0016]创建底层存储文件格式模块,用于创建底层存储文件格式,将底层存储文件以所述底层存储文件格式进行存储,生成新底层存储文件;
[0017]读取模块,用于设置读取所述新底层存储文件的存储文件读取方式,将所述新底层存储文件还原成分布式系统能够读取的原始底层存储文件,并进行读取。
[0018]所述创建底层存储文件格式模块的具体用于为将所述底层存储文件的一行数据拆分成多列数据;将所述多列数据合并到一个值中;将底层存储文件的主键与所述值组合成一对键值对。
[0019]所述读取模块用于当读取数据的时,将多对键值对从所述新底层存储文件中读出,并转换为分布式系统能够识别的键值对格式,并将分布式系统能够识别的键值对格式的键值对缓存在内存。
[0020]所述读取模块具体用于为通过查找主键定位到需要拆分的键值对的位置;将所述键值对及后续多条键值对读取出来;将读取出的键值对转换为分布式系统能够识别的键值对并缓存在内存中。
[0021 ]由以上方案可知,本发明的优点在于:
[0022]图6展示了使用不同的优化方法时,数据加载执行时间的对比,其中,“缺省参数”和“经验参数”是使用不同的参数执行数据加载程序所得到的执行时间,没有使用其他任何优化手段。可以看出在使用“缺省参数”的情况下,在加载数据量较小时,与“经验参数”相比并没有很大的性能差距,而在加载数据量增大的情况下,参数设置不合理的问题逐步显露出来,与“经验参数”的加载性能拉开了差距。“经验参数+文件压缩”是运用DataBlock级别的文件压缩技术之后的数据加载执行时间,与“经验参数”相比性能提升了 21 %左右。“经验参数+文件压缩+加载优化”是在“经验参数+文件压缩”的基础上运用本发明中新的文件存储格式优之后的数据加载执行时间,与“经验参数+文件压缩”相比性能提升35 %左右,总体来说,与“经验参数”相比,最终的数据加载性能均提升了约50 % ;与“缺省参数”相比,最终的数据加载性能均提升了约60%。
[0023]综上,本发明与现有的分布式顺序表的数据加载技术相比,数据加载性能提升较为明显,本发明能够减少底层存储文件的冗余信息,减少数据加载时计算资源的消耗,同时减少生成的存储文件的大小,提高了加载性能,经实验表明数据加载时间较常用优化方法平均缩短了 35 %。
【附图说明】
[0024]图1为分布式顺序表的数据文件组织格式图;
[0025]图2为一种分布式顺序表的数据加载方法的流程图;
[0026]图3为本发明