CN106844664B - 一种基于摘要的时间序列数据索引构建方法 - Google Patents
一种基于摘要的时间序列数据索引构建方法 Download PDFInfo
- Publication number
- CN106844664B CN106844664B CN201710051558.6A CN201710051558A CN106844664B CN 106844664 B CN106844664 B CN 106844664B CN 201710051558 A CN201710051558 A CN 201710051558A CN 106844664 B CN106844664 B CN 106844664B
- Authority
- CN
- China
- Prior art keywords
- node
- time
- nodes
- data
- query
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/248—Presentation of query results
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种基于摘要的时间序列数据索引构建方法,属于大数据以及数据库技术领域。其核心内容是将时间序列数据分成小的时间片段,然后用线性拟合的方法压缩表示每个时间片段以形成该片段的摘要,对于压缩后的摘要数据构建树状索引结构;当需要可视化查询时,基于构建的索引结构采用增量式可视化技术,确保可视化方法准确高效,而且索引结构建立一次,可供多次查询使用。本方法构造的树状索引结构中,自上而下节点的拟合误差由大变小,可以按照不同查询精度查询展示而且查询结果只搜索索引结构,相比每次查询扫描原始数据数据量大大减小,确保在用户规定的时间延迟内返回查询结果,确保可视化方法高效。
Description
技术领域
本发明涉及一种基于摘要的时间序列数据索引构建方法,属于大数据以及数据库技术领域。
背景技术
时间序列数据表示由传感器网络、金融市场、医疗保健、监控和其他诸多领域中产生的流式数据。随着高频流式数据源的激增,迫切需要针对大量数据的交互式分析和实时可视化技术。例如趋势分析、模式识别、相关性分析、交互式数据发现等。
一个时间序列数据可视化的典型例子是显示一个传感器在特定时间范围的值。现在的可视化工具处理该问题,一般分为两种方法:第一种首先从数据库中查询所有满足条件的值,交由可视化模块渲染展示。这种方式需要反馈大量数据从而导致数据传输过程中消耗很大的带宽进而造成很高的延迟。第二种是首先在对查询的结果进行数据压缩,然后返回给可视化模块,这样可以极大的减少数据传输过程中的带宽消耗,但是在压缩数据时,仍然需要扫描所有符合查询条件的数据,这个过程时间代价仍然很高。为了降低扫描压缩数据的时间,可以利用数据摘要算法来压缩时间序列数据的存储量。但两种方法都具有查询时延长、数据传输量大的缺陷。
发明内容
本发明的目的旨在解决目前常用可视化方法在处理海量时间序列数据时,遇到的查询时延长、数据传输量大的缺陷,提出了一种基于摘要的时间序列数据索引构建方法。
本发明一种基于摘要的时间序列数据索引构建方法,核心内容是:将时间序列数据分成小的时间片段,然后用线性拟合的方法压缩表示每个时间片段以形成该片段的摘要,对于压缩后的摘要数据构建树状索引结构;当需要可视化查询时,基于构建的索引结构采用增量式可视化技术,确保可视化方法准确高效,而且索引结构建立一次,可供多次查询使用。
一种基于摘要的时间序列数据索引构建方法,通过以下步骤实现:
步骤1:基于时间序列数据,初始化系统参数;
其中,系统参数包括时间序列标号、分段最大误差以及树状索引结构中间节点的子节点个数基准、时间序列片段数组以及保存索引结构时初始化内存缓冲区的大小;
其中,时间序列标号,记为i,代表时间序列数据T中第i个时刻,此第i个时刻的值记为vi,第i时刻记为ti,下标i是大于等于0的整数;将原始时间序列分段时最大的误差,即分段最大误差记为ε;树状索引结构中间节点的子节点个数基准记为B,B是一个大于0的整数;时间序列片段数组,记为U,初始化为空;保存索引结构时初始化内存缓冲区的大小,记为X,单位是兆字节;
步骤2:对时间序列数据进行分段,输出时间序列片段并保存到时间序列片段数组中;
对时间序列数据进行分段可以按照等间隔分段,还可以按照不等间隔分段;若为不等间隔分段,可使用《文献1》中提出的旋转门算法进行分段;
《文献1》:Bristol E H.Swinging door trending:adaptive trend recording[C]//ISA National Conference Proceedings.1990,45;其中,文献1中所述的算法输入对应本专利中的时间序列数据T,文献1中所述算法里的误差对应本发明中分段最大误差ε;
使用旋转门算法时,将时间序列数据T作为旋转门算法的输入,将分段最大误差ε作为旋转门算法中的最大误差;旋转门算法输出的时间序列片段保存在时间序列片段数组U中;
采用旋转门算法进行不等间隔分段,分段结束后,时间序列数据变成了不等间隔的时间片段;
步骤3:采用拟合函数对步骤2输出的每一段时间序列片段进行拟合,得到每一段时间序列片段的数据摘要信息;
其中,ts和te分别代表时间序列片段的开始时刻和结束时刻,vs和ve分别表示ts时刻和te时刻的值,e代表用线性拟合后的直线代替时间序列数据产生的误差,即拟合误差,M代表每一时刻的值累加后的和,P代表每一时刻和该时刻的值相乘后累加的和;
vs根据公式(1)计算,ve根据公式(2)计算,e根据公式(3)计算,M根据公式(4)计算,P根据公式(5)计算;
vs=f(ts) (1)
其中,f(ts)代表ts时刻函数f(t)的值,f(t)代表拟合后直线的函数表达式,用公式(6)表示;
ve=f(te) (2)
其中,f(te)代表te时刻函数f(t)的值;
f(t)=ηt+θ (6)
其中,η和θ分别为f(t)的拟合斜率和拟合偏置,分别用公式(7)和公式(8)计算:
步骤4:利用步骤3得到的数据摘要信息,构建树状索引结构;
具体为:将步骤3中每一项数据摘要信息,当作树中最底层节点,自下而上合并产生上层节点,构建树状索引结构;其中,自下而上合并产生上层节点,即由下一层节点合并产生上一层节点的过程如下:
步骤4.1:顺序读取一个下一层节点到数据缓冲区中,数据缓冲区用来暂时保存读到的节点数据,判断节点数据的数量,并进行相应操作:
4.1A:当数据缓冲区节点数量达到2*B时,跳至步骤4.2;
4.1B:当数据缓冲区节点数量不足2*B且读取的节点不是最后一个节点时,跳回步骤4.1;否则,若数据缓冲区节点数量不足2*B且读取的节点是最后一个节点,跳转至步骤4.5;
步骤4.2:合并相邻两个节点为一个节点,将合并产生节点的拟合误差作为合并代价,计算数据缓冲区中合并任意两个相邻节点的合并代价,采用自下而上的方式,选择合并代价最小的两个节点合并,产生一个合并节点;
合并过程是利用N1和N2的数据摘要信息计算出合并节点Na的数据摘要信息;
在公式(9)-(20)中,用下标k用来区分不同的节点,即k可以是1,2,a;即用下标k用来区分不同的节点,即k为1时对应节点N1,k为2时对应节点N2,k为a时对应节点Na;如和分别表示节点Nk对应的时间序列片段的开始时刻和结束时刻,和分别表示节点Nk对应的时间序列片段开始时刻的值和结束时刻的值,根据公式(9)计算,根据公式(10)计算;
其中,和分别代表时刻和时刻fa(t)的值,并分别记为和 和分别为节点Na数据摘要信息中的开始时刻和结束时刻,且节点Na的开始时刻为节点N1的开始时刻节点Na的结束时刻为节点N2的结束时刻fa(t)表示对和之间的时间序列片段采用线性回归拟合后直线的函数表达式,用公式(11)表示,
ea为节点Na的拟合误差,同时也看作为N1和N2的合并代价,拟合误差越小,合并代价越小,反之,拟合误差越大,合并代价越大,ea根据公式(12)计算;
其中,e1表示节点N1的拟合误差,e2表示节点N2的拟合误差;f1(t)表示对节点N1对应的时间序列片段,采用线性回归拟合后直线的函数表达式,f2(t)表示节点N2对应的时间序列片段,采用线性回归拟合后直线的函数表达式;表示节点N2对应的时间序列片段的开始时刻,表示节点N1对应的时间序列片段的结束时刻;θ1、θ2和θa分别是f1(t)、f2(t)和fa(t)的拟合偏置;η1和η2分别是f1(t)和f2(t)的拟合斜率;M1和M2分别表示节点N1和N2对应的时间序列片段每一时刻的值累加后的和,且Ma为节点N1中M1和节点N2中M2相加的和;P1和P2分别表示
节点N1和N2对应时间序列片段每一时刻和对应的值相乘后累加的和;
f1(t)和f2(t)分别用公式(13)和公式(14)表示:
fa(t)、f1(t)和f2(t)的拟合斜率ηa、η1和η2分别用公式(15)、(16)和(17)表示:
n1根据公式(18)计算,n2根据公式(19)计算,na根据公式(20)计算;
步骤4.3:将步骤4.2中选择出来的合并代价最小的两个节点用合并节点替换,判断节点数量并进行相应的操作:
4.3A:当数据缓冲区中的节点数量大于2时,跳转回步骤4.2;
4.3B:当数据缓冲区中只剩下2个节点时,将合并产生数据缓冲区中第1个节点的下一层节点数量记为C1,其中下标1代表数据缓冲区中第一个节点;
步骤4.4:保存数据缓冲区中的第一个节点为上一层节点;然后,清空数据缓冲区;再将合并产生第2个节点的2*B-C1个下一层节点读入数据缓冲区,然后跳转回步骤4.1;
步骤4.5:将数据缓冲区中小于2*B个的节点合并成一个上一层节点;
步骤4.6:在上一层节点中添加指针和子节点的索引,指向对应的子节点,同时在每一层节点上都添加右指针,指向右边相邻的节点;
其中,上一层节点为父节点,合并产生上一层节点的下一层节点为对应父节点的子节点;上一层节点和下一层节点之间用指针来建立对应的父子关系;
步骤5:保存步骤4生成的树状索引结构;
其中,生成的树状索引可以直接保存在硬盘中,也可以保存在数据库中作为数据库的索引结构;将树状索引结构直接保存在硬盘中具体为:在内存中申请一个大小为X兆字节的缓冲区,保存步骤4中生成的树状索引结构;当缓冲区满时或者程序结束时,将缓冲区内的树状索引结构保存到文件中,在保存时对于整形实数采用变长存储,达到数据压缩的目的;
至此,经过步骤1到步骤5,完成了一种基于摘要的时间序列数据索引构建方法。
一种自适应的时间序列数据查询方法,通过以下步骤实现:
步骤A:当需要查询时,将步骤5保存的树状索引结构的上半部分读入内存,构造查询语句,初始化查询结果数组和数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟以及查询时深入查找一层所需要的时间;
其中,保存的树状索引结构的上半部分,具体为树状索引结构中除了最底层子节点外的其他部分;查询语句为:
q=select*from dateset where time>Qs and time<Qe and error<Qerror,
其中,Qs代表查询范围的开始时刻,Qe代表查询范围的结束时刻,Qerror代表查询结果允许的最大误差,即查询误差,表示查询在Qs和Qe时刻之间的数据,并且误差要小于等于Qerror;初始化查询结果数组R为空;把数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟,记为L;查询时深入查找一层所需要的时间,记为c;
步骤B:基于步骤A的查询语句查找包含查询范围的开始时刻的节点,同时保证查询时延小于用户要求的最大时延,返回包含查询范围的开始时刻的节点;
具体步骤如下:
步骤B.1:计算查询时可以查找的最大深度;
其中,查询时可以查找的最大深度记为h,h=L/c;
步骤B.2:读取根节点,判断根节点是否包含查询范围的开始时刻,并根据判断结果返回节点,进行相应操作:
B.21:若根节点包含查询范围的开始时刻,返回当前判断的根节点,跳至步骤B.3;
B.22:若根节点不包含查询范围的开始时刻,则读取根节点的右指针指向的节点作为根节点,跳转到步骤B.2;
步骤B.3:读取步骤B.2返回节点,记为当前节点,并判断当前节点的拟合误差是否满足查询误差要求并进行相应操作,具体为:
B.3.1:如果当前节点的拟合误差小于等于查询误差Qerror,返回当前节点,然后继续步骤C;
B.3.2:如果当前节点的拟合误差大于查询误差Qerror,继续步骤B.4;
其中,查询误差要求是指是节点的拟合误差要小于等于查询误差Qerror;
步骤B.4:计算目前的查询深度;
查询深度根据步骤B.3中的节点在树状索引结构上的位置计算,在最上层根节点时,代表查询深度为1,自上而下每深入一层,查询深度加1;
步骤B.5:根据步骤B.4计算的目前查询深度判断是否可以继续深入查询,具体为:
B.5.1:如果目前的查询深度小于h,则根据步骤B.2中节点的子节点索引,读取包含查询范围开始时刻的子节点作为根节点,跳至步骤B.2;
B.5.2:如果目前的查询深度大于等于h,则返回步骤B.2中的节点,然后跳至步骤C;
步骤C:根据包含查询范围的开始时刻的节点,将满足查询范围要求的所有节点加入查询结果数组中,并输出查询结果数组,具体为:
步骤C.1:读取包含查询范围的开始时刻的节点,并更新当前节点为此节点;
步骤C.2:判断当前节点是否满足查询范围,把满足查询范围要求的节点加入查询结果数组中;
C.2.1:如果当前节点的结束时间时刻,小于查询范围的结束时刻Qe,将当前节点加入查询结果数组R中,并读取当前节点的右指针指向的节点作为当前节点,然后继续步骤C.2;
C.2.2:如果当前节点的结束时刻大于等于查询范围的结束时刻,将当前节点加入查询结果数组R中,结束查询,继续执行步骤D;
其中,满足查询范围要求是指节点开始时刻和结束时刻之间覆盖的时间范围和查询范围的开始时刻和查询范围的结束时刻之间覆盖的时间范围存在交集;
步骤D:将查询结果数组中的数据展示出来,具体为:
步骤D.1:判断查询结果数组R是否有更新,并根据判断结果决定是否进行可视化展现:
D.1.1:若查询结果数组R上存在更新,跳至步骤D.2;
D.1.2:若查询结果数组R上不存在更新,跳至步骤E;
步骤D.2:判断查询结果数组R中第一个节点R[0]的开始时刻与查询范围的开始时刻是否一致,更新不一致情况下查询结果数组R中第一个节点的开始时刻和开始时刻的值;
D.2.1:如果判断结果一致,则跳至步骤D.3;
D.2.2:若判断结果不一致,即R[0]节点开始时刻小于查询范围的开始时刻Qs,则以R[0]节点开始时刻和结束时刻的值为横坐标,R[0]节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,再根据拟合后的直线求出查询范围开始时刻对应的值,用查询范围的开始时刻和计算出查询范围开始时刻的值替换R[0]节点的开始时刻和开始时刻的值,然后,继续步骤D.3;
步骤D.3:判断查询结果数组中最后一个节点的结束时刻是否与查询范围的结束时刻是否一致,更新不一致情况下查询结果数组R中最后一个节点的结束时刻和结束时刻的值;
D.3.1:如果判断结果一致,则跳至步骤D.4;
D.3.2:如果查询结果数组中最后一个节点的结束时刻大于查询的结束时刻Qe,则以查询结果数组中最后一个节点的开始时刻和结束时刻的值为横坐标,查询结果数组中最后一个节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,根据拟合后的直线求出查询范围的结束时刻对应的值,用查询范围的结束时刻和计算出查询范围结束时刻的值替换查询结果数组中最后一个节点的结束时刻和结束时刻的值,然后继续步骤D.4;
步骤D.4:以时间作为横坐标,以对应的值作为纵坐标,建立直角坐标系,将查询结果数组R中所有节点的开始时刻和结束时刻对应的点,用直线相连,可视化展现出来;
步骤E:依次遍历查询结果数组中的每一个节点,判断查询结果数组中是否有不满足查询误差要求需要细化查询的节点,返回不满足查询误差要求的节点和细化查询的查询语句;
具体步骤如下:
步骤E.1:顺序读取查询结果数组R中的一个节点,判断读取到的节点拟合误差和查询误差的关系,返回不满足查询误差要求的节点和细化查询的查询语句;
E.1.1:如果读取到的节点的拟合误差大于查询误差Qerror,则重新构造查询语句q,如果此次读取到的节点的开始时刻比查询范围的开始时刻Qs小,查询语句q的查询范围的开始时刻Qs不变,否则q的查询范围的开始时刻Qs设置为此次读取到的节点的开始时刻;如果此次读取到的节点的结束时刻比查询语句q查询范围的结束时刻Qe大,则q的查询范围的结束时刻Qe不变,否则q的查询范围的结束时刻Qe设置为此次读取到的节点的结束时刻;查询误差Qerror保持不变;然后返回此次读取到的节点和查询语句q,跳转至步骤F;
E.1.2:如果读取到的节点的拟合误差小于等于查询误差Qerror,且不是最后一个节点,继续步骤E.1;如果读取到的节点的拟合误差小于等于查询误差Qerror,且是最后一个节点,跳转到步骤E.2;
步骤E.2:查询结果数组中所有的节点的拟合误差都小于等于查询误差Qerror,满足查询误差要求,结束查询;
步骤F:根据步骤E中返回的节点和查询语句,进行细化查询并更新查询结果数组,具体为:
步骤F.1:在步骤A读入内存的树状索引结构中,找到步骤E中返回的节点并根据找到节点的子节点索引,读取包含q中查询范围开始时刻的子节点;
步骤F.2:判断读取到的子节点的拟合误差是否满足查询误差要求,并根据判断结果进行如下操作:
F.2.1:如果子节点的拟合误差小于等于查询语句q中查询误差Qerror,初始化一个结果缓冲区,暂时保存读取到的子节点,按照子节点的右指针连续读取查询语句q查找范围内包含的所有节点,依次放入结果缓冲区中,然后跳转至步骤F.3;
F.2.2:如果子节点的拟合误差大于查询语句q中查询误差Qerror,将当前读取到的子节点当作步骤E返回的节点,跳转至步骤F.1;
步骤F.3:将查询结果数组R中步骤E返回的节点用结果缓冲区的节点替换,更新查询结果数组R,然后跳转到步骤D;
至此,经过步骤A到步骤F,完成了一种自适应的时间序列数据查询方法。
有益效果
本发明一种基于摘要的时间序列数据索引构建方法采用了一种树状索引结构来组织并存储拟合后的时间序列数据摘要,实现了一种自适应的可视化方法,与现有索引构建及查询的可视化方法相比,具有如下有益效果:
1.本发明所提出的方法在树状索引结构中保存可视化需要的特征变量,而且自根节点到叶子节点拟合误差越来越小,可以适应按不同误差查询的需要;
2.本发明所提出的方法可以实现增量式的可视化技术,即在给定的可视化响应时间延迟下,首先利用索引结构中上层节点的数据摘要信息返回一个粗糙的可视化结果,然后层层深入逐渐细化不满足误差要求的部分,最终达到符合用户查询要求,返回查询结果数据量小,从查询到展现结果的时间延迟小;
3.本发明所提出的方法可以按照不同查询精度返回查询结果,从多角度展现时间序列数据,可以应用于统计分析、数据挖掘、监控分析等针对时间序列数据分析的领域。
附图说明
图1为本发明一种基于摘要的时间序列数据索引构建方法的及实施例1中索引构建的流程示意图;
图2为本发明一种基于摘要的时间序列数据索引构建方法中利用索引进行自适应的时间序列数据查询及实施例1中查询可视化的流程示意图;
图3为本发明一种基于摘要的时间序列数据索引构建方法中对应的树状索引结构示意图及实施例1中构建的索引结构;
其中,图3中箭头代表指针,指向对应节点的位置,Null代表空指针,表明当前节点右边不存在节点。
具体实施方式
下面根据附图及实施例对本发明进行详细说明,但本发明的具体实施形式并不局限于此。
实施例1
本实施例详细阐述了本发明一种基于摘要的时间序列数据索引构建方法应用于股票数据时,首先采用索引构建算法构建数据索引,然后基于构建的索引结构利用一种自适应的时间序列数据查询算法进行查询可视化的流程。
实例中采用的时间序列数据T={9.33、9.91、10、10.43、10.48、10.32、10.68、11.11、11.16、11.26、11.43、11.63、11.89、11.67、11.54、11.34、11.22、10.79、11.07、11.1、10.69、10.98、10.92、10.92、10.92、10.08、10.56、10.58、11.27、12.46、12.49、12.51、12.6、12.53、12.15、12.72、12.81、12.8、12.51、12.65},对应的时刻从1到40。
图1为本发明一种基于摘要的时间序列数据索引构建方法的及本实施例中索引构建的流程示意图;从图中可看出,索引构建包含如下步骤:
步骤一:基于时间序列数据,初始化系统参数;
具体到本实例,时间序列标号i可以是从1到40的整数,由于时间序列数据T整体方差比偏小,因此设置段最大误差ε=0.2,树状索引结构中间节点的子节点个数基准B=3;时间序列片段数组U,初始化为空;保存索引结构时初始化内存缓冲区的大小为X=100兆字节;
步骤二:对时间序列数据进行分段,输出时间序列片段并保存到时间序列片段数组中;
步骤三:采用拟合函数对上一步骤输出的每一段时间序列片段进行拟合,得到每一段时间序列片段的数据摘要信息;
具体到本实例实施,对时间序列片段数组U中的每一项,采用线性回归的方法进行线性拟合,同时记录每一个时间序列片段的开始时刻ts和结束时刻te以及开始时刻的值vs和结束时刻的值ve,计算拟合误差e,每一时刻的值累加后的和M,每一时刻和该时刻的值相乘后累加的和P,形成该时间序列片段的数据摘要信息经过步骤三,最终形成了10个时间序列片段的数据摘要信息:
{1,9.41,4,10.43,0.01,39.67,100.87}、{5,10.40,7,10.59,0.02,31.48,189.08}、
{8,11.07,14,11.83,0.01,80.15,885.16}、{15,11.58,18,10.87,0.005,44.89,739.5}、
{19,11.06,22,10.86,0.02,43.84,898.38}、{23,10.92,25,10.92,0,32.76,786.24}、
{26,10.08,29,11.16,0.02,42.49,1170.27}、{30,12.47,34,12.57,0.001,62.59,2003.13}、
{35,12.23,37,12.89,0.01,37.68,1357.14}、{38,12.72,40,12.57,0.01,37.96,1480.29}
步骤四:利用上一步骤得到的数据摘要信息,构建树状索引结构;
具体到本实例实施,将收到步骤三的数据摘要信息转化为10个最底层的子节点,同时利用10个最底层的子节点生成第二层的3个节点,第二层的3个节点合并形成1个根节点。生成树状索引结构如图3,第一层节点称为根节点,第二层称为中间节点,最下面的子节点叫做叶子节点;根节点和中间节点具有相似结构,节点中第一层两个数分别代表开始时刻和开始时刻的值,第二层两个数分别代表结束时刻和结束时刻的值,第三层左边的值表示节点的拟合误差,右边的值表示右边相邻的节点指针,Null表示空,表示当前节点的右边没有节点,第四层表示子节点的索引,第五层表示对应子节点的指针,方便读取子节点;叶子节点的结构只有三层,第一层两个值分别对应开始时刻和开始时刻的值,第二层两个值分别对应结束时刻和结束时刻的值,第三层左边的值表示节点的拟合误差,右边的值用来表示右边相邻的节点指针,Null表示当前节点右边没有节点;
步骤五:保存上一步骤生成的树状索引结构;;
具体到本实例实施,当树状索引结构在内存中构建完成后,把它保存到硬盘中,保存时需要对整数进行压缩,采用变长存储的方法;
至此,从步骤一到五,完成了本实例一种基于摘要的时间序列数据索引构建方法。
当需要查询可视化时,按照一种自适应的时间序列数据查询方法进行可视化查询。图2为一种自适应的时间序列数据查询方法的流程图以及本实施例的查询可视化流程图;从图中可看出,查询可视化包含如下步骤:
步骤I:将步骤五保存的树状索引结构的上半部分读入内存,构造查询语句,初始化查询结果数组和数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟以及查询时深入查找一层所需要的时间;;
具体到本实例实施,将树结构的根节点和第二层中间节点读入内存中;同时构建查询语句q=select*from dateset where time>1 and time<29and error<0.1,其中Qs表示查询范围的开始时刻,Qs=1,Qe表示查询范围的结束时刻,Qe=29,Qerror表示查询误差,Qerror=0.1,并且初始化查询结果数组R为空,把数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟设置为L=0.01ms,查询时深入查找一层所需要的时间c=0.001ms;
步骤II:基于步骤I的查询语句查找包含查询范围的开始时刻的节点,同时保证查询时延小于用户要求的最大时延,返回包含查询范围的开始时刻的节点;
步骤III:根据包含查询范围的开始时刻的节点,将满足查询范围要求的所有节点加入查询结果数组中,并输出查询结果数组;
步骤IV:将查询结果数组中的数据展示出来;
具体到本实例实施,首先判断判断查询结果数组R是否有变化,查询结果数组R存在变化,同时查询结果数组中第一个节点的开始时刻和最后一个节点的结束时刻和查询范围的开始时刻和结束时刻一致,所以把时间作为横坐标,把对应的值作为纵坐标,建立直角坐标系,将查询结果数组R中所有节点的开始时刻和结束时刻对应的点,用直线相连,可视化展现出来;
步骤V:依次遍历查询结果数组中的每一个节点,判断查询结果数组中是否有不满足查询误差要求需要细化查询的节点,返回不满足查询误差要求的节点和细化查询的查询语句;
具体到本实例实施,查询结果数组R中两个节点的拟合误差都小于查询误差Qerror=0.1,满足查询误差要求,不需要细化查询,至此完成了本方法;
至此,从步骤I到V,完成了基于本专利一种基于摘要的时间序列数据索引构建方法的自适应数据查询。
实施例2
本实例按照实施例1中所述参数,具体阐述了本发明步骤4中构建树状索引结构的算法及实施例1中的步骤四的执行流程。
具体流程为:根据下一层节点,采用自下而上的方法,合并产生上一层节点,自下而上构建根树状索引结构。
具体到本实例实施中,由最底层节点,即叶子层节点合并产生中间层节点的流程如下:
步骤4):利用步骤3)得到的数据摘要信息,构建树状索引结构;;
上一步骤传来的数据为10时间序列片段的数据摘要信息,记为Nj,下标j表示对应时间序列片段的顺序,是从1到10的整数;
步骤4).1:顺序读取一个下一层节点到数据缓冲区中,数据缓冲区用来暂时保存读到的节点数据,判断节点数据的数量,并进行相应操作:
4).1A:当数据缓冲区节点数量达到2*B即6个时,跳至步骤4).2;
4).1B:当数据缓冲区节点数量不足2*B即6个时,且读取的节点不是最后一个节点时,跳回步骤4).1;否则,若数据缓冲区节点数量不足2*B即6个时,且读取的节点是最后一个节点,跳转至步骤4).5;
具体到本实例实施,数据缓冲区,记为Date,不断循环执行步骤4).1,直到数据缓冲区中节点数量达到6个Date={N1,N2,N3,N4,N5,N6}时,执行步骤4).2,其中Nl代表下一层中的节点,下标l表示下一层的第l个节点,l是大于0的整数;
步骤4).2:按照合并相邻两个节点为一个节点,将合并产生节点的拟合误差作为合并代价的方式,计算数据缓冲区中合并任意两个相邻节点的合并代价,采用自下而上的方式,选择合并代价最小的两个节点合并产生一个合并节点;
具体到本实例实施,首先计算N1和N2的合并代价,N1={1,9.41,4,10.43,0.01,39.67,100.87}和N2={5,10.40,7,10.59,0.02,31.48,189.08},其中节点Nl包含7个值,分别是节点的开始时刻ts、开始时刻的值vs、结束时刻te、结束时刻的值ve、拟合误差e、对应时间序列片段各个时刻值的累加和M、对应时间序列片段每一时刻和对应的值乘积的累加和P;
由公式(12)可知由N1和N2合并产生的合并节点的拟合误差ea=0.02,把这个拟合误差记作合并N1和N2的代价,按照同样的计算方式可以计算合并N2和N3的、N3和N4、N4和N5、N5和N6的代价分别为0.011、0.078、0.019、0.004;比较合并不同节点的误差,发现合并N5和N6的代价最小,因此首先合并N5和N6,合并节点记为N5+6,下标5+6表示合并节点是由N5和N6合并产生的;
步骤4).3:将步骤4).2中选择出来的合并代价最小的两个节点用合并节点替换,判断节点数量并进行相应的操作:
4).3A:当数据缓冲区中节点的数量大于2时,跳转回步骤4).2;
4).3B:当数据缓冲区中只剩下2个节点时,将合并产生数据缓冲区中第1个节点的下一层节点数量记为C1,其中下标1代表数据缓冲区中第一个节点;
具体到本实例实施,用N5+6替换数据缓冲区Date中的N5和N6,然后跳转回步骤4).2,不断循环自下而上的合并,最终数据缓冲区中剩下两个时间序列段节点,第一节点由最初读入的N1,N2,N3合并形成,第二个节点由最初读取到的N4,N5,N6合并形成;
步骤4).4:保存数据缓冲区中的第一个节点为上一层节点;然后,清空数据缓冲区;再将合并产生第2个节点的2*B-C1个下一层节点读入数据缓冲区,然后跳转回步骤4).1;
具体到本实例实施,将N1,N2,N3合并后的节点当作中间层的第一个节点保存,把缓冲区置空,把合并形成第二个节点的N4,N5,N6读入数据缓冲区,然后继续按照步骤4).1读取N7,N8,N9,然后自下而上合并,最终由N4,N5,N6,N7合并产生了中间层的第二个节点,数据缓冲区中现在只剩下了N8,N9然后继续步骤4).1读取最后一个N10,数据缓冲区不足6个,跳转至步骤4).5;
步骤4).5:将数据缓冲区中小于6个的节点合并成一个上一层节点
至此,缓冲区中只剩下N8,N9,N10,将这三个节点合并产生中间层的第三个节点;由叶子层合并产生了中间层的三个节点;
步骤4).6:在上一层节点中添加指针和子节点的索引,指向对应的子节点,同时在每一层节点上都添加右指针,指向右边相邻的节点。
按照同样的流程将中间层作为下一层,合并产生根节点,最终生成的树状索引结构如图3,树中分为三层,包括根节点,中间层和叶子层。
由本实例构建的树状索引结构可以看出,树中节点自上而下的拟合误差越来越小,可以实现按照不同的精度查询,从多层次展现时间序列数据,很好支持增量式查询。
由本实例构建的树状索引结构可以看出,树中节点自上而下的拟合误差越来越小,便于按照不同的精度返回查询结果,可以从多层次展现时间序列数据。
实施例3
本实例按照实施例1所述的参数及实施例2中所构建的索引结构,具体阐述利用本发明构建索引结构的一种自适应的时间序列数据查询算法中从步骤A到步骤F增量式查询过程。
具体到本实例实施,按照下面的流程:
步骤(1):将基于步骤5保存的树状索引结构的上半部分读入内存,构造查询语句,初始化查询结果数组和数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟以及查询时深入查找一层所需要的时间;
具体到本实例实施,索引结构如图3,有三层结构,首先将树状索引结构的根节点和第二层中间节点读入内存中;同时构建查询语句q=select*from dateset where time>10 and time<20 and error<0.02其中Qs=10,Qe=20,Qerror=0.02,并且初始化查询结果数组R为空;把数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟设置为L=0.01ms;查询时深入查找一层所需要的时间c=0.005ms;
步骤(2):基于步骤(1)的查询语句查找包含查询范围的开始时刻的节点,同时保证查询时延小于用户要求的最大时延,返回包含查询范围的开始时刻的节点;
具体到本实例实施,在树状索引结构上查找包含查询范围的开始时刻的节点,并返回,把树状索引结构的节点记为下标r表示第r层,对应树中根节点为第1层,中间层为第2层,叶子节点为第3层;上标t表示节点在每一层中从左到右的顺序,t是大于等于1的整数;按照步骤(2)的流程查找包含查询范围的开始时刻的节点,如下:
步骤(2).1:计算查询时可以查找的最大深度;
具体到本实例实施,查询时可以查找的最大深度h=L/c=0.01/0.005=2;
步骤(2).2:读取根节点,判断根节点是否包含查询范围的开始时刻,并根据判断结果返回节点,进行相应操作:
具体到本实例实施,根节点的时间范围是1-40,包含查询范围10-20.则继续步骤(2).3;
步骤(2).3:读取步骤(2).2返回节点,记为当前节点,并判断当前节点的拟合误差是否满足查询误差要求并进行相应操作,具体为:
(2).3.1:如果当前节点的拟合误差小于等于查询误差Qerror,返回当前节点,然后继续步骤(3);
(2).3.2:如果当前节点的拟合误差大于查询误差Qerror,继续步骤(2).4;
其中,查询误差要求是指是节点的拟合误差要小于等于查询误差Qerror;
步骤(2).4:计算目前的查询深度;
查询深度根据步骤(2).3中的节点在树状索引结构上的位置计算,在最上层根节点时,代表查询深度为1,自上而下每深入一层,查询深度加1;
步骤(2).5:根据步骤(2).4计算的目前查询深度判断是否可以继续深入查询,具体为:
(2).5.1:如果目前的查询深度小于h,则根据步骤(2).2中节点的子节点索引,读取包含查询范围开始时刻的子节点作为根节点,跳至步骤(2).2;
(2).5.2:如果目前的查询深度大于等于h,则返回步骤(2).2中的节点,然后跳至步骤(3);
具体到本实例实施,目前查询深度为1小于h=2,可以继续查找,根据孩子节点的索引,读取的孩子节点把作为根节点继续按照步骤(2).2查询;步骤同上,经过步骤(2).2和步骤(2).3的判断,符合查询要求,将返回;
步骤(3):根据包含查询范围的开始时刻的节点,将满足查询范围要求的所有节点加入查询结果数组中,并输出查询结果数组,具体为:
步骤(3).1:读取包含查询范围的开始时刻的节点,并更新当前节点为此节点;
步骤(3).2:判断当前节点是否满足查询范围,把满足查询范围要求的节点加入查询结果数组中;
(3).2.1:如果当前节点的结束时间时刻,小于查询范围的结束时刻Qe,将当前节点加入查询结果数组R中,并读取当前节点的右指针指向的节点作为当前节点,然后继续步骤(3).2;
(3).2.2:如果当前节点的结束时刻大于等于查询范围的结束时刻,将当前节点加入查询结果数组R中,结束查询,继续执行步骤(4);
其中,满足查询范围要求是指节点开始时刻和结束时刻之间覆盖的时间范围和查询范围的开始时刻和查询范围的结束时刻之间覆盖的时间范围存在交集;
具体到本实例实施,节点的结束时刻小于查询范围的结束时刻20,因此把赋值给R[0],根据R[0]的右指针,读取第二层中间节点的第二个节点,记为作为当前节点继续步骤(3).2,经过步骤(3).2的判断,的结束时间大于查询结束时间20,因此将赋值给R[1],继续执行步骤(4);
步骤(4):将查询结果数组中的数据展示出来;
具体到本实例实施,按照下面的流程执行:
步骤(4).1:判断查询结果数组R是否有更新,并根据判断结果决定是否进行可视化展现:
(4).1.1:若查询结果数组R上存在更新,跳至步骤(4).2;
(4).1.2:若查询结果数组R上不存在更新,跳至步骤(5);
具体到本实例实施,R上存在更新,继续步骤(4).2;
步骤(4).2:判断查询结果数组R中第一个节点R[0]的开始时刻与查询范围的开始时刻是否一致,更新不一致情况下查询结果数组R中第一个节点的开始时刻和开始时刻的值;
(4).2.1:如果判断结果一致,则跳至步骤(4).3;
(4).2.2:若判断结果不一致,即R[0]节点开始时刻小于查询范围的开始时刻Qs,则以R[0]节点开始时刻和结束时刻的值为横坐标,R[0]节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,再根据拟合后的直线求出查询范围开始时刻对应的值,用查询范围的开始时刻和计算出查询范围开始时刻的值替换R[0]节点的开始时刻和开始时刻的值,然后,继续步骤(4).3;
在本实例实施中,R[0]从开始时刻为1,而查询开始时刻为10,不一致,则以R[0]节点开始时刻和结束时刻的值为横坐标,R[0]节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,计算出直线的函数表达式,记为Fs(t),表示为公式(21):
Fs(t)=0.1777t+9.4723 (21)
其中t表示时刻,是从1到14的整数。通过公式(21)可以得到开始的时刻的值Fs(10)=11.25,将10和11.25替换R[0]节点的开始时刻和开始时刻的值,然后继续步骤(4).3;
步骤(4).3:判断查询结果数组中最后一个节点的结束时刻是否与查询范围的结束时刻是否一致,更新不一致情况下查询结果数组R中最后一个节点的结束时刻和结束时刻的值;
(4).3.1:如果判断结果一致,则跳至步骤(4).4;
(4).3.2:如果查询结果数组中最后一个节点的结束时刻大于查询的结束时刻Qe,则以查询结果数组中最后一个节点的开始时刻和结束时刻的值为横坐标,查询结果数组中最后一个节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,根据拟合后的直线求出查询范围的结束时刻对应的值,用查询范围的结束时刻和计算出查询范围结束时刻的值替换查询结果数组中最后一个节点的结束时刻和结束时刻的值,然后继续步骤(4).4;
在本实例实施中,R[1]结束时刻为29,而查询结束时刻为20,不一致,则需要按照R[1]的开始时刻和结束时刻的值为横坐标,查询结果数组中最后一个节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,计算出直线的函数表达式,记为Fe(t),表示为公式(22):
Fe(t)=-0.047t+11.965 (22)
其中t表示时刻,是从15到29的整数。通过公式(22)可以得到结束的时刻的值Fe(20)=10.39,将20和10.39替换R[1]节点的开始时刻和开始时刻的值,然后,继续步骤(4).4;
步骤(4).4:以时间作为横坐标,以对应的值作为纵坐标,建立直角坐标系,将查询结果数组R中所有节点的开始时刻和结束时刻对应的点,用直线相连,可视化展现出来;
在本实例实施中,可视化时以时间作为横轴,对应的值作为纵轴,建立坐标系,将节点对应的点用直线相连;查询结果数组中目前对应的4个点的坐标分别是(10,11.25)、(14,11.96)、(15,11.26)、(20,10.39),其中每个坐标第一个值对应横轴,第二个值对应纵轴;
步骤(5):依次遍历查询结果数组中的每一个节点,判断查询结果数组中是否有不满足查询误差要求需要细化查询的节点,返回不满足查询误差要求的节点和细化查询的查询语句;
具体到本实例实施,按照下面的流程执行:
步骤(5).1:顺序读取查询结果数组R中的一个节点,判断读取到的节点拟合误差和查询误差的关系,返回不满足查询误差要求的节点和细化查询的查询语句;
(5).1.1:如果读取到的节点的拟合误差大于查询误差Qerror,则重新构造查询语句q,如果此次读取到的节点的开始时刻比查询范围的开始时刻Qs小,查询语句q的查询范围的开始时刻Qs不变,否则q的查询范围的开始时刻Qs设置为此次读取到的节点的开始时刻;如果此次读取到的节点的结束时刻比查询语句q查询范围的结束时刻Qe大,则q的查询范围的结束时刻Qe不变,否则q的查询范围的结束时刻Qe设置为此次读取到的节点的结束时刻;查询误差Qerror保持不变;然后返回此次读取到的节点和查询语句q,跳转至步骤(6);
(5).1.2:如果读取到的节点的拟合误差小于等于查询误差Qerror,且不是最后一个节点,继续步骤(5).1;如果读取到的节点的拟合误差小于等于查询误差Qerror,且是最后一个节点,跳转到步骤(5).2;
具体到本实例实施,查询结果数组R中第一个节点拟合误差小于等于0.02,第二个节点R[1]拟合误差为0.07大于0.02,所以遍历到第二个节点时,重新构造查询语句q=select*from dateset where time>15 and time<20 and error<0.02,将和q返回,继续步骤(6);
步骤(6):根据步骤(5)中返回的节点和查询语句,进行细化查询并更新查询结果数组;
具体到本实例实施,按照下面的流程执行:
步骤(6).1:在步骤(1)读入内存的树状索引结构中,找到步骤(5)中返回的节点并根据找到节点的子节点索引,读取包含q中查询范围开始时刻的子节点;
步骤(6).2:判断读取到的子节点的拟合误差是否满足查询误差要求,并根据判断结果进行如下操作:
(6).2.1:如果子节点的拟合误差小于等于查询语句q中查询误差Qerror,初始化一个结果缓冲区,暂时保存读取到的子节点,按照子节点的右指针连续读取查询语句q查找范围内包含的所有节点,依次放入结果缓冲区中,然后跳转至步骤(6).3;
(6).2.2:如果子节点的拟合误差大于查询语句q中查询误差Qerror,将当前读取到的子节点当作步骤(5)返回的节点,跳转至步骤(6).1;
步骤(6).3:将查询结果数组R中步骤(6)返回的节点用结果缓冲区的节点替换,更新查询结果数组R,然后跳转到步骤(4);
具体到本实例实施,将R中节点用和节点替换,然后跳转至步骤(4),按照步骤(4)再次执行,此时查询结果数组R对应的可视化的6个点的坐标分别是(10,11.25)、(14,11.96)、(15,11.58)、(18,10.87)、(19,11.06)、(20,10.99),经过步骤(5)判断,每个节点都满足查询误差要求,结束查询。
至此,从步骤(1)到(6)完成了本实例一种自适应的时间序列数据可视化查询算法中增量式查询过程。
由本实例实施的查询可视化流程可以看出本发明可以支持增量式的可视化技术,确保在用户要求的时间延迟前,返回可视化结果,保证了查询的效率,而且在展现可视化结果时,支持渐进式不断细化的方式,保证了展示结果的精度,同时与返回查询时间范围内所有的原始数据相比,本方法只返回节点数据,数据量小,尤其是在查询时间范围比较大的查询时,效果更加明显。
实施例4
将实施例1中的股票数据改成网络流量数据,交通路口通过车辆数据等其他任意类型的时间序列数据,本发明所提出的一种基于摘要的时间序列数据索引构建方法仍然有效。
上述实施方式未述及的有关技术采用或借鉴已有的技术即可实现。
以上所述为本发明的较佳实施例而已,本发明不应该局限于该实施例和附图所公开的内容。凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。
Claims (4)
1.一种基于摘要的时间序列数据索引构建方法,其特征在于:是将时间序列数据分成小的时间片段,然后用线性拟合的方法压缩表示每个时间片段以形成该片段的摘要,对于压缩后的摘要数据构建树状索引结构;当需要可视化查询时,基于构建的索引结构采用增量式可视化技术而且索引结构建立一次,可供多次查询使用,通过以下步骤实现:
步骤1:基于时间序列数据,初始化系统参数;
其中,系统参数包括时间序列标号、分段最大误差以及树状索引结构中间节点的子节点个数基准、时间序列片段数组以及保存索引结构时初始化内存缓冲区的大小;
其中,时间序列标号,记为i,代表时间序列数据T中第i个时刻,此第i个时刻的值记为vi,第i时刻记为ti,下标i是大于等于0的整数;将原始时间序列分段时最大的误差,即分段最大误差记为ε;树状索引结构中间节点的子节点个数基准记为B,B是一个大于0的整数;时间序列片段数组,记为U,初始化为空;保存索引结构时初始化内存缓冲区的大小,记为X,单位是兆字节;
步骤2:对时间序列数据进行分段,输出时间序列片段并保存到时间序列片段数组中;
步骤3:采用拟合函数对步骤2输出的每一段时间序列片段进行拟合,得到每一段时间序列片段的数据摘要信息,具体为:
其中,ts和te分别代表时间序列片段的开始时刻和结束时刻,vs和ve分别表示ts时刻和te时刻的值,e代表用线性拟合后的直线代替时间序列数据产生的误差,即拟合误差,M代表每一时刻的值累加后的和,P代表每一时刻和该时刻的值相乘后累加的和;
vs根据公式(1)计算,ve根据公式(2)计算,e根据公式(3)计算,M根据公式(4)计算,P根据公式(5)计算;
vs=f(ts) (1)
其中,f(ts)代表ts时刻函数f(t)的值,f(t)代表拟合后直线的函数表达式,用公式(6)表示;
ve=f(te) (2)
其中,f(te)代表te时刻函数f(t)的值;
f(t)=ηt+θ (6)
其中η和θ分别为f(t)的拟合斜率和拟合偏置,分别用公式(7)和公式(8)计算:
步骤4:利用步骤3得到的数据摘要信息,构建树状索引结构,具体为:
步骤4将步骤3中每一项数据摘要信息,当作树中最底层节点,自下而上合并产生上层节点,构建树状索引结构;
其中,自下而上合并产生上层节点,即由下一层节点合并产生上一层节点的过程如下:
步骤4.1:顺序读取一个下一层节点到数据缓冲区中,数据缓冲区用来暂时保存读到的节点数据,判断节点数据的数量,并进行相应操作:
4.1A:当数据缓冲区节点数量达到2*B时,跳至步骤4.2;
4.1B:当数据缓冲区节点数量不足2*B且读取的节点不是最后一个节点时,跳回步骤4.1;否则,若数据缓冲区节点数量不足2*B且读取的节点是最后一个节点,跳转至步骤4.5;
步骤4.2:合并相邻两个节点为一个节点,将合并产生节点的拟合误差作为合并代价,计算数据缓冲区中合并任意两个相邻节点的合并代价,采用自下而上的方式,选择合并代价最小的两个节点合并,产生一个合并节点;
合并过程是将N1和N2的数据摘要信息计算出合并节点Na的数据摘要信息;
在公式(9)-(20)中,用下标k用来区分不同的节点,即用下标k用来区分不同的节点,即k为1时对应节点N1,k为2时对应节点N2,k为a时对应节点Na;和分别表示节点Nk对应的时间序列片段的开始时刻和结束时刻,和分别表示节点Nk对应的时间序列片段开始时刻的值和结束时刻的值,根据公式(9)计算,根据公式(10)计算;
其中,和分别代表时刻和时刻fa(t)的值,并分别记为和 和分别为节点Na数据摘要信息中的开始时刻和结束时刻,且节点Na的开始时刻为节点N1的开始时刻节点Na的结束时刻为节点N2的结束时刻fa(t)表示对和之间的时间序列片段采用线性回归拟合后直线的函数表达式,用公式(11)表示,
ea为节点Na的拟合误差,同时也看作为N1和N2的合并代价,拟合误差越小,合并代价越小,反之,拟合误差越大,合并代价越大,ea根据公式(12)计算;
其中,e1表示节点N1的拟合误差,e2表示节点N2的拟合误差;f1(t)表示对节点N1对应的时间序列片段,采用线性回归拟合后直线的函数表达式,f2(t)表示节点N2对应的时间序列片段,采用线性回归拟合后直线的函数表达式;表示节点N2对应的时间序列片段的开始时刻,表示节点N1对应的时间序列片段的结束时刻;θ1、θ2和θa分别是f1(t)、f2(t)和fa(t)的拟合偏置;η1和η2分别是f1(t)和f2(t)的拟合斜率;M1和M2分别表示节点N1和N2对应的时间序列片段每一时刻的值累加后的和,且Ma为节点N1中M1和节点N2中M2相加的和;P1和P2分别表示节点N1和N2对应时间序列片段每一时刻和对应的值相乘后累加的和;
f1(t)和f2(t)分别用公式(13)和公式(14)表示:
fa(t)、f1(t)和f2(t)的拟合斜率ηa、η1和η2分别用公式(15)、(16)和(17)表示:
n1根据公式(18)计算,n2根据公式(19)计算,na根据公式(20)计算;
步骤4.3:将步骤4.2中选择出来的合并代价最小的两个节点用合并节点替换,判断节点数量并进行相应的操作:
4.3A:当数据缓冲区中的节点数量大于2时,跳转回步骤4.2;
4.3B:当数据缓冲区中只剩下2个节点时,将合并产生数据缓冲区中第1个节点的下一层节点数量记为C1,其中下标1代表数据缓冲区中第一个节点;
步骤4.4:保存数据缓冲区中的第一个节点为上一层节点;然后,清空数据缓冲区;再将合并产生第2个节点的2*B-C1个下一层节点读入数据缓冲区,然后跳转回步骤4.1;
步骤4.5:将数据缓冲区中小于2*B个的节点合并成一个上一层节点;
步骤4.6:在上一层节点中添加指针和子节点的索引,指向对应的子节点,同时在每一层节点上都添加右指针,指向右边相邻的节点;
其中,上一层节点为父节点,合并产生上一层节点的下一层节点为对应父节点的子节点;上一层节点和下一层节点之间用指针来建立对应的父子关系;
步骤5:保存步骤4生成的树状索引结构。
2.根据权利要求1所述的一种基于摘要的时间序列数据索引构建方法,其特征在于:步骤2对时间序列数据进行分段具体使用旋转门算法将时间序列数据T作为旋转门算法的输入,将分段最大误差ε作为旋转门算法中的最大误差;旋转门算法输出的时间序列片段保存在时间序列片段数组U中;
采用旋转门算法进行不等间隔分段,分段结束后,时间序列数据变成了不等间隔的时间片段。
3.根据权利要求1所述的一种基于摘要的时间序列数据索引构建方法,其特征在于:步骤2对时间序列数据进行分段为按照等间隔分段。
4.根据权利要求1所述的一种基于摘要的时间序列数据索引构建方法,其特征在于:步骤5中,生成的树状索引保存在硬盘中的数据库中作为数据库的索引结构;将树状索引结构直接保存在硬盘中具体为:在内存中申请一个大小为X兆字节的缓冲区,保存步骤4中生成的树状索引结构;当缓冲区满时或者程序结束时,将缓冲区内的树状索引结构保存到文件中,在保存时对于整形实数采用变长存储,达到数据压缩的目的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710051558.6A CN106844664B (zh) | 2017-01-20 | 2017-01-20 | 一种基于摘要的时间序列数据索引构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710051558.6A CN106844664B (zh) | 2017-01-20 | 2017-01-20 | 一种基于摘要的时间序列数据索引构建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106844664A CN106844664A (zh) | 2017-06-13 |
CN106844664B true CN106844664B (zh) | 2020-04-17 |
Family
ID=59120312
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710051558.6A Active CN106844664B (zh) | 2017-01-20 | 2017-01-20 | 一种基于摘要的时间序列数据索引构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106844664B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241121A (zh) * | 2017-06-29 | 2019-01-18 | 阿里巴巴集团控股有限公司 | 时间序列数据的存储和查询方法、装置、系统及电子设备 |
CN108776704B (zh) * | 2018-06-12 | 2021-05-11 | 东方电子股份有限公司 | 一种基于回归分析的时序数据索引方法 |
CN110502541A (zh) * | 2019-07-26 | 2019-11-26 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
CN112685557A (zh) * | 2020-12-30 | 2021-04-20 | 北京久其软件股份有限公司 | 可视化信息资源管理方法及装置 |
CN113254451B (zh) * | 2021-06-01 | 2022-04-19 | 北京城市网邻信息技术有限公司 | 一种数据索引构建方法、装置、电子设备及存储介质 |
CN113378995B (zh) * | 2021-07-09 | 2024-03-12 | 中山大学 | 基于iDistance算法的不确定数据序列K近邻方法及系统 |
CN113360538B (zh) * | 2021-07-14 | 2024-04-09 | 国家电网有限公司 | 用能数据的时空汇聚与查询方法 |
CN114817651B (zh) * | 2022-06-24 | 2022-09-13 | 北京百度网讯科技有限公司 | 数据存储方法、数据查询方法、装置和设备 |
CN117573703B (zh) * | 2024-01-16 | 2024-04-09 | 科来网络技术股份有限公司 | 时序数据的通用检索方法、系统、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104216924A (zh) * | 2013-06-03 | 2014-12-17 | 肖瑞 | 基于趋势的时间序列索引 |
CN104794153A (zh) * | 2015-03-06 | 2015-07-22 | 河海大学 | 利用用户交互的相似水文过程搜索方法 |
-
2017
- 2017-01-20 CN CN201710051558.6A patent/CN106844664B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104216924A (zh) * | 2013-06-03 | 2014-12-17 | 肖瑞 | 基于趋势的时间序列索引 |
CN104794153A (zh) * | 2015-03-06 | 2015-07-22 | 河海大学 | 利用用户交互的相似水文过程搜索方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106844664A (zh) | 2017-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106844664B (zh) | 一种基于摘要的时间序列数据索引构建方法 | |
CN106844666B (zh) | 一种自适应的时间序列数据查询方法 | |
Bertini et al. | Quality metrics in high-dimensional data visualization: An overview and systematization | |
US7225200B2 (en) | Automatic data perspective generation for a target variable | |
US6778977B1 (en) | Method and system for creating a database table index using multiple processors | |
US9195699B2 (en) | Method and apparatus for storage and retrieval of information in compressed cubes | |
US8065262B2 (en) | Computer-implemented multidimensional database processing method and system | |
CN105488231B (zh) | 一种基于自适应表维度划分的大数据处理方法 | |
US6757686B1 (en) | Method and apparatus for representing database and query information using interval hash tree | |
CN1379887A (zh) | 用于分析和改善药物以及其他资本密集制造流程的系统 | |
CN110737805B (zh) | 图模型数据的处理方法、装置和终端设备 | |
Kwon et al. | Sampling for scalable visual analytics | |
CN110287382B (zh) | 一种面向电池生产数据的关联规则的挖掘方法 | |
CN105677837A (zh) | 一种关联规则的挖掘方法和关联规则的挖掘装置 | |
CN107153670A (zh) | 基于多幅图像融合的视频检索方法及系统 | |
CN106777130B (zh) | 一种索引生成方法、数据检索方法和装置 | |
Keim et al. | Visualization | |
KR100609022B1 (ko) | 공간관계와 주석을 이용한 이미지 검색 방법 | |
CN110580299A (zh) | 生成对象的推荐语的配图的方法、系统、设备及存储介质 | |
JP2003316819A (ja) | オブジェクト分類検索装置及びそれを実行するためのプログラム | |
CN106572394B (zh) | 一种影视数据导航方法 | |
CN111782658A (zh) | 交叉表处理方法、装置、电子设备及存储介质 | |
CN114969913B (zh) | 一种三维模型构件实例化方法、系统、设备及介质 | |
CN1326158A (zh) | 适用于多媒体内容的数据库构造方法 | |
Ageeli et al. | Multivariate Probabilistic Range Queries for Scalable Interactive 3D Visualization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CB03 | Change of inventor or designer information |
Inventor after: Zhang Lin Inventor after: Qu Dacheng Inventor after: Cao Chao Inventor before: Cao Chao Inventor before: Qu Dacheng Inventor before: Zhang Lin |
|
CB03 | Change of inventor or designer information |