基于Hadoop的海量空间数据索引更新系统及方法转让专利

申请号 : CN201210255699.7

文献号 : CN102799679B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 冯钧韦冕唐志贤徐黎明顾忠国朱忠华

申请人 : 河海大学

摘要 :

本发明公开了基于Hadoop的海量空间数据索引更新系统及方法,属于信息技术处理领域。所述系统包括:数据更新模块、索引操作缓存模块、索引文件更新模块、索引文件创建模块、索引文件读取模块。所述方法中:数据更新模块用于获取空间数据的更新情况,并将相应的索引更新信息写入索引操作缓存模块;索引文件创建模块用于按照索引节点为单位在磁盘上创建物理文件;索引更新模块再利用索引读取模块读取的节点信息对比索引缓存的节点信息,将满足条件的索引节点信息写入新索引文件。本发明解决了由于Hadoop平台仅支持对文件的追加写操作而造成对更新频繁的动态空间数据支持不足的问题,实时可靠地更新Hadoop平台中空间索引信息。

权利要求 :

1.基于Hadoop的海量空间数据索引更新系统,其特征在于包括:数据更新模块、索引操作缓存模块、索引文件更新模块、索引文件创建模块、索引文件读取模块;其中:所述数据更新模块的输入端接收空间数据更新信息,输出端与索引操作缓存模块的输入端连接;

所述索引文件更新模块的第一输入端与所述索引文件读取模块的输出端连接,第二输入端与索引操作缓存模块的输出端连接,输出端与所述索引文件创建模块的输入端连接;所述索引文件创建模块的输出端输出新建的索引文件;

所述数据更新模块用于获取空间数据的更新信息,并将与空间数据更新信息相应的索引更新信息写入索引操作缓存模块;

所述索引操作缓存模块用于缓存与空间数据更新信息相应的索引更新信息;

所述索引文件读取模块用于读取原索引文件;

所述索引文件更新模块用于获取原索引节点,再与索引操作缓存模块中的索引更新信息对比,得到待创建新索引文件的内部节点信息、叶节点信息;

所述索引文件创建模块用于创建新索引文件。

2.基于Hadoop的海量空间数据索引更新方法,其特征在于包括如下步骤:步骤A,数据更新模块获取空间数据的更新信息;

步骤B,索引操作缓存模块将与空间数据更新信息相应的索引更新信息缓存于内存中,并判断索引操作缓存容量;

步骤C,重复步骤A至步骤B,直至索引操作缓存容量已满,进入步骤D;

步骤D,索引文件创建模块创建新索引文件,所述新索引文件仅包含头文件信息;

步骤E,创建新索引节点的根节点:索引文件更新模块将原始索引文件中的根节点信息写入步骤D所创建的新索引文件中;

步骤F,创建新索引文件的内部节点,具体包含如下步骤:步骤F-1,索引文件读取模块逐个读取原索引文件内部节点:若索引操作缓存模块存储有所述原索引文件内部节点的ID,将与索引操作缓存模块中存储的ID相对应的内部节点信息写入所述新索引文件;

否则,将从原索引文件中读取的内部节点信息写入所述新索引文件;

步骤F-2,遍历索引操作缓存模块中所有新增加的内部节点,依次写入新增加的内部节点至新索引文件中;

步骤G,创建新索引文件的叶节点,具体包含如下步骤:步骤G-1,索引文件更新模块逐个读取原索引文件叶节点:若索引操作缓存模块存储有所述原索引文件叶节点的ID,将与索引操作缓存模块中存储的ID相对应的叶节点信息写入所述新索引文件;

否则,将从原索引文件中读取的叶节点信息写入所述新索引文件;

步骤G-2,遍历索引操作缓存模块中所有新增加的叶节点,依次写入新增加的叶节点至新索引文件中;

步骤H,索引文件更新模块用新索引文件替换原索引文件,并删除原索引文件。

3.如权利要求2所述基于Hadoop的海量空间数据索引更新方法,其特征在于所述步骤B中,索引操作缓存模块将与空间数据更新信息相应的索引更新信息缓存于内存的具体实施如下:步骤B-1,判断更新的空间数据对应的索引节点更新类型:若为叶节点分裂,则进入步骤B-2:若为叶节点合并,则进入步骤B-3;

步骤B-2,更新待分裂叶节点L0对应的索引信息,具体包含如下步骤:步骤B-2-1,新增4个叶节点的磁盘页,依次给4个叶节点磁盘页编号,删除分裂叶节点L0的磁盘页;

步骤B-2-2,新建一个内部节点I0的磁盘页,并将内部节点I0中4个子节点的指针指向步骤B-2-1新增的4个叶节点;

步骤B-2-3,将分裂叶节点L0父节点中指向分裂叶节点L0的指针,指向步骤B-2-2新建的内部节点I0;

步骤B-2-4,将分裂后得到的各节点的信息写入索引操作缓存模块;

步骤B-3,更新待合并叶节点对应的索引信息,具体包含如下步骤:步骤B-3-1,新建一个叶节点磁盘页,所述磁盘页包含所述待合并叶节点的空间点;

步骤B-3-2,删除所述待合并叶节点的磁盘页,删除所述待合并叶节点的父节点(NP)的磁盘页;

步骤B-3-3,将指向待合并叶节点的父节点(NP)的指针,指向步骤B-3-1中新建的叶节点;

步骤B-3-4,将步骤B-3-3中所述的叶节点信息写入索引操作缓存模块。

说明书 :

基于Hadoop的海量空间数据索引更新系统及方法

技术领域

[0001] 本发明涉及基于Hadoop的海量空间数据索引更新系统及方法,属于信息技术处理领域。

背景技术

[0002] 随着信息技术的飞速发展,地理信息系统(GIS)、计算机辅助设计与制造(CAD/CAM)、数字化城市、定位服务等领域等处理的空间数据急剧增加;鉴于海量空间数据及其查询处理的复杂性,传统的集中式数据存储与处理方法已经无法满足这些领域应用程序的需求。云计算技术是近年来计算机领域出现的具有很好可扩展性的处理大规模计算的新技术;其建立在大量廉价硬件之上的分布式文件系统,能提供高吞吐量的数据访问;其MapReduce并行计算框架采用“分而治之”的思想,将大量的数据操作分散给各个计算节点并行处理,达到提高整个云计算平台处理能力的目的。云计算所具备的高伸缩性、高扩展性、高容错性和强大并行处理能力使其成为海量数据高效存储与处理的理想方案。作为开源的云计算平台,Hadoop以其扩容能力强、成本低廉、效率高、高可靠性、免费及良好的可移植性等优点,迅速成为当前热门的分布式计算框架和大规模数据存储解决方案。
[0003] 空间数据索引是空间数据查询与处理的基础,其性能是影响数据服务质量的关键因素,如何高效地索引海量空间数据,一直是数据库领域的研究热点。但是,Hadoop的分布式文件系统(HDFS)仅支持对文件的追加写操作,对于更新频繁的动态数据,传统的随机读写磁盘更新索引的方式不再适用于HDFS,必须针对HDFS的特点进行索引更新策略的设计。

发明内容

[0004] 本发明所要解决的技术问题是针对HDFS不支持随机写文件,提供了基于Hadoop的海量空间数据索引更新系统及方法。
[0005] 本发明为实现上述发明目的采用如下技术方案:
[0006] 基于Hadoop的海量空间数据索引更新系统,包括:数据更新模块、索引操作缓存模块、索引文件更新模块、索引文件创建模块、索引文件读取模块;其中:所述数据更新模块的输入端接收空间数据更新信息,输出端与索引操作缓存模块的输入端连接;所述索引文件更新模块的第一输入端与所述索引文件读取模块的输出端连接,第二输入端与索引操作缓存模块的输出端连接,输出端与所述索引文件创建模块的输入端连接;所述索引文件创建模块的输出端输出新建的索引文件;
[0007] 所述数据更新模块用于获取空间数据的更新信息,并将与空间数据更新信息相应的索引更新信息写入索引操作缓存模块;
[0008] 所述索引操作缓存模块用于缓存与空间数据更新信息相应的索引更新信息;
[0009] 所述索引文件读取模块用于读取原索引文件;
[0010] 所述索引文件更新模块用于获取原索引节点,再与索引操作缓存模块中的索引更新信息对比,得到待创建新索引文件的内部节点信息、叶节点信息;
[0011] 所述索引文件创建模块用于创建新索引文件。
[0012] 基于Hadoop的海量空间数据索引更新方法,包括如下步骤:
[0013] 步骤A,数据更新模块获取空间数据的更新信息;
[0014] 步骤B,索引操作缓存模块将与空间数据更新信息相应的索引更新信息缓存于内存中,并判断索引操作缓存容量;
[0015] 步骤C,重复步骤A至步骤B,直至索引操作缓存容量已满,进入步骤D;
[0016] 步骤D,索引文件创建模块创建新索引文件,所述新索引文件仅包含头文件信息;
[0017] 步骤E,创建新索引节点的根节点:索引文件更新模块将原始索引文件中的根节点信息写入步骤D所创建的新索引文件中;
[0018] 步骤F,创建新索引文件的内部节点,具体包含如下步骤:
[0019] 步骤F-1,索引文件读取模块逐个读取原索引文件内部节点:
[0020] 若索引操作缓存模块存储有所述原索引文件内部节点的ID,将与索引操作缓存模块中存储的ID相对应的内部节点信息写入所述新索引文件;
[0021] 否则,将从原索引文件中读取的内部节点信息写入所述新索引文件;
[0022] 步骤F-2,遍历索引操作缓存模块中所有新增加的内部节点,依次写入新增加的内部节点至新索引文件中;
[0023] 步骤G,创建新索引文件的叶节点,具体包含如下步骤:
[0024] 步骤G-1,索引文件更新模块逐个读取原索引文件叶节点:
[0025] 若索引操作缓存模块存储有所述原索引文件叶节点的ID,将与索引操作缓存模块中存储的ID相对应的叶节点信息写入所述新索引文件;
[0026] 否则,将从原索引文件中读取的叶节点信息写入所述新索引文件;
[0027] 步骤G-2,遍历索引操作缓存模块中所有新增加的叶节点,依次写入新增加的叶节点至新索引文件中;
[0028] 步骤H,索引文件更新模块用新索引文件替换原索引文件,并删除原索引文件。
[0029] 所述基于Hadoop的海量空间数据索引更新方法的步骤B中,索引操作缓存模块将与空间数据更新信息相应的索引更新信息缓存于内存的具体实施如下:
[0030] 步骤B-1,判断更新的空间数据对应的索引节点更新类型:若为叶节点分裂,则进入步骤B-2:若为叶节点合并,则进入步骤B-3;
[0031] 步骤B-2,更新待分裂叶节点L0对应的索引信息,具体包含如下步骤:
[0032] 步骤B-2-1,新增4个叶节点的磁盘页,依次给4个叶节点磁盘页编号,删除分裂叶节点L0的磁盘页;
[0033] 步骤B-2-2,新建一个内部节点I0的磁盘页,并将内部节点I0中4个子节点的指针指向步骤B-2-1新增的4个叶节点;
[0034] 步骤B-2-3,将分裂叶节点L0父节点中指向分裂叶节点L0的指针,指向步骤B-2-2新建的内部节点I0;
[0035] 步骤B-2-4,将分裂后得到的各节点的信息写入索引操作缓存模块;
[0036] 步骤B-3,更新待合并叶节点对应的索引信息,具体包含如下步骤:
[0037] 步骤B-3-1,新建一个叶节点磁盘页,所述磁盘页包含所述待合并叶节点的空间点;
[0038] 步骤B-3-2,删除所述待合并叶节点的磁盘页,删除所述待合并叶节点的父节点(NP)的磁盘页;
[0039] 步骤B-3-3,将指向待合并叶节点的父节点(NP)的指针,指向步骤B-3-1中新建的叶节点;
[0040] 步骤B-3-4,将步骤B-3-3中所述的叶节点信息写入索引操作缓存模块。
[0041] 本发明采用上述技术方案,具有以下有益效果:解决了Hadoop分布式文件系统中不支持随机写文件的问题,提供了一种高效的更新索引文件的方法,保证了Hadoop平台中空间索引更新的实时性与可靠性。

附图说明

[0042] 图1为基于Hadoop海量空间数据索引更新系统的结构图。
[0043] 图2为基于Hadoop海量空间数据索引更新方法流程图。
[0044] 图3为基于Hadoop海量空间数据索引的逻辑结构图。
[0045] 图4为Hadoop平台中的四叉树索引更新系统与其他应用的交互示意图。
[0046] 图5为基于Hadoop的海量空间数据四叉树索引文件的物理格式。
[0047] 图6为基于Hadoop的海量空间数据四叉树索引文件的文件头格式。
[0048] 图7为基于Hadoop的海量空间数据四叉树索引文件的内部节点格式。
[0049] 图8为基于Hadoop的海量空间数据四叉树索引文件的叶节点格式。
[0050] 图9为叶节点分裂引起索引文件变化的示意图。
[0051] 图10为叶节点合并引起索引文件变化的示意图。

具体实施方式

[0052] 下面结合附图对发明的技术方案进行详细说明:
[0053] 如图1所示,本发明所涉及基于Hadoop的海量空间数据索引更新系统,包括:数据更新模块、索引操作缓存模块、索引文件更新模块、索引文件创建模块、索引文件读取模块。数据更新模块的输入端接收空间数据更新信息,输出端与索引操作缓存模块的输入端连接。索引文件更新模块的第一输入端与所述索引文件读取文件的输出端连接,第二输入端与索引操作缓存模块的输出端连接,输出端与所述索引文件创建模块的输入端连接。索引文件创建模块的输出端输出新建的索引文件。
[0054] 数据更新模块用于获取空间数据的更新信息,并将与空间数据更新信息相应的索引更新信息写入索引操作缓存模块。
[0055] 索引操作缓存模块用于缓存与空间数据更新信息相应的索引更新信息。索引操作缓存由5个类组成,用来表示3种更新操作。5个类如下:
[0056] AddLeaf:增加叶节点的操作;
[0057] DelLeaf:删除叶节点的操作;
[0058] AddInter:增加内部节点的操作;
[0059] DelInter:删除内部节点的操作;
[0060] ModLeaf:更新叶节点中空间点信息;
[0061] 每个类都包含一个HashMap类成员变量,用于保存索引节点增删操作,key为原节点ID,新建节点的原节点ID为0,value为更改后的索引节点对象(叶节点分裂成为内部节点、内部节点合并成为叶节点)。则索引的更新操作可以用这五个类的一系列操作表示:
[0062] 插入空间点引起节点分裂:
[0063] DelLeaf.add(原叶节点);AddInter.add(内部节点);4次AddLeaf.add(叶节点);
[0064] 删除空间点引起节点合并:
[0065] 4次DelLeaf.add(叶节点);DelInter.add(原内部节点);AddInter.add(原内部节点);
[0066] 插入或删除空间点节点未分裂、合并:
[0067] ModLeaf.add(更改的叶节点);
[0068] 所有缓存类的容量相同,只要有一个缓存容量满了,则开始更新索引操作;
[0069] 索引文件读取模块用于读取原索引文件。
[0070] 索引文件更新模块用于获取原索引节点,再与索引操作缓存模块中的索引更新信息对比,得到待创建新索引文件的内部节点信息、叶节点信息。
[0071] 索引文件创建模块用于以索引节点为单位在磁盘上创建物理文件。新索引文件格式同原来的索引文件格式,包括文件头和节点信息部分。具体的索引文件格式如图4和图5所示。图4描述的是索引文件整体结构:文件头、内部节点和叶节点。图5描述的是文件头信息:包括索引版本号、树深度、桶大小、内部节点大小和内部节点数、叶节点大小和叶节点数。新创建的索引文件仅包括索引文件名和索引的版本号,其中版本号要大于原索引文件的版本号;
[0072] 上面介绍了空间数据更新所引起的索引更新的情况,下面介绍索引更新的具体流程,如图2所示,索引更新方法的步骤如下:
[0073] 步骤A,数据更新模块获取空间数据的更新信息。
[0074] 步骤B,索引操作缓存模块将与空间数据更新信息相应的索引更新信息缓存于内存中,并判断索引操作缓存容量;索引操作缓存模块将与空间数据更新信息相应的索引更新信息缓存于内存的具体实施如下:
[0075] 步骤B-1,判断更新的空间数据对应的索引节点更新类型:若为叶节点分裂,则进入步骤B-2:若为叶节点合并,则进入步骤B-3;
[0076] 步骤B-2,更新待分裂叶节点L0对应的索引信息,具体包含如下步骤:
[0077] 步骤B-2-1,新增4个叶节点的磁盘页,依次给4个叶节点磁盘页编号,删除分裂叶节点L0的磁盘页;
[0078] 步骤B-2-2,新建一个内部节点I0的磁盘页,并将内部节点I0中4个子节点的指针指向步骤B-2-1新增的4个叶节点;
[0079] 步骤B-2-3,将分裂叶节点L0父节点中指向分裂叶节点L0的指针,指向步骤B-2-2新建的内部节点I0;
[0080] 步骤B-2-4,将分裂后得到的各节点的信息写入索引操作缓存模块;
[0081] 步骤B-3,更新待合并叶节点对应的索引信息,具体包含如下步骤:
[0082] 步骤B-3-1,新建一个叶节点磁盘页,所述磁盘页包含所述待合并叶节点的空间点;
[0083] 步骤B-3-2,删除所述待合并叶节点的磁盘页,删除所述待合并叶节点的父节点(NP)的磁盘页;
[0084] 步骤B-3-3,将NP父节点中指向NP的指针,指向步骤B-3-1中新建的叶节点;
[0085] 步骤B-3-4,将步骤B-3-3中所述的叶节点信息写入索引操作缓存模块。
[0086] 步骤C,重复步骤A至步骤B,直至索引操作缓存容量已满,进入步骤D。
[0087] 步骤D,索引文件创建模块创建新索引文件,所述新索引文件仅包含头文件信息;新索引文件的文件头信息主要用于记录更新内部节点信息和叶节点信息,文件头信息格式如图6所示;
[0088] 步骤E,创建新索引节点的根节点:索引文件更新模块将原始索引文件中的根节点信息写入步骤D所创建的新索引文件中;
[0089] 步骤F,创建新索引文件的内部节点(内部节点信息格式如图7所示),具体包含如下步骤:
[0090] 步骤F-1,索引文件更新模块逐个读取原索引文件内部节点:
[0091] 若索引操作缓存模块存储有所述元索引文件内部节点的ID,将与索引操作缓存模块中存储的ID相对应的内部节点信息写入所述新索引文件;
[0092] 否则,将从原索引文件中读取的内部节点信息写入所述新索引文件;
[0093] 步骤F-2,遍历索引操作缓存模块中所有新增加的内部节点,依次写入新增加的内部节点至新索引文件中;
[0094] 步骤G,创建新索引文件的叶节点(叶节点信息格式如图8所示),具体包含如下步骤:
[0095] 步骤G-1,索引文件更新模块逐个读取原索引文件叶节点:
[0096] 若索引操作缓存模块存储有所述原索引文件叶节点的ID,将与索引操作缓存模块中存储的ID相对应的叶节点信息写入所述新索引文件;
[0097] 否则,将从原索引文件中读取的叶节点信息写入所述新索引文件;
[0098] 步骤G-2,遍历索引操作缓存模块中所有新增加的叶节点,依次写入新增加的叶节点至新索引文件中;
[0099] 步骤H,索引文件更新模块利用Hadoop系统中的系统应用程序接口替换原索引文件,并删除原索引文件。
[0100] 如图3所示,本发明所述索引文件在逻辑上为四叉树结构,包含根节点、内部节点和叶节点组成,每个内部节点包括四个子节点分别对应东北(NE)、西北(NW)、西南(SW)、东南(SE)四个空间象限;在物理上由文件头、根节点、内部节点和叶节点等磁盘页组成。空间数据指欧氏空间中的点数据。空间数据更新情况包含空间数据的插入引起索引叶节点分裂和空间数据的删除引起的叶节点合并等两种情况,叶节点合并是指四个叶节点节点合并成为一个叶节点。
[0101] 如图4所示,索引更新系统与整个索引系统的其他程序交互过程中,当空间点发生变化引起索引节点的增删改操作时,并不直接更新至HDFS文件系统中,而是利用“操作缓存”记录下相应的更新操作,从而延迟对HDFS写操作。查询模块不直接读取索引文件而是读取“查询缓存”,为了保证查询准确性,索引节点相应的更新操作需要同步到“查询缓存”。当“操作缓存”中的节点数目达到一定阈值后,将执行“拷贝写”操作生成更新后的索引文件;“拷贝写”将对比原始索引文件和“节点操作缓存”来完成新索引文件的生成,若原始索引文件与“操作缓存”不一致则将“操作缓存”中的数据写入新的索引文件;具体操作是:1)增加节点,则在索引文件内部节点或者叶节点后追加写入新节点信息;2)更新节点,利用“操作缓存”的数据替换原始索引;3)删除节点,写新索引文件时跳过该节点所在磁盘页,将后面的节点ID前移。当“拷贝写”操作完成后,将利用HDFS的API用新的索引文件替换旧索引文件,然后删除旧的索引文件。“拷贝写”机制实现了索引更新的透明性,并保证查询结果的一致性。
[0102] 当用户开始增删空间点目标时,引起空间索引的变化,系统中将三种索引更新操作:更改、增加和删除保存在更新操作缓存中。其中增加和删除空间点会引起叶节点的分裂和合并,下面结合附图说明下这两种情况四叉树其索引文件在磁盘上的变化。
[0103] 如图5所示,索引文件固定大小为128B的内部节点存储在一起,其ID为从1至NI顺序编号,NI为内部节点数;后面为若干叶节点,其ID从-1至-M顺序编号,M为叶节点数目。当数据的插入引起叶节点L0分裂后,索引的文件更新流程:
[0104] 1)新增4个叶节点(-M-1,-M-2,-M-3,-M-4)的磁盘页,ID从叶节点数目M顺序编号
[0105] 2)删除L0的磁盘页
[0106] 3)新 建 一 个 内 部 节 点I0磁 盘 页,并 将 4个 子 节 点 指 针 指 向(-M-1,-M-2,-M-3,-M-4)
[0107] 4)更新L0父节点NP指向L0的指针,将其指向I0。
[0108] 如 图9所 示,当ID为 N叶 节 点 发 生 分 裂,产 生4 个 新 的 子 节 点:(-M-1,-M-2,-M-3,-M-4),同时原来的叶节点(L0)变为内部节点,内部节点是集中存储的,因此要先删除原来的叶节点,然后新建一个内部节点I0,并加入四个指针指向新的4个叶节点;而内部节点NP(叶节点L0的父节点)指向的叶节点已经变成内部节点I0,需要同步更新。
[0109] 空间数据点的删除会导致叶节点合并,索引文件物理结构同样要发生变化。如图10所示,当删除空间节点后造成内部节点I0的叶节点(-M+3,-M+2,-M+1,-M)合并,索引文件更新操作如下。
[0110] 1)新建一个叶节点(-M-1)磁盘页,包含待删除的4个叶节点里的空间目标。
[0111] 2)删除(-M+3,-M+2,-M+1,-M)。
[0112] 3)删除I0。
[0113] 4)更新节点I0的父节点的子节点指针,使其指向(-M-1)所对应的磁盘页。
[0114] 如图10所示,当内部节点I0的4个叶节点(-M+3,-M+2,-M+1,-M)合并后,I0变为叶节点,由于内部节点和叶节点是分别存储在磁盘上,因此,先删除原来的内部节点,然后新建一个叶节点-M-1,新的叶节点里包含了原来4个子节点所有的空间点对象,原来的4个叶节点也删除。同时,I0的父节点(NP)指向子节点I0的指针改为叶节点-M-1。
[0115] 写内部节点的过程见算法1,流程如下:依次读取原索引文件中的每个内部节点,如果被删除,则跳过继续处理下一个节点;否则,更新子节点和父节点的指针信息,并写入新的内部节点至新索引文件中。读取完原索引文件内部节点后,遍历缓存对象addInter,增加新的内部节点。这些内部节点是由分裂的叶节点转变而成。
[0116]
[0117]
[0118] 如算法2所示,为向索引文件写入叶节点信息的流程,首先遍历原索引文件中的叶节点,如果被删除则继续处理下一个叶节点,否则更新节点信息和父节点ID,写入新的索引中。接着遍历缓存addLeaf对象,里面包含由于分裂或者合并产生的新叶节点,更新父节点ID后顺序写入新的索引文件中。
[0119]
[0120] 综上所述,本发明所涉及的机遇Hadoop的海量空间数据索引更新系统及方法,解决了Hadoop分布式文件系统中不支持随机写文件的问题,提供了一种高效的更新索引文件的方法,保证了Hadoop平台中空间索引更新的实时性与可靠性。本发明实施例中所涉及的编程仅为本发明的一个实施例,凡是符合本发明发明宗旨的具体实施例均在本发明的保护范围之内。