数据集分区及文件生成方法、装置、电子设备和存储介质与流程

文档序号:33542955发布日期:2023-03-22 09:29阅读:54来源:国知局
数据集分区及文件生成方法、装置、电子设备和存储介质与流程

1.本技术涉及计算机信息技术领域,尤其是涉及一种数据集分区及文件生成方法、装置、电子设备和存储介质。


背景技术:

2.随着5g时代的来临,数据量越来越大,数据类型越来越多,对于大数据的实时接入落地工作,一般采取分布式计算框架spark或flink,流式读取数据按数据集落地到hdfs上。因各个数据集的数据量有大有小,平常使用默认分区落地hdfs的方式会导致hdfs小文件过多,影响整个集群性能;虽然可以使用二次处理的方式解决小文件过多的问题,但二次处理会多消耗一次集群资源,针对资源不充足情况适用性不强。针对上述问题,可自定义分区落地输出,但自定义分区容易导致数据倾斜,每个分区资源占用过大,落地流程失败。


技术实现要素:

3.本技术的目的在于提供一种数据集分区及文件生成方法、装置、电子设备和存储介质,大大减少落地小文件数量,且尽量避免数据倾斜导致资源消耗过多或不稳定的情况发生。
4.第一方面,本发明提供一种数据集分区及文件生成方法,方法包括:对预先配置的数据分区信息进行解析,获取组件读取插件;其中,组件读取插件包括连接参数解析接口和数据读取接口;基于组件读取插件读取数据,并对数据进行分区处理;针对分区处理后得到的每个分区数据,基于数据生成周期在分布式文件系统上生成目标文件。
5.在可选的实施方式中,基于组件读取插件读取数据,并对数据进行分区处理,包括:基于组件读取插件读取每个数据集和数据集对应的数据量;遍历数据集地图,确定总数据量,并基于预先配置的分区数进行分区处理,确定分区平均量数据;判断是否存在历史缓存分区信息;如果存在,则基于预先构建的分区策略计算分区结果;其中,分区结果至少包括数据集、起始分区号和数据集分区数;如果不存在,校验是否调用历史缓存分区;如果是,将历史缓存分区确定为分区结果;如果否,则基于预先构建的分区策略计算分区结果。
6.在可选的实施方式中,在基于预先构建的分区策略计算分区结果之后,方法还包括:将分区结果赋值到历史缓存分区。
7.在可选的实施方式中,校验是否调用历史缓存分区,包括:遍历数据集地图,基于数据集从历史分区地图中获取起始分区号和数据集分区数;如果返回值为空,则确定不调用历史缓存分区;基于数据集分区数、分区平均数据量和数据集数据量计算校验结果;如果校验结果满足预设的阈值范围,则确定调用历史缓存分区;如果校验结果不满足预设的阈值范围,则确定不调用历史缓存分区。
8.在可选的实施方式中,基于预先构建的分区策略计算分区结果,包括:对数据集地图中数据量小于分区平均数据量的数据集进行过滤,并对过滤得到的小于分区平均数据量的数据集进行合并处理,得到合并数据集;基于合并数据集、分区平均数据量确定大数据量
数据集对应的分区数和每个分区分配的数据量;对变量进行初始化处理,并对初始化变量进行循环判断,以确定分区结果列表;其中,分区结果列表包括数据集、起始分区号和数据集分区数对应的字段;基于数据集分区及文件生成确定单个数据集分区信息,并将单个数据集分区信息加入至分区结果列表,得到分区结果。
9.在可选的实施方式中,基于数据生成周期在分布式文件系统上生成目标文件,包括:对于分区完成的数据,为每个分区生成filesystemwriter类对象,并基于数据生成周期判断是否新建文件;如果是,基于filesystemwriter类在分布式文件系统上生成目标文件;其中,生成的文件名包括数据集名称、分区号和时间。
10.在可选的实施方式中,方法还包括:如果基于filesystemwriter类在分布式文件系统上生成文件失败,则在本地临时路径生成临时文件;在临时文件写入数据后更新推送至分布式文件系统上,以生成目标文件。
11.第二方面,本发明提供一种数据集分区及文件生成装置,装置包括:解析模块,用于对预先配置的数据分区信息进行解析,获取组件读取插件;其中,组件读取插件包括连接参数解析接口和数据读取接口;分区处理模块,用于基于组件读取插件读取数据,并对数据进行分区处理;文件生成模块,用于针对分区处理后得到的每个分区数据,基于数据生成周期在分布式文件系统上生成目标文件。
12.第三方面,本发明提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的计算机可执行指令,处理器执行计算机可执行指令以实现前述实施方式任一项的数据集分区及文件生成方法。
13.第四方面,本发明提供一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现前述实施方式任一项的数据集分区及文件生成方法。
14.本技术提供的数据集分区及文件生成方法、装置、电子设备和存储介质,该方法首先对预先配置的数据分区信息进行解析,获取组件读取插件;其中,组件读取插件包括连接参数解析接口和数据读取接口;基于组件读取插件读取数据,并对数据进行分区处理;针对分区处理后得到的每个分区数据,基于数据生成周期在分布式文件系统上生成目标文件。通过该方法可以大大减少落地小文件数量,且尽量避免数据倾斜导致资源消耗过多或不稳定的情况发生。
附图说明
15.为了更清楚地说明本技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
16.图1为本技术实施例提供的一种预先配置的整体框架示意图;
17.图2为本技术实施例提供的一种数据集分区及文件生成方法的流程图;
18.图3为本技术实施例提供的一种整体实施方式的流程图;
19.图4为本技术实施例提供的一种分区处理的逻辑示意图;
20.图5为本技术实施例提供的一种分区策略的示意图;
21.图6为本技术实施例提供的一种数据集分区及文件生成装置的结构图;
22.图7为本技术实施例提供的一种电子设备的结构图。
具体实施方式
23.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本技术实施例的组件可以以各种不同的配置来布置和设计。
24.因此,以下对在附图中提供的本技术的实施例的详细描述并非旨在限制要求保护的本技术的范围,而是仅仅表示本技术的选定实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
25.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
26.为便于理解,首先对预先配置的整体框架进行说明,参见图1所示,该框架paas层依赖于spark分布式计算框架和hdfs分布式存储框架,包括:应用配置模块、组件读取插件、数据操作模块和paas组件。
27.其中,应用配置模块,主要用于输入数据连接配置、数据处理分区配置、输出路径及连接配置;组件读取插件,主要用于输入数据读取功能,包括消息中间件读取(kafka、activemq、rabbitmq)、文件系统读取(ftp、hdfs、oss),并可自定义扩展其他数据的读取功能;数据操作模块,主要用于处理读取的数据并分数据集输出到hdfs上,分为数据分区模块和数据输出模块:数据分区模块采用自定义的分区算法-数据集数据量平均值分区算法,基于不同数据集每个批次数据量的不同,判断是否可使用上一批次缓存的分区结果,若不可以按分区平均数据量的方法重新计算得到分区结果,尽量保证大数据量的数据集的分区号不变,小数据量的数据尽量落到和上一次分区相同的分区里面;数据输出模块采用自定义数据输出类,输出类基于spark底层writer类,实现数据的append和close方法,支持数据按自定义文件名或指定字段值分文件输出,输出方式采用append的方式添加数据,而不是每个批次新生成文件的方式,减少文件数据量。
28.应用于上述预先配置的装置框架,本技术实施例提供了一种数据集分区及文件生成方法,参见图2所示,该方法主要包括以下步骤:
29.步骤s202,对预先配置的数据分区信息进行解析,获取组件读取插件;其中,组件读取插件包括连接参数解析接口和数据读取接口。
30.在一种实施方式中,预先配置的数据分区信息可以是由上述配置模块进行配置。在进行配置时,可以通过页面输入对应配置信息,也可使用xml配置文件导入数据。
31.在进行组件读取插件的获取时,连接参数解析接口policyparse用于解析输入连接参数,建立组件连接;数据读取接口dataread主要用于读取输入组件数据读取。
32.步骤s204,基于组件读取插件读取数据,并对数据进行分区处理。
33.为了避免小文件过多,因此可以对读取的数据进行分区处理,每个分区中可以包括一个数据集也可以包括多个数据集合并后的合并数据集,从而无需对小文件进行二次处
理,而是直接通过分区后的结果进行处理。
34.在一可选的实施方式中,在具体实施时,可以基于组件读取插件读取每个数据集和数据集对应的数据量;遍历数据集地图,确定总数据量,并基于预先配置的分区数进行分区处理,确定分区平均量数据;判断是否存在历史缓存分区信息;如果存在,则基于预先构建的分区策略计算分区结果;其中,分区结果至少包括数据集、起始分区号和数据集分区数;如果不存在,校验是否调用历史缓存分区;如果是,将历史缓存分区确定为分区结果;如果否,则基于预先构建的分区策略计算分区结果。
35.在一可选的实施方式中,在基于预先构建的分区策略计算分区结果之后,可以将分区结果赋值到历史缓存分区,从而便于下次进行调用。
36.步骤s206,针对分区处理后得到的每个分区数据,基于数据生成周期在分布式文件系统上生成目标文件。
37.上述数据生成周期可以预先配置,可以根据数据量及资源占用情况进行适应性设置,诸如可以设置为每隔一个小时生成一个文件,则该数据生成周期为1小时。分布式文件系统可以为hdfs(hadoop distributed file system)系统。
38.本技术实施例提供的数据集分区及文件生成方法,通过在上述装置框架上执行该方法,可以减少小文件输出,避免影响集群性能,同时不用增加运行资源。
39.以下对本技术实施例提供的数据集分区及文件生成方法的实施方式进行详细说明。
40.首先,在对预先配置的数据分区信息进行解析之前,配置模块的配置个数可以参见如下:
[0041][0042]
其中,inputs代表输入,支持多个input;type为输入组件类型;partition代表分区环节;num值为分区数;hdfs代表输出配置;param为连接信息对应的《key,value》,配置hdfs连接信息和输出路径。
[0043]
图3示出了一种整体实施方式,包括以下步骤:
[0044]
步骤s31,加载配置模块的输入处理输出配置信息。
[0045]
步骤s32,解析输入配置信息,根据读取组件类型,选择读取插件。
[0046]
步骤s33,读取插件解析组件连接信息,建立连接。
[0047]
步骤s34,基于sparkstreaming框架和读取组件连接,调用组件数据读取接口流式读取数据。
[0048]
步骤s35,读取微批数据处理。
[0049]
步骤s36,对读取数据按照数据集数据量平均分区算法分区。
[0050]
步骤s37,调用数据输出模块write类append输出数据。
[0051]
在一种具体实施方式中,参见图4所示,上述步骤s204在进行分区处理的处理逻辑可以包括以下步骤1.1)至步骤1.6):
[0052]
步骤1.1),读取数据,统计所有数据集的数据量,输出datasetrecordsmap;其中,通过键值对的方式,key为数据集dataset,value为数据集对应的数据量;
[0053]
步骤1.2),遍历datasetrecordsmap,统计总数据量totalrecords,除以配置的分区数paititionnum,计算得到分区平均数据量recordsperpart;
[0054]
步骤1.3),datasetrecordsmap按value数据量从小到大排序;
[0055]
步骤1.4)判断是否存在历缓存分区结果map:
[0056]
若不存在,则调用分区计算方法(也即上述预先构建的分区策略),计算结果赋给历史缓存分区;
[0057]
若存在,则判断是否可使用历史缓存分区,若符合,直接输出历史缓存分区;若不符合,调用分区计算方法(也即上述预先构建的分区策略),计算结果赋给历史缓存分区。输出结果为partitionmap,包含数据集dataset、起始分区号start、数据集总共分区数partnum;
[0058]
步骤1.5),读取每条数据,获取数据集dataset值,计算出起始分区号start、数据集分区数partnum。
[0059]
步骤1.6),使用自增变量i,计算数据分区号:start+(maxvalue&i)%partnum。
[0060]
在可选的实施方式中,校验是否调用历史缓存分区,可以包括以下步骤2.1)至步骤2.5):
[0061]
步骤2.1),遍历数据集地图,基于数据集从历史分区地图中获取起始分区号和数据集分区数;
[0062]
步骤2.2),如果返回值为空,则确定不调用历史缓存分区;
[0063]
步骤2.3),基于数据集分区数、分区平均数据量和数据集数据量计算校验结果;
[0064]
步骤2.4),如果校验结果满足预设的阈值范围,则确定调用历史缓存分区;
[0065]
步骤2.5),如果校验结果不满足预设的阈值范围,则确定不调用历史缓存分区。
[0066]
在一种示例中,参见图5所示,可以首先输入数据集对应数据量datasetrecordsmap、分区平均数据量recordsperpart、历史分区数据partitionmap,然后进行数据,处理逻辑可以参见以下步骤a至步骤e:
[0067]
a)遍历datasetrecordsmap,针对每个数据集dataset和数据集数据量records做判断;
[0068]
b)根据数据集从历史分区map中获取起始分区号start、数据集分区数partnum,若获取值为空,直接返回检验不通过false;
[0069]
c)计算res=数据集分区数partnum*分区平均数据量recordsperpart/数据集数据量records;
[0070]
d)判断res》0.8&&res《1.2;若判断不通过,直接返回检验不通过false,判断通过,继续遍历datasetrecordsmap;
[0071]
e)遍历datasetrecordsmap结束,返回检验通过true。
[0072]
进一步,针对上述预先构建的分区策略,在基于预先构建的分区策略计算分区结果,可以包括以下步骤3.1)至步骤3.4):
[0073]
步骤3.1),对数据集地图中数据量小于分区平均数据量的数据集进行过滤,并对过滤得到的小于分区平均数据量的数据集进行合并处理,得到合并数据集;
[0074]
步骤3.2),基于合并数据集、分区平均数据量确定大数据量数据集对应的分区数和每个分区分配的数据量;
[0075]
步骤3.3)对变量进行初始化处理,并对初始化变量进行循环判断,以确定分区结果列表;其中,分区结果列表包括数据集、起始分区号和数据集分区数对应的字段;
[0076]
步骤3.4),基于数据集分区及文件生成确定单个数据集分区信息,并将单个数据集分区信息加入至分区结果列表,得到分区结果。
[0077]
在一种示例中,该分区策略可以参见以下a至j:
[0078]
a)过滤datasetrecordsmap,数据量小于recordsperpart的所有数据集数据量求和,得到smalldatasetrecords;
[0079]
b)大数据量数据集使用的分区数hugepartitionnum=partitionnum-(smalldatasetrecords+recordsperpart-1)/recordsperpart;
[0080]
c)大数据量数据集每个分区应该分配的数据量recordsperhugepart=(totalrecords-smalldatasetrecords)/hugepartitionnum;
[0081]
d)初始化变量partno=partitionnum,factorinterval=1.0/partitionnum,factor=1+factorinterval*0.8;
[0082]
e)循环判断partno》=partitionnum,当不满足条件时,输出分区结果列表list:数据集dataset、起始分区号start、数据集分区数partnum,流程结束。
[0083]
f)满足上一步条件时,初始化变量num=0,factor=factor-factorinterval,smallnum=0.0;
[0084]
g)遍历datasetrecordsmap是否结束,遍历结束,流程跳转到步骤e;未结束时,对于每个数据集dataset和数据集数据量datasetrecords,赋值partno=num;
[0085]
h)判断datasetrecords》=recordsperpart,不满足条件时,跳转到步骤i;满足时,跳转到步骤j;
[0086]
i)计算division=datasetrecords*factor/recordsperpart,smallnum+=division,判断smallnum》0.95;满足条件,设值smallnum=0.0,num+=1,partno=num,单个数据集分区信息(dataset,partno,1)加入分区列表list;不满足条件时,单个数据集分区信息(dataset,partno,1)加入分区列表list;流程跳转到步骤g;
[0087]
j)计算size=round(datasetrecords*factor/recordsperhugepart),判断size》=1;满足条件,设值num+=size,单个数据集分区信息(dataset,partno,size)加入分区列表list;不满足条件时,单个数据集分区信息(dataset,partno,1)加入分区列表list。进而流程跳转到步骤g。
[0088]
在可选的实施方式中,基于数据生成周期在分布式文件系统上生成目标文件,包括:
[0089]
对于分区完成的数据,为每个分区生成filesystemwriter类对象,并基于数据生成周期判断是否新建文件;
[0090]
如果是,基于filesystemwriter类在分布式文件系统上生成目标文件;其中,生成的文件名包括数据集名称、分区号和时间。
[0091]
进一步,如果基于filesystemwriter类在分布式文件系统上生成文件失败,则在本地临时路径生成临时文件,进而在临时文件写入数据后更新推送至分布式文件系统上,
以生成目标文件。
[0092]
为便于理解,提供一种示例,对于分区完成的数据,每个分区生成filesystemwriter类对象,判断是否需要新建文件(判断方式:周期时间,例如每隔1小时生成一个文件),满足周期条件时生成文件,生成文件名为数据集名称-分区号-时间,不满足条件时打开当前时间对应的文件,对于每条数据调用append方式写入文件,分区数据处理结束时,调用close方法关闭文件。filesystemwriter类先在hdfs上生成文件,若失败,则在本地临时路径生成临时文件,写入数据结束后再flush到hdfs上,保证文件生成稳定性。
[0093]
基于上述方法实施例,本技术实施例还提供了一种数据集分区及文件生成装置,参见图6所示,该装置主要包括以下部分:
[0094]
解析模块62,用于对预先配置的数据分区信息进行解析,获取组件读取插件;其中,组件读取插件包括连接参数解析接口和数据读取接口;
[0095]
分区处理模块64,用于基于组件读取插件读取数据,并对数据进行分区处理;
[0096]
文件生成模块66,用于针对分区处理后得到的每个分区数据,基于数据生成周期在分布式文件系统上生成目标文件。
[0097]
本技术实施例提供的数据集分区及文件生成装置,通过在上述装置框架上执行该方法,可以减少小文件输出,避免影响集群性能,同时不用增加运行资源。
[0098]
在一些实施方式中,分区处理模块64,用于:
[0099]
基于组件读取插件读取每个数据集和数据集对应的数据量;遍历数据集地图,确定总数据量,并基于预先配置的分区数进行分区处理,确定分区平均量数据;判断是否存在历史缓存分区信息;如果存在,则基于预先构建的分区策略计算分区结果;其中,分区结果至少包括数据集、起始分区号和数据集分区数;如果不存在,校验是否调用历史缓存分区;如果是,将历史缓存分区确定为分区结果;如果否,则基于预先构建的分区策略计算分区结果。
[0100]
在一些实施方式中,在基于预先构建的分区策略计算分区结果之后,上述装置还包括,赋值模块,用于:
[0101]
将分区结果赋值到历史缓存分区。
[0102]
在一些实施方式中,分区处理模块64,用于:
[0103]
遍历数据集地图,基于数据集从历史分区地图中获取起始分区号和数据集分区数;如果返回值为空,则确定不调用历史缓存分区;基于数据集分区数、分区平均数据量和数据集数据量计算校验结果;如果校验结果满足预设的阈值范围,则确定调用历史缓存分区;如果校验结果不满足预设的阈值范围,则确定不调用历史缓存分区。
[0104]
在一些实施方式中,分区处理模块64,还用于:
[0105]
对数据集地图中数据量小于分区平均数据量的数据集进行过滤,并对过滤得到的小于分区平均数据量的数据集进行合并处理,得到合并数据集;基于合并数据集、分区平均数据量确定大数据量数据集对应的分区数和每个分区分配的数据量;对变量进行初始化处理,并对初始化变量进行循环判断,以确定分区结果列表;其中,分区结果列表包括数据集、起始分区号和数据集分区数对应的字段;基于数据集分区及文件生成确定单个数据集分区信息,并将单个数据集分区信息加入至分区结果列表,得到分区结果。
[0106]
在一些实施方式中,文件生成模块66,还用于:
[0107]
对于分区完成的数据,为每个分区生成filesystemwriter类对象,并基于数据生成周期判断是否新建文件;如果是,基于filesystemwriter类在分布式文件系统上生成目标文件;其中,生成的文件名包括数据集名称、分区号和时间。
[0108]
在一些实施方式中,上述装置还包括:本地生成及推送模块,用于:
[0109]
如果基于filesystemwriter类在分布式文件系统上生成文件失败,则在本地临时路径生成临时文件;在临时文件写入数据后更新推送至分布式文件系统上,以生成目标文件。
[0110]
本技术实施例提供的数据集分区及文件生成装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,数据集分区及文件生成装置的实施例部分未提及之处,可参考前述数据集分区及文件生成方法实施例中相应内容。
[0111]
本技术实施例还提供了一种电子设备,如图7所示,为该电子设备的结构示意图,其中,该电子设备100包括处理器71和存储器70,该存储器70存储有能够被该处理器71执行的计算机可执行指令,该处理器71执行该计算机可执行指令以实现上述任一项数据集分区及文件生成方法。
[0112]
在图7示出的实施方式中,该电子设备还包括总线72和通信接口73,其中,处理器71、通信接口73和存储器70通过总线72连接。
[0113]
其中,存储器70可能包含高速随机存取存储器(ram,random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口73(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线72可以是isa(industry standard architecture,工业标准体系结构)总线、pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。所述总线72可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0114]
处理器71可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器71中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器71可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器71读取存储器中的信息,结合其硬件完成前述实施例的数据集分区及文件生成方法的步骤。
[0115]
本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,该计算机可执行指令
促使处理器实现上述数据集分区及文件生成方法,具体实现可参见前述方法实施例,在此不再赘述。
[0116]
本技术实施例所提供的数据集分区及文件生成方法、装置、电子设备和存储介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
[0117]
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本技术的范围。
[0118]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0119]
在本技术的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本技术和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本技术的限制。此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0120]
此外,术语“水平”、“竖直”、“悬垂”等术语并不表示要求部件绝对水平或悬垂,而是可以稍微倾斜。如“水平”仅仅是指其方向相对“竖直”而言更加水平,并不是表示该结构一定要完全水平,而是可以稍微倾斜。
[0121]
在本技术的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本技术中的具体含义。
[0122]
最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1