面向水利数据整合与共享的索引方法
【专利摘要】本发明提供一种面向水利数据整合与共享的索引方法,包括:S1:根据时间粒度对保存的数据进行划分,定义不同粒度层次,并对时间粒度映射时间量化值,并且为数据进行对象分类,定义对象分类编码,其中:所述保存的数据包括按时间采集的水利数据和按地区采集的水利数据;S2:对分类后的数据按照索引机制建立实时索引和历史索引;S3:对建立索引机制后的数据进行查询,当按坐标查询时,转向步骤S4,当按对象分类查询时,转向步骤S5;S4:根据坐标与索引中的外包矩形关系进行查询;S5:根据分类编码序列与索引中的序列编码进行按位“与或”运算来查询;S6:若要继续查询新的数据,则转向步骤S4,否则结束。本发明提供方法能够提高水利数据的检索效率。
【专利说明】面向水利数据整合与共享的索引方法
【技术领域】
[0001] 本发明涉及水利信息化监测【技术领域】,特别涉及一种面向水利数据整合与共享的 索引方法。
【背景技术】
[0002] 随着水利信息化的发展,水利领域长期的业务实践和天地一体的观测体系形成了 日益丰富的水利大数据。数据的整合与共享可以使水利行业各部门充分发挥水利大数据的 综合效益,减少不必要的数据采集等重复劳动及相应费用,实现水利业务协同,提高工作效 率,改善工作水平。目前,鉴于水利行业应用参差不齐、地区间发展不平衡、标准规范不足以 及数据中心初见端倪等现状,各个相关水利部门迫切需要实现水利数据的整合与共享。
[0003] 目前,水利领域中的数据采取多点获取、分布存储、分散采集的方式,在实施数据 共享的过程中,高效查询是提高数据共享效率的关键。水利数据是典型的时空数据,并具有 海量性、分布性、自治性等特点,要实现面向水利数据整合与共享的索引方法,需要结合传 统空间索引及分布式技术,另外还必须解决以下几个问题:
[0004] 1)数据的周期性、区域性查询问题。在水利行业应用中,对时空数据的查询除了基 本的点查询、随机范围查询等,还需要考虑按照周期、区域等水利行业常用时空范围对数据 进行查询。例如,在时间上按月、旬、日去查询数据,在空间上按省、市或者流域、子流域等范 围去查询。这类查询往往由于范围边界无法用简单的坐标描述,使得传统空间索引方法对 其处理效率不高。
[0005] 2)对象数据查询问题。水利部门为了数据整合,计划将各流域数据按照水利领域 要素分类,并将数据以面向对象的模型组织,数据被划分为对象数据与属性数据,采用对象 编码来唯一标识,即数据不只按时空属性划分,还融入了水利要素分类。对于水利多维主题 应用,涉及从多个类别的对象查询数据,如何快速定位到对象数据,是这种数据组织方式带 来的新问题。
[0006] 3)索引结构与更新代价问题。水利数据在空间上呈非均匀分布,并且由于各地水 利信息化程度不一,数据密度存在较大差异,所建立的索引结构必须能够适应数据的非均 匀分布特性。随着数据不断录入系统,索引需要更新,水利数据呈海量态势,对系统的吞吐 率有较高要求,索引的更新代价将成为一个值得重视的问题。
[0007] 针对水利数据分布不均匀,若采用传统空间索引R树索引空间维度,当数据在流 域边界聚集时,易发生MBR横跨多个流域的情况。如果希望按流域查询数据,当访问到R树 下层节点时,需要花费较大代价去判定数据的流域归属问题。另一方面,水利数据按面向对 象方式组织后,通过对象编码来唯一标识。对于水利多维主题应用,涉及从多个类别的对象 查询数据,如何利用对象编码快速定位对象成为新的问题。
[0008] Hadoop具有扩容能力强、开发效率高、可靠性高、免费开源及良好的可移植性等优 点,已经成为当前分布式环境下的常用的计算框架和大规模存储解决方案。其对应的分布 式数据库HBase也成为分布式环境下的常用数据库之一。在HBase中,数据按Region存 储,Region是数据库中最小的跨服务器存储单元。我们为了对海量水利数据建立索引,需 要借助Hadoop平台及其相关技术。因此,我们希望提出一种适用于面向水利数据整合与共 享的索引方法,借助Hadoop开源框架实现负载均衡、冗余备份等功能,利用R树对非均匀数 据建立索引,支持按坐标进行点查询、随机范围查询,还需将对象分类编码与R树结合形成 ER树,从而支持对象分类查询。同时,针对海量数据,通过两阶段索引机制对实时数据和历 史数据分开建立索引,从而降低索引更新代价,提高系统吞吐率。
[0009] 因此,针对现有水利数据存储与查询技术的缺陷,有必要提出一种更加高效的面 向水利数据整合与共享的索引方法,以解决前述的应用弊端。
【发明内容】
[0010] 本发明的目的旨在提供本发明提供一种面向水利数据整合与共享的索引方法,采 用时间粒度划分与时间维度索引、对象分类编码与适用于对象分类查询的空间索引、两阶 段索引机制等技术,提高数据存储、整合和检索的效率,适于实用,从而提高系统吞吐率。 [0011] 为了实现上述目的,本发明提供一种面向水利数据整合与共享的索引方法,包括 如下步骤:S1 :根据时间粒度对保存的数据进行划分,定义不同的粒度层次,并对时间粒度 映射时间量化值,并且为数据进行对象分类,定义对象分类编码,其中:所述保存的数据包 括按时间采集的水利数据和按地区采集的水利数据;S2 :对分类后的数据按照索引机制建 立实时索引和历史索引;S3 :对建立索引机制后的数据进行查询,当按坐标查询时,转向步 骤S4,当按对象分类查询时,转向步骤S5 ;S4:根据坐标与索引中的外包矩形关系进行查 询;S5 :根据分类编码序列与索引中的序列编码进行按位"与或"运算来查询;S6 :若要继续 查询新的数据,则转向步骤S4,否则结束。
[0012] 进一步地,所述索引机制包括:索引结构,其分为三层:第一层是按粗粒度时间间 隔建立的时间维度索引,采用线性表组织索引结构;第二层是按细粒度时间间隔建立的时 间维度索引,采用B+树的结构;第三层是按空间划分建立的Region表或本发明提出的ER 树,其中:所述Region表记录了存储实时数据的Region表编号,所述ER树的叶节点指向 HBase中存储的实际数据;在整个索引结构中,第一层索引为全局索引,第二层和第三层为 本地索引,并且第一层和第二层为时间维度索引,第三层为空间维度索引。
[0013] 进一步地,所述历史索引包括:对历史数据建立时间维度索引与ER树索引,其中: 对时间索引的B+树可以提前建立好,对空间索引的ER树可在一个时间间隔结束后,数据不 再改变的情况下,对这些数据建立ER树索引,并将ER树挂在相应的B+树的叶子节点上;当 前时间段结束后,其对应的线性表项、B+树、ER树等索引结构都不会再更新,实现了更新代 价的降低。
[0014] 进一步地,所述实时索引包括:采用了时间维度索引与Region表相结合的方式索 引实时数据,其中:所述Region表为线性表结构,表项中记录了存放实时数据的Region表 编号;当新数据录入时,系统检查其所在Region表,若编号已经存在Region表中,则跳过, 否则,在Region表中追加一项记录,存储新的Region表编号;当前时段对应的B+树的叶子 节点指向了这张 Region表,当查询实时数据时,根据B+树和Region表确定其可能存放于 哪些Region,然后再到Region中查询;进入新的时间间隔后,原有的Region表可以删除, 采用新表记录当前数据存放的Region表编号。
[0015] 本发明提供的面向水利数据整合与共享的索引方法,具有以下有益效果:对时间 进行粒度划分,更适用于特定周期的查询,且以此将数据划分为实时数据与历史数据,便于 两阶段索引机制的实现;对象分类编码可以利用了计算机按位"与"、"或"运算处理效率极 高的特性,提高了对象分类查询效率;同时,通过"或"运算可以使序列涵盖信息更丰富,降 低存储代价;ER树保持了 R树的平衡特性,对非均匀分布数据有着较高的查询效率;两阶段 索引机制对实时数据与历史数据分开建立索引,时间维度索引可以提前建立好,历史索引 可以放在后台建立,实时索引更新效率1?,故提1? 了系统的插入吞吐率。
[0016] 本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变 得明显,或通过本发明的实践了解到。
【专利附图】
【附图说明】
[0017] 图1示出了根据本发明一实施方式的面向水利数据整合与共享的索引方法的流 程不意图;
[0018] 图2示出了根据本发明一实施方式的时间粒度层次划分的示意图;
[0019] 图3示出了根据本发明一实施方式的索引框架的示意图;
[0020] 图4示出了根据本发明一实施方式的时间维度索引的示意图;
[0021] 图5示出了根据本发明一实施方式的ER树结构与编码运算的示意图。
【具体实施方式】
[0022] 下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始 至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参 考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
[0023] 本【技术领域】技术人员可以理解,除非特意声明,这里使用的单数形式"一"、"一 个"、"所述"和"该"也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措 辞"包括"是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加 一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元 件被"连接"或"耦接"到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在 中间元件。此外,这里使用的"连接"或"耦接"可以包括无线连接或耦接。这里使用的措 辞"和/或"包括一个或更多个相关联的列出项的任一单元和全部组合。
[0024] 本【技术领域】技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术 术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应 该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的 意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
[0025] 图1示出了根据本发明一实施方式的面向触控屏的即时通讯程序中的组群消息 浏览方法的流程示意图。如图1所示,本发明提供一种面向水利数据整合与共享的索引方 法,可以包括如下步骤:S1 :根据时间粒度对保存的数据进行划分,定义不同的粒度层次, 并对时间粒度映射时间量化值,并且为数据进行对象分类,定义对象分类编码,其中:所述 保存的数据包括按时间采集的水利数据和按地区采集的水利数据;S2 :对分类后的数据按 照索引机制建立实时索引和历史索引;S3 :对建立索引机制后的数据进行查询,当按坐标 查询时,转向步骤S4,当按对象分类查询时,转向步骤S5 ;S4 :根据坐标与索引中的外包矩 形关系进行查询;S5 :根据分类编码序列与索引中的序列编码进行按位"与或"运算来查 询;S6 :若要继续查询新的数据,则转向步骤S4,否则结束。
[0026] 进一步地,所述索引机制包括:索引结构,其分为三层:第一层是按粗粒度时间间 隔建立的时间维度索引,采用线性表组织索引结构;第二层是按细粒度时间间隔建立的时 间维度索引,采用B+树的结构;第三层是按空间划分建立的Region表或本发明提出的ER 树,其中:所述Region表记录了存储实时数据的Region表编号,所述ER树的叶节点指向 HBase中存储的实际数据;在整个索引结构中,第一层索引为全局索引,第二层和第三层为 本地索引,并且第一层和第二层为时间维度索引,第三层为空间维度索引。
[0027] 进一步地,所述历史索引包括:对历史数据建立时间维度索引与ER树索引,其中: 对时间索引的B+树可以提前建立好,对空间索引的ER树可在一个时间间隔结束后,数据不 再改变的情况下,对这些数据建立ER树索引,并将ER树挂在相应的B+树的叶子节点上;当 前时间段结束后,其对应的线性表项、B+树、ER树等索引结构都不会再更新,实现了更新代 价的降低。
[0028] 进一步地,所述实时索引包括:采用了时间维度索引与Region表相结合的方式索 引实时数据,其中:所述Region表为线性表结构,表项中记录了存放实时数据的Region表 编号;当新数据录入时,系统检查其所在Region表,若编号已经存在Region表中,则跳过, 否则,在Region表中追加一项记录,存储新的Region表编号;当前时段对应的B+树的叶子 节点指向了这张 Region表,当查询实时数据时,根据B+树和Region表确定其可能存放于 哪些Region,然后再到Region中查询;进入新的时间间隔后,原有的Region表可以删除, 采用新表记录当前数据存放的Region表编号。
[0029] 本发明提供的面向水利数据整合与共享的索引方法,具有以下有益效果:对时间 进行粒度划分,更适用于特定周期的查询,且以此将数据划分为实时数据与历史数据,便于 两阶段索引机制的实现;对象分类编码可以利用了计算机按位"与"、"或"运算处理效率极 高的特性,提高了对象分类查询效率;同时,通过"或"运算可以使序列涵盖信息更丰富,降 低存储代价;ER树保持了 R树的平衡特性,对非均匀分布数据有着较高的查询效率;两阶段 索引机制对实时数据与历史数据分开建立索引,时间维度索引可以提前建立好,历史索引 可以放在后台建立,实时索引更新效率1?,故提1? 了系统的插入吞吐率。
[0030] 下面将结合本发明提出的面向水利数据整合与共享的索引方法具体说明五个步 骤的实现内容。
[0031] 图2示出了根据本发明一实施方式的时间粒度层次划分的示意图。如图2所示,步 骤S1用于时间粒度划分与对象分类编码定义。为实现面向水利数据整合与共享的索引,按 照前面所述模型对时间进行多粒度层次划分,如图2所示。以水利数据为例,为便于说明, 假设只以两种粒度("周"和"日")来划分时间轴。先将时间轴按天分割为一些片段:T1、 Τ2…Τη+1(η彡0,Τη+1未必是一个完整的周期)等,每个片段表不一周的时间间隔。将Τ 进一步分为m段(一周包含七天,故这里m取7) :t7n+l、t7n+2、·'tTn+TOi彡0,某些应 用中每个t未必等长),每个片段表示一天的时间间隔。此时,可以看出,T表示一种粗粒度 时间划分,t表示一种相对于T粒度较细的划分。并且如果一个T表示一个周期,则每个t 都是相应T的一个子周期。只有当一个T的七个t都进行完毕,一个T才算结束。以时间 轴最右端且粒度最小的时间间隔(在图2中即为t7n+7)作为当前时间段,其左边的所有时 间段(即图2中tl到t7n+6)共同构成了历史时间段,则当前时间段对应的数据为实时数 据,历史时间段对应的数据为历史数据。
[0032] 水利数据的分类编码是唯一的,为了便于后续空间查询及对象分类查询,本发明 采用二进制编码来定义对象分类编码(若水利数据自有的分类编码是十进制,也可以映射 到这种二进制编码),具体方式如下:以五位二进制编码为例,对于单一类别," 10000"表示 "A"类,"01000"表示"B"类,"00100"表示"C"类,以此类推可以表示出"D"、"E"类等;对 于组合类," 11000"表示"AB"类," 10100"表示"AC"类," 11100"表示"ABC"类,以此类推 可以表示任意类别组合,即根据一个序列中"1"的分布情况,可以判断出有哪些类别被这个 序列所涵盖。这种二进制的类别编码方式可以唯一标识某一类别或多种类别的组合,因为 水利数据可能同时属于多个类别,若采用顺序二进制编码则无法实现一个编码表示多个类 别的情况;
[0033] 图3示出了根据本发明一实施方式的索引框架的示意图。如图3所示,步骤S2用 于索引建立。如图3所示,面向水利数据整合与共享的索引框架分为三层:第一层是按粗粒 度时间间隔建立的时间维度索引,采用线性表组织索引结构;第二层是按细粒度时间间隔 建立的时间维度索引,采用B+树的结构;第三层是按空间划分建立的Region表或本发明提 出的ER树,Region表记录了存储实时数据的Region表编号,ER树的叶节点指向HBase中 存储的实际数据。在整个索引结构中,第一层索引为全局索引,后两层为本地索引。具体描 述如下:首先,将时间轴按预定周期间隔进行划分,以图2为例,用线性表索引顶层粒度时 间间隔(图2中为T),并作为整个系统的主索引,线性表中的每一项对应了一棵索引细时 间粒度(图2中为t)的B+树。由于这些时间间隔中的数据在一个粒度周期完成后不再改 变,故顶层粒度时间间隔结束后,所建立的B+树结构不再改变。此外,时间是单调递增的, 因此线性表按时间顺序增长,可以采用二分查找算法快速定位到索引细时间粒度的B+树。 对数据的空间属性,采用R树索引,B+树的叶子节点指向R树的根节点。为提高索引的对 象分类查询效率,在R树节点中加入对象分类编码信息形成ER树,ER树的叶节点记录了索 引数据的ID。特别的,为了提高系统的吞吐率、减少索引的更新代价,采用两种方法分别在 不同阶段对数据进行索引(对实时数据用Region表索引,对历史数据用ER树索引)。
[0034] 图4示出了根据本发明一实施方式的时间维度索引的示意图。为了建立时间维度 索引,首先要将间隔进行量化。如图4所示,对于一个粒度的时间段(如T2),以其区间的 左边界或右边界值来代表它,只要保证所有时间段的边界不重合即可(如"左闭右开区间" 或"左开右闭区间")。这样任意时间段被量化成一个值(如用20140215表示某一天,真正 的一天应该是从2014年02月15日00时00分00秒到2014年02月15日23时59分59 秒;则20140214表示前一天,20140216表示后一天;当粒度更细时,可用更多位编码表示, 如20140215000000可表示到时、分、秒级别),随着时间的推移,每个新增的时间段对应的 量化值往上递增。本发明建立线性表来索引顶层粒度时间段对应的B+树,表中的关键字为 顶层粒度时间量化值。索引细粒度时间间隔的B+树根据粒度层次分为多层(如T2下面分 为t8、t9、…、tl4, t8也可向下继续分为更细的间隔等),然后从上到下依次索引,即粗时 间粒度的B+树索引细时间粒度的B+树,直至索引到底层时间粒度B+树为止。底层B+树 的每个叶子节点指向索引空间维度的Region表或ER树的根节点。
[0035] 图5示出了根据本发明一实施方式的ER树结构与编码运算的示意图。如图5所 示,对于水利数据空间维度,采用R树索引可以解决数据分布不均、子树深度不平衡等问 题。为提高对象分类查询(特定区域查询也属于该类查询)效率,本发明对传统R树进行 改进,在树中每个节点增加二进制的对象分类编码序列,形成适合对象分类查询的ER树 (Encoding R-Tree)。如图5所示,ER树的结构与R树类似,对空间目标建立传统R树索引, 树中每一个节点的对象分类编码序列都是由其下子节点或索引目标的编码序列按位"或" 运算得到。
[0036] 两阶段索引机制的实现具体如下:水利数据为增量式增长,本发明对数据划分成 实时数据和历史数据,对实时数据注重考虑索引更新代价,对历史数据偏向考虑其查询效 率。由前面对时间维度索引的描述可知,时间间隔(粒度)是事先定义好的,对时间索引的 B+树可以提前建立好,对空间索引的ER树可在一个时间间隔结束后,数据不再改变的情况 下,对这些数据建立ER树索引,并将ER树挂在相应的B+树叶子节点上。当一个顶层粒度 的时间间隔结束后,其对应的线性表项、B+树、ER树等索引结构都不会再更新,实现了更新 代价的降低。对于实时数据,由于其数据量较小,我们采用了 B+树与Region表相结合的方 式进行索引。B+树与前面介绍的结构相同,Region表结构与前面介绍的线性表类似,表项 中记录了存放实时数据的Region表编号,即新数据录入时,系统检查其所在Region,若编 号已经存在Region表中,则跳过;否则,在Region表中追加一项记录,存储新的Region表 编号。当前时段对应的B+树的叶子节点指向了这张Region表,当查询实时数据时,根据B+ 树和Region表确定其可能存放于哪些Region,然后再到Region中查询。进入新的时间间 隔后,原有的Region表可以删除,采用新表记录当前数据存放的Region表编号;
[0037] 步骤S3,对数据进行查询,若按坐标查询,则转向步骤S4 ;若按对象分类查询,则 转向步骤S5 ;
[0038] 步骤S4,根据坐标与索引中的外包矩形关系进行查询。首先按照待查询的时间范 围根据时间线性表及B+树定位到索引空间的ER树。然后按照传统R树的查询算法查询具 体数据;
[0039] 步骤S5,根据分类编码序列与索引中的序列进行按位"与或"运算来查询。首先按 照待查询的时间范围根据时间线性表及B+树定位到索引空间的ER树。按对象类别查询某 个数据的信息时,只要先得出其相应的对象分类编码序列,然后和ER树中节点的编码序列 按位"与"操作,若所得结果不变,说明要查找的数据就在该节点索引的子节点中。例如在 图5中,要查询P3这个目标,其对象分类编码是0000001,先将这个序列与A节点(假设此 时A节点为ER树的根节点)的序列做"与"运算,发现所得序列不变,故P3必定被节点A的 子树索引;然后将P3的编码序列与A节点的子节点的序列做"与"运算,发现和节点B的序 列运算后所得序列不变,故P3必定位于节点B的子节点中;再将目标序列与C、D、E节点中 的序列分别做"与"运算,发现只有与C节点的序列运算后所得序列不变,而C节点是叶子 节点,故目标就在其对应的MBR中,遍历该节点数据项即可找到目标。这种方法利用了计算 机按位"与"、"或"运算处理效率极高的特性,提高了对象分类查询效率;同时,通过"或"运 算可以使序列涵盖信息更丰富,降低存储代价。
[0040] 步骤S6,若要继续查询新的数据,则转向步骤S3 ;否则结束。
[0041] 面向水利数据整合与共享的索引方法,其特征在于,包括索引结构设计和两阶段 索引机制两部分,其中:所述索引结构设计包括时间粒度划分、对象分类编码设计、索引框 架、时间维度索引结构设计与空间索引结构设计,所述两阶段索引机制包括对实时数据建 立实时索引、对历史数据建立历史索引两部分;
[0042] 所述时间粒度划分为:对时间轴按序切割成若干线段,每个线段又可以继续细分 为子线段,切割的长度对应于时间的粒度(即"年"、"月"、"日"等时间粒度)。假设T为顶 层粒度划分,t表示一种相对于T粒度较细的划分。并且如果一个T表示一个周期,则每个 t都是相应T的一个子周期。只有当一个T的所有t都进行完毕,一个T才算结束。以时间 轴最右端且粒度最小的时间间隔其左边的所有时间段共同构成了历史时间段,则当前时间 段对应的数据为实时数据,历史时间段对应的数据为历史数据;
[0043] 所述面向水利数据整合与共享的索引框架分为三层:第一层是按粗粒度时间间隔 建立的时间维度索引,采用线性表组织索引结构;第二层是按细粒度时间间隔建立的时间 维度索引,采用B+树的结构;第三层是按空间划分建立的Region表或本发明提出的ER树, Region表记录了存储实时数据的Region表编号,ER树的叶节点指向HBase中存储的实际 数据。在整个索引结构中,第一层索引为全局索引,后两层为本地索引。前两层为时间维度 索引,底层为空间维度索引;
[0044] 所述时间量化值为:对于一个粒度的时间段,即在时间轴上截取的一条时间线段, 以其区间的左边界或右边界值来代表它,只要保证所有时间段的边界不重合即可(如"左 闭右开区间"或"左开右闭区间")。这样任意时间段被量化成一个值。随着时间的推移,每 个新增的时间段对应的量化值往上递增;
[0045] 所述时间维度索引为:建立线性表来索引顶层粒度时间段对应的B+树,表中的关 键字为顶层粒度时间量化值。索引细粒度时间间隔的B+树根据粒度层次分为多层,然后从 上到下依次索引,即粗时间粒度的B+树索引细时间粒度的B+树,直至索引到底层时间粒度 B+树为止。底层B+树的每个叶子节点指向索引空间维度的Region表或ER树的根节点;
[0046] 所述对象分类编码采用二进制编码来表示分类,具体方式如下:以五位二进制编 码为例,对于单一类别," 10000"表示"A"类,"01000"表示"B"类,"00100"表示"C"类,以 此类推可以表示出"D"、"E"类等;对于组合类," 11000"表示"AB"类," 10100"表示"AC" 类," 11100"表示"ABC"类,以此类推可以表示任意类别组合,即根据一个序列中" 1"的分 布情况,可以判断出有哪些类别被这个序列所涵盖;
[0047] 所述空间维度索引为:在树中每个节点增加二进制的对象分类编码序列,形成适 合对象分类查询的ER树(Encoding R-Tree)。ER树的结构与R树类似,对空间目标建立传 统R树索引,树中每一个节点的对象分类编码序列都是由其下子节点或索引目标的编码序 列按位"或"运算得到。若要按对象类别查询某个数据的信息,只要先得出其相应的对象分 类编码序列,然后和ER树中节点的编码序列按位"与"操作,若所得结果不变,说明要查找 的数据就在该节点索引的子节点中;
[0048] 所述历史索引为:对历史数据建立时间维度索引与ER树索引。对时间索引的B+树 可以提前建立好,对空间索引的ER树可在一个时间间隔结束后,数据不再改变的情况下, 对这些数据建立ER树索引,并将ER树挂在相应的B+树叶子节点上。当前时间段结束后, 其对应的线性表项、B+树、ER树等索引结构都不会再更新,实现了更新代价的降低;
[0049] 所述实时索引为:采用了时间维度索引与Region表相结合的方式索引实时数据。 Region表为线性表结构,表项中记录了存放实时数据的Region表编号,即新数据录入时, 系统检查其所在Region,若编号已经存在Region表中,则跳过;否则,在Region表中追加 一项记录,存储新的Region表编号。当前时段对应的B+树的叶子节点指向了这张Region 表,当查询实时数据时,根据B+树和Region表确定其可能存放于哪些Region,然后再到 Region中查询。进入新的时间间隔后,原有的Region表可以删除,采用新表记录当前数据 存放的Region表编号;
[0050] 所述两阶段索引机制为:对于实时数据,采用B+树与Region表组合的实时索引; 当前时间段结束后,对这个时间段中的数据重新建立ER树,并使相应B+的叶子节点指向该 ER树的根节点,形成历史索引。B+树可以提前建立好,重建ER树可以放在后台进行,不影 响实时数据进入系统。
[0051] 提出了面向水利数据整合与共享的索引方法。方法中先对时间粒度进行划分,区 分实时数据与历史数据,设计了对象分类编码;采用线性表与B+相结合对时间维度进行索 弓丨;将对象分类编码引入R树形成适用于对象分类查询的ER树;通过两阶段索引机制对实 时数据和历史数据分开建立索引,从而降低索引更新代价,提高系统吞吐率。本发明解决了 在海量水利数据存储与查询中的索引更新代价高及对象分类查询低效等问题。
[0052] 本发明为实现上述发明目的采用如下技术方案:
[0053] 面向水利数据整合与共享的索引方法,其特征在于,包括索引结构设计和两阶段 索引机制两部分,其中:所述索引结构设计包括时间粒度划分、对象分类编码设计、索引框 架、时间维度索引结构设计与空间索引结构设计,所述两阶段索引机制包括对实时数据建 立实时索引、对历史数据建立历史索引两部分;
[0054] 所述时间粒度划分为:对时间轴按序切割成若干线段,每个线段又可以继续细分 为子线段,切割的长度对应于时间的粒度(即"年"、"月"、"日"等时间粒度)。假设T为顶 层粒度划分,t表示一种相对于T粒度较细的划分。并且如果一个T表示一个周期,则每个 t都是相应T的一个子周期。只有当一个T的所有t都进行完毕,一个T才算结束。以时间 轴最右端且粒度最小的时间间隔其左边的所有时间段共同构成了历史时间段,则当前时间 段对应的数据为实时数据,历史时间段对应的数据为历史数据;
[0055] 所述面向水利数据整合与共享的索引框架分为三层:第一层是按粗粒度时间间隔 建立的时间维度索引,采用线性表组织索引结构;第二层是按细粒度时间间隔建立的时间 维度索引,采用B+树的结构;第三层是按空间划分建立的Region表或本发明提出的ER树, Region表记录了存储实时数据的Region表编号,ER树的叶节点指向HBase中存储的实际 数据。在整个索引结构中,第一层索引为全局索引,后两层为本地索引。前两层为时间维度 索引,底层为空间维度索引;
[0056] 所述时间量化值为:对于一个粒度的时间段,即在时间轴上截取的一条时间线段, 以其区间的左边界或右边界值来代表它,只要保证所有时间段的边界不重合即可(如"左 闭右开区间"或"左开右闭区间")。这样任意时间段被量化成一个值。随着时间的推移,每 个新增的时间段对应的量化值往上递增;
[0057] 所述时间维度索引为:建立线性表来索引顶层粒度时间段对应的B+树,表中的关 键字为顶层粒度时间量化值。索引细粒度时间间隔的B+树根据粒度层次分为多层,然后从 上到下依次索引,即粗时间粒度的B+树索引细时间粒度的B+树,直至索引到底层时间粒度 B+树为止。底层B+树的每个叶子节点指向索引空间维度的Region表或ER树的根节点;
[0058] 所述对象分类编码采用二进制编码来表示分类,具体方式如下:以五位二进制编 码为例,对于单一类别," 10000"表示"A"类,"01000"表示"B"类,"00100"表示"C"类,以 此类推可以表示出"D"、"E"类等;对于组合类," 11000"表示"AB"类," 10100"表示"AC" 类," 11100"表示"ABC"类,以此类推可以表示任意类别组合,即根据一个序列中" 1"的分 布情况,可以判断出有哪些类别被这个序列所涵盖;
[0059] 所述空间维度索引为:在树中每个节点增加二进制的对象分类编码序列,形成适 合对象分类查询的ER树(Encoding R-Tree)。ER树的结构与R树类似,对空间目标建立传 统R树索引,树中每一个节点的对象分类编码序列都是由其下子节点或索引目标的编码序 列按位"或"运算得到。若要按对象类别查询某个数据的信息,只要先得出其相应的对象分 类编码序列,然后和ER树中节点的编码序列按位"与"操作,若所得结果不变,说明要查找 的数据就在该节点索引的子节点中;
[0060] 所述历史索引为:对历史数据建立时间维度索引与ER树索引。对时间索引的B+树 可以提前建立好,对空间索引的ER树可在一个时间间隔结束后,数据不再改变的情况下, 对这些数据建立ER树索引,并将ER树挂在相应的B+树叶子节点上。当前时间段结束后, 其对应的线性表项、B+树、ER树等索引结构都不会再更新,实现了更新代价的降低;
[0061] 所述实时索引为:采用了时间维度索引与Region表相结合的方式索引实时数据。 Region表为线性表结构,表项中记录了存放实时数据的Region表编号,即新数据录入时, 系统检查其所在Region,若编号已经存在Region表中,则跳过;否则,在Region表中追加 一项记录,存储新的Region表编号。当前时段对应的B+树的叶子节点指向了这张Region 表,当查询实时数据时,根据B+树和Region表确定其可能存放于哪些Region,然后再到 Region中查询。进入新的时间间隔后,原有的Region表可以删除,采用新表记录当前数据 存放的Region表编号;
[0062] 所述两阶段索引机制为:对于实时数据,采用B+树与Region表组合的实时索引; 当前时间段结束后,对这个时间段中的数据重新建立ER树,并使相应B+的叶子节点指向该 ER树的根节点,形成历史索引。B+树可以提前建立好,重建ER树可以放在后台进行,不影 响实时数据进入系统。
[0063] 面向水利数据整合与共享的索引方法,其特征在于包括如下步骤:
[0064] 步骤S1,对时间进行粒度划分,定义出不同的粒度层次,并对时间粒度映射时间量 化值;为数据进行对象分类,定义对象分类编码;
[0065] 步骤S2,对数据按照两阶段索引机制建立索引;
[0066] 步骤S3,对数据进行查询,若按坐标查询,则转向步骤S4 ;若按对象分类查询,则 转向步骤S5 ;
[0067] 步骤S4,根据坐标与索引中的外包矩形关系进行查询;
[0068] 步骤S5,根据分类编码序列与索引中的序列进行按位"与或"运算来查询;
[0069] 步骤S6,若要继续查询新的数据,则转向步骤S3 ;否则结束。
[0070] 本发明采用上述技术方案,具有以下有益效果:对时间进行粒度划分,更适用于特 定周期的查询,且以此将数据划分为实时数据与历史数据,便于两阶段索引机制的实现;对 象分类编码可以利用了计算机按位"与"、"或"运算处理效率极高的特性,提高了对象分类 查询效率;同时,通过"或"运算可以使序列涵盖信息更丰富,降低存储代价;ER树保持了 R 树的平衡特性,对非均匀分布数据有着较高的查询效率;两阶段索引机制对实时数据与历 史数据分开建立索引,时间维度索引可以提前建立好,历史索引可以放在后台建立,实时索 引更新效率1?,故提1? 了系统的插入吞吐率。
[0071] 本【技术领域】技术人员可以理解,本发明可以涉及用于执行本申请中所述操作中的 一项或多项操作的设备。所述设备可以为所需的目的而专门设计和制造,或者也可以包括 通用计算机中的已知设备,所述通用计算机有存储在其内的程序选择性地激活或重构。这 样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子 指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型 的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、随即存储器(RAM)、只读存储器(ROM)、 电可编程ROM、电可擦ROM (EPROM)、电可擦除可编程ROM (EEPR0M)、闪存、磁性卡片或光线卡 片。可读介质包括用于以由设备(例如,计算机)可读的形式存储或传输信息的任何机构。 例如,可读介质包括随即存储器(RAM)、只读存储器(ROM)、磁盘存储介质、光学存储介质、 闪存装置、以电的、光的、声的或其他的形式传播的信号(例如载波、红外信号、数字信号) 等。
[0072] 本【技术领域】技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或 框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。可以将 这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器 来生成机器,从而通过计算机或其他可编程数据处理方法的处理器来执行的指令创建了用 于实现结构图和/或框图和/或流图的框或多个框中指定的方法。
[0073] 本【技术领域】技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的 步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各 种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。 进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案 也可以被交替、更改、重排、分解、组合或删除。
[0074] 以上所述仅是本发明的部分实施方式,应当指出,对于本【技术领域】的普通技术人 员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应 视为本发明的保护范围。
【权利要求】
1. 一种面向水利数据整合与共享的索引方法,其特征在于,包括如下步骤: 51 :根据时间粒度对保存的数据进行划分,定义不同的粒度层次,对时间粒度映射时间 量化值,并且为数据进行对象分类,定义对象分类编码,其中:所述保存的数据包括按时间 采集的水利数据和按地区采集的水利数据; 52 :对分类后的数据按照索引机制建立实时索引和历史索引; 53 :对建立索引机制后的数据进行查询,当按坐标查询时,转向步骤S4,当按对象分类 查询时,转向步骤S5 ; 54 :根据坐标与索引中的外包矩形关系进行查询; 55 :根据分类编码序列与索引中的序列编码进行按位的与或运算来查询; 56 :若要继续查询新的数据,则转向步骤S4,否则结束。
2. 如权利要求1所述的方法,其特征在于,所述索引机制包括: 索引结构,其分为三层: 第一层是按粗粒度时间间隔建立的时间维度索引,采用线性表组织索引结构; 第二层是按细粒度时间间隔建立的时间维度索引,采用B+树的结构; 第三层是按空间划分建立的Region表或ER树,其中:所述Region表记录了存储实时 数据的Region表编号,所述ER树的叶节点指向HBase中存储的实际数据; 在整个索引结构中,第一层索引为全局索引,第二层和第三层为本地索引,并且第一层 和第二层为时间维度索引,第三层为空间维度索引。
3. 如权利要求2所述的方法,其特征在于,所述历史索引包括: 对历史数据建立时间维度索引与ER树相结合的索引,其中: 将时间维度索引的B+树提前建立好,在一个时间间隔结束后且数据不再改变时,通过 空间维度索引的ER树对所述历史数据建立ER树索引,并将ER树挂在相应的B+树的叶子 节点上; 当前时间段结束后,其对应的线性表项、B+树、ER树的索引都不再更新。
4. 如权利要求2所述的方法,其特征在于,所述实时索引包括: 对实时数据建立时间维度索引与Region表相结合的索引,其中: 所述Region表为线性表结构,表项中记录了存放所述实时数据的Region表编号; 当新数据录入时,系统检查其所在Region表,若编号已经存在于Region表中,贝U跳过, 否则,在Region表中追加一项记录,存储新的Region表编号; 当前时段对应的B+树的叶子节点指向了这张 Region表,当查询所述实时数据时,根据 B+树和Region表确定其可能存放于哪些Region,然后再到Region中查询; 进入新的时间间隔后,原有的Region表可以删除,采用新表记录当前数据存放的 Region表编号。
【文档编号】G06F17/30GK104090949SQ201410313144
【公开日】2014年10月8日 申请日期:2014年7月2日 优先权日:2014年7月2日
【发明者】冯钧, 盛震宇, 唐志贤, 许潇, 王超, 査显月, 杜丙帅, 朱跃龙, 万定生, 李士进 申请人:河海大学