CN106844666B - 一种自适应的时间序列数据查询方法 - Google Patents
一种自适应的时间序列数据查询方法 Download PDFInfo
- Publication number
- CN106844666B CN106844666B CN201710051701.1A CN201710051701A CN106844666B CN 106844666 B CN106844666 B CN 106844666B CN 201710051701 A CN201710051701 A CN 201710051701A CN 106844666 B CN106844666 B CN 106844666B
- Authority
- CN
- China
- Prior art keywords
- query
- node
- time
- error
- nodes
- 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/248—Presentation of query results
-
- 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/2272—Management thereof
-
- 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/2453—Query optimisation
-
- 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
- G06F16/24553—Query execution of query operations
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:建立基于摘要的时间序列数据树状索引结构,具体包括:
步骤1.1基于时间序列数据,初始化系统参数;
其中,系统参数包括时间序列标号、分段最大误差以及树状索引结构中间节点的子节点个数基准、时间序列片段数组;
其中,时间序列标号,记为i,代表时间序列数据T中第i个时刻,此第i个时刻的值记为vi,第i时刻记为ti,下标i是大于等于0的整数;将原始时间序列分段时最大的误差,即分段最大误差记为ε;树状索引结构中间节点的子节点个数基准记为B,B是一个大于0的整数;时间序列片段数组,记为U,初始化为空;
步骤1.2:对时间序列数据进行分段,输出时间序列片段并保存到时间序列片段数组中;对时间序列数据进行分段可以按照等间隔分段,还可以按照不等间隔分段;
步骤1.3:采用拟合函数对步骤1.2输出的每一段时间序列片段进行拟合,得到每一段时间序列片段的数据摘要信息;
将步骤1.2输出结果,时间序列片段数组U中的每一项采用线性回归进行拟合,并记录每一项的数据摘要信息 下标j对应时间序列片段在U中的顺序,j是大于0小于|U|的整数,|U|代表数组U的长度;ts和te分别代表时间序列片段的开始时刻和结束时刻,vs和ve分别表示ts时刻和te时刻的值,e代表用线性拟合后的直线代替时间序列数据产生的误差,即拟合误差,M代表每一时刻的值累加后的和,P代表每一时刻和该时刻的值相乘后累加的和;
步骤1.4:利用步骤1.3得到的数据摘要,构建树状索引结构;
具体为:将步骤1.3中每一项数据摘要信息,当作树中最底层节点,自下而上合并产生上层节点,构建树状索引结构;其中,自下而上合并产生上层节点,即由下一层节点合并产生上一层节点;
步骤2:将基于步骤1建立的时间序列树状索引结构的上半部分读入内存,构造查询语句,初始化查询结果数组和数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟以及查询时深入查找一层所需要的时间;
其中,树状索引结构的上半部分,具体为树状索引结构中除了最底层子节点外的其他部分;查询语句为:
q=select*from dateset where time>Qs and time<Qe and error<Qerror,
其中,Qs代表查询范围的开始时刻,Qe代表查询范围的结束时刻,Qerror代表查询结果允许的最大误差,即查询误差,表示查询在Qs和Qe时刻之间的数据,并且误差要小于等于Qerror;初始化查询结果数组R为空;把数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟,记为L;查询时深入查找一层所需要的时间,记为c;
步骤3:基于步骤2的查询语句查找包含查询范围的开始时刻的节点,同时保证查询时延小于用户要求的最大时延,返回包含查询范围的开始时刻的节点;
具体步骤如下:
步骤3.1:计算查询时可以查找的最大深度;
其中,查询时可以查找的最大深度记为h,h=L/c;
步骤3.2:读取根节点,判断根节点是否包含查询范围的开始时刻,并根据判断结果返回节点,进行相应操作:
3.21:若根节点包含查询范围的开始时刻,返回当前判断的根节点,跳至步骤3.3;
3.22:若根节点不包含查询范围的开始时刻,则读取根节点的右指针指向的节点作为根节点,跳转到步骤3.2;
步骤3.3:读取步骤3.2返回节点,记为当前节点,并判断当前节点的拟合误差是否满足查询误差要求并进行相应操作,具体为:
3.3.1:如果当前节点的拟合误差小于等于查询误差Qerror,返回当前节点,然后继续步骤4;
3.3.2:如果当前节点的拟合误差大于查询误差Qerror,继续步骤3.4;
其中,查询误差要求是指是节点的拟合误差要小于等于查询误差Qerror;
步骤3.4:计算目前的查询深度;
查询深度根据步骤3.3中的节点在树状索引结构上的位置计算,在最上层根节点时,代表查询深度为1,自上而下每深入一层,查询深度加1;
步骤3.5:根据步骤3.4计算的目前查询深度判断是否可以继续深入查询,具体为:
3.5.1:如果目前的查询深度小于h,则根据步骤3.2中节点的子节点索引,读取包含查询范围开始时刻的子节点作为根节点,跳至步骤3.2;
3.5.2:如果目前的查询深度大于等于h,则返回步骤3.2中的节点,然后跳至步骤4;
步骤4:根据包含查询范围的开始时刻的节点,将满足查询范围要求的所有节点加入查询结果数组中,并输出查询结果数组,具体为:
步骤4.1:读取包含查询范围的开始时刻的节点,并更新当前节点为此节点;
步骤4.2:判断当前节点是否满足查询范围,把满足查询范围要求的节点加入查询结果数组中;
4.2.1:如果当前节点的结束时间时刻,小于查询范围的结束时刻Qe,将当前节点加入查询结果数组R中,并读取当前节点的右指针指向的节点作为当前节点,然后继续步骤4.2;
4.2.2:如果当前节点的结束时刻大于等于查询范围的结束时刻,将当前节点加入查询结果数组R中,结束查询,继续执行步骤5;
其中,满足查询范围要求是指节点开始时刻和结束时刻之间覆盖的时间范围和查询范围的开始时刻和查询范围的结束时刻之间覆盖的时间范围存在交集;
步骤5:将查询结果数组中的数据展示出来,具体为:
步骤5.1:判断查询结果数组R是否有更新,并根据判断结果决定是否进行可视化展现:
5.1.1:若查询结果数组R上存在更新,跳至步骤5.2;
5.1.2:若查询结果数组R上不存在更新,跳至步骤6;
步骤5.2:判断查询结果数组R中第一个节点R[0]的开始时刻与查询范围的开始时刻是否一致,更新不一致情况下查询结果数组R中第一个节点的开始时刻和开始时刻的值;
5.2.1:如果判断结果一致,则跳至步骤5.3;
5.2.2:若判断结果不一致,即R[0]节点开始时刻小于查询范围的开始时刻Qs,则以R[0]节点开始时刻和结束时刻的值为横坐标,R[0]节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,再根据拟合后的直线求出查询范围开始时刻对应的值,用查询范围的开始时刻和计算出查询范围开始时刻的值替换R[0]节点的开始时刻和开始时刻的值,然后,继续步骤5.3;
步骤5.3:判断查询结果数组中最后一个节点的结束时刻是否与查询范围的结束时刻是否一致,更新不一致情况下查询结果数组R中最后一个节点的结束时刻和结束时刻的值;
5.3.1:如果判断结果一致,则跳至步骤5.4;
5.3.2:如果查询结果数组中最后一个节点的结束时刻大于查询的结束时刻Qe,则以查询结果数组中最后一个节点的开始时刻和结束时刻的值为横坐标,查询结果数组中最后一个节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,根据拟合后的直线求出查询范围的结束时刻对应的值,用查询范围的结束时刻和计算出查询范围结束时刻的值替换查询结果数组中最后一个节点的结束时刻和结束时刻的值,然后继续步骤5.4;
步骤5.4:以时间作为横坐标,以对应的值作为纵坐标,建立直角坐标系,将查询结果数组R中所有节点的开始时刻和结束时刻对应的点,用直线相连,可视化展现出来;
步骤6:依次遍历查询结果数组中的每一个节点,判断查询结果数组中是否有不满足查询误差要求需要细化查询的节点,返回不满足查询误差要求的节点和细化查询的查询语句;
具体步骤如下:
步骤6.1:顺序读取查询结果数组R中的一个节点,判断读取到的节点拟合误差和查询误差的关系,返回不满足查询误差要求的节点和细化查询的查询语句;
6.1.1:如果读取到的节点的拟合误差大于查询误差Qerror,则重新构造查询语句q,如果此次读取到的节点的开始时刻比查询范围的开始时刻Qs小,查询语句q的查询范围的开始时刻Qs不变,否则q的查询范围的开始时刻Qs设置为此次读取到的节点的开始时刻;如果此次读取到的节点的结束时刻比查询语句q查询范围的结束时刻Qe大,则q的查询范围的结束时刻Qe不变,否则q的查询范围的结束时刻Qe设置为此次读取到的节点的结束时刻;查询误差Qerror保持不变;然后返回此次读取到的节点和查询语句q,跳转至步骤7;
6.1.2:如果读取到的节点的拟合误差小于等于查询误差Qerror,且不是最后一个节点,继续步骤6.1;如果读取到的节点的拟合误差小于等于查询误差Qerror,且是最后一个节点,跳转到步骤6.2;
步骤6.2:查询结果数组中所有的节点的拟合误差都小于等于查询误差Qerror,满足查询误差要求,结束查询;
步骤7:根据步骤6中返回的节点和查询语句,进行细化查询并更新查询结果数组,具体为:
步骤7.1:在步骤2读入内存的树状索引结构中,找到步骤6中返回的节点并根据找到节点的子节点索引,读取包含q中查询范围开始时刻的子节点;
步骤7.2:判断读取到的子节点的拟合误差是否满足查询误差要求,并根据判断结果进行如下操作:
7.2.1:如果子节点的拟合误差小于等于查询语句q中查询误差Qerror,初始化一个结果缓冲区,暂时保存读取到的子节点,按照子节点的右指针连续读取查询语句q查找范围内包含的所有节点,依次放入结果缓冲区中,然后跳转至步骤7.3;
7.2.2:如果子节点的拟合误差大于查询语句q中查询误差Qerror,将当前读
取到的子节点当作步骤6返回的节点,跳转至步骤7.1;
步骤7.3:将查询结果数组R中步骤6返回的节点用结果缓冲区的节点替换,更新查询结果数组R,然后跳转到步骤5;
至此,经过步骤1到步骤7,完成了一种自适应的时间序列数据查询方法。
有益效果
本发明一种自适应的时间序列数据查询方法基于一种树状索引结构来组织并存储拟合后的时间序列数据摘要,实现了一种自适应的可视化方法,与现有索引构建及查询的可视化方法相比,具有如下有益效果:
1.本发明所提出的方法利用树状索引结构层层深入查询,而且自根节点到叶子节点拟合误差越来越小,可以适应按不同误差查询的需要;
2.本发明所提出的方法采用了增量式的可视化技术,即在给定的可视化响应时间延迟下,首先立即返回一个粗糙的可视化结果,然后逐渐细化不满足误差要求的部分,最终达到符合用户查询要求,返回查询结果数据量小,从查询到展现结果的时间延迟小;
3.本发明所提出的方法可以按照不同查询精度返回查询结果,从多角度展现时间序列数据,可以应用于统计分析、数据挖掘、监控分析等针对时间序列数据分析的领域。
附图说明
图1为本发明一种自适应的时间序列数据查询方法及实施例1中数据查询的流程示意图;
图2为本发明一种自适应的时间序列数据查询方法中对应的树状索引结构示意图及实施例中构建的索引结构;
其中,图2中箭头代表指针,指向对应节点的位置,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为本发明一种自适应的时间序列数据查询方法及本实施例中数据查询的流程示意图;从图中可看出,包含如下步骤:
步骤A:建立基于摘要的时间序列数据索引结构,具体步骤如下:
步骤A.1:基于时间序列数据,初始化系统参数;
具体到本实例,时间序列标号i可以是从1到40的整数,由于时间序列数据T整体方差比偏小,因此设置段最大误差ε=0.2,树状索引结构中间节点的子节点个数基准B=3;时间序列片段数组U,初始化为空;保存索引结构时初始化内存缓冲区的大小X=100兆字节;
步骤A.2:对时间序列数据进行分段,输出时间序列片段并保存到时间序列片段数组中;
具体到本实例实施,不断读取时间序列数据,根据用户自定义的分段误差ε=0.2,采用旋转门算法进行分段,经过分段后T产生了10个时间序列片段,旋转门算法的输出结果时间序列片段数组
步骤A.3:采用拟合函数对上一步骤输出的每一段时间序列片段进行拟合,得到每一段时间序列片段的数据摘要信息;
具体到本实例实施,对时间序列片段数组U中的每一项,采用线性回归的方法进行线性拟合,同时记录每一个时间序列片段的开始时刻ts和结束时刻te以及开始时刻的值vs和结束时刻的值ve,计算拟合误差e,每一时刻的值累加后的和M,每一时刻和该时刻的值相乘后累加的和P,形成该时间序列片段的数据摘要信息经过步骤A.3,最终形成了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}
步骤A.4:利用上一步骤得到的数据摘要信息,构建树状索引结构;
具体到本实例实施,将收到步骤A.3的数据摘要信息转化为10个最底层的子节点,同时利用10个最底层的子节点生成第二层的3个节点,第二层的3个节点合并形成1个根节点;生成树状索引结构如图2,第一层节点称为根节点,第二层称为中间节点,最下面的子节点叫做叶子节点;根节点和中间节点具有相似结构,节点中第一层两个数分别代表开始时刻和开始时刻的值,第二层两个数分别代表结束时刻和结束时刻的值,第三层左边的值表示节点的拟合误差,右边的值表示右边相邻的节点指针,Null表示空,表示当前节点的右边没有节点,第四层表示子节点的索引,第五层表示对应子节点的指针,方便读取子节点;叶子节点的结构只有三层,第一层两个值分别对应开始时刻和开始时刻的值,第二层两个值分别对应结束时刻和结束时刻的值,第三层左边的值表示节点的拟合误差,右边的值用来表示右边相邻的节点指针,Null表示当前节点右边没有节点;
步骤B:基于步骤A建立的时间序列树状索引结构的上半部分读入内存,构造查询语句,初始化查询结果数组和数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟以及查询时深入查找一层所需要的时间;;
具体到本实例实施,将树结构的根节点和第二层中间节点读入内存中;同时构建查询语句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;
步骤C:基于步骤B的查询语句查找包含查询范围的开始时刻的节点,同时保证查询时延小于用户要求的最大时延,返回包含查询范围的开始时刻的节点;
步骤D:根据包含查询范围的开始时刻的节点,将满足查询范围要求的所有节点加入查询结果数组中,并输出查询结果数组;
步骤E:将查询结果数组中的数据展示出来;
具体到本实例实施,首先判断判断查询结果数组R是否有变化,查询结果数组R存在变化,同时查询结果数组中第一个节点的开始时刻和最后一个节点的结束时刻和查询范围的开始时刻和结束时刻一致,所以把时间作为横坐标,把对应的值作为纵坐标,建立直角坐标系,将查询结果数组R中所有节点的开始时刻和结束时刻对应的点,用直线相连,可视化展现出来;
步骤F:依次遍历查询结果数组中的每一个节点,判断查询结果数组中是否有不满足查询误差要求需要细化查询的节点,返回不满足查询误差要求的节点和细化查询的查询语句;
具体到本实例实施,查询结果数组R中两个节点的拟合误差都小于查询误差Qerror=0.1,满足查询误差要求,不需要细化查询,至此完成了本方法;
至此,从步骤A到F,完成了基于本实施例应用本发明提出的方法:一种自适应的时间序列数据查询方法的自适应数据查询。
实施例2
本实例按照实施例1中所述参数,具体阐述了本发明步骤1.4中构建树状索引结构的算法及实施例1中的步骤A.4的执行流程。
具体流程为:根据下一层节点,采用自下而上的方法,合并产生上一层节点,自下而上构建根树状索引结构。
具体到本实例实施中,由最底层节点,即叶子层节点合并产生中间层节点的流程如下:
步骤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:在上一层节点中添加指针和子节点的索引,指向对应的子节点,同时在每一层节点上都添加右指针,指向右边相邻的节点。
按照同样的流程将中间层作为下一层,合并产生根节点,最终生成的树状索引结构如图2,树中分为三层,包括根节点,中间层和叶子层。
由本实例构建的树状索引结构可以看出,树中节点自上而下的拟合误差越来越小,可以实现按照不同的精度查询,从多层次展现时间序列数据,很好支持增量式查询。
由本实例构建的树状索引结构可以看出,树中节点自上而下的拟合误差越来越小,可以实现按照不同的精度查询,从多层次展现时间序列数据,很好支持增量式查询。
实施例3
本实例按照实施例1所述的参数及实施例2中所构建的索引结构,具体阐述执行本发明中一种自适应的时间序列数据查询算法中步骤2到步骤7增量式查询过程。
具体到本实例实施,按照下面的流程:
步骤(2):将基于步骤(1)建立的时间序列树状索引结构的上半部分读入内存,构造查询语句,初始化查询结果数组和数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟以及查询时深入查找一层所需要的时间;
具体到本实例实施,索引结构如图2,有三层结构,首先将树状索引结构的根节点和第二层中间节点读入内存中;同时构建查询语句q=select*from dateset where time>10and time<20and error<0.02其中Qs=10,Qe=20,Qerror=0.02,并且初始化查询结果数组R为空;把数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟设置为L=0.01ms;查询时深入查找一层所需要的时间c=0.005ms;
步骤(3):基于步骤(2)的查询语句查找包含查询范围的开始时刻的节点,同时保证查询时延小于用户要求的最大时延,返回包含查询范围的开始时刻的节点;
具体到本实例实施,在树状索引结构上查找包含查询范围的开始时刻的节点,并返回,把树状索引结构的节点记为下标r表示第r层,对应树中根节点为第1层,中间层为第2层,叶子节点为第3层;上标t表示节点在每一层中从左到右的顺序,t是大于等于1的整数;按照步骤(3)的流程查找包含查询范围的开始时刻的节点,如下:
步骤(3).1:计算查询时可以查找的最大深度;
具体到本实例实施,查询时可以查找的最大深度h=L/c=0.01/0.005=2;
步骤(3).2:读取根节点,判断根节点是否包含查询范围的开始时刻,并根据判断结果返回节点,进行相应操作:
具体到本实例实施,根节点的时间范围是1-40,包含查询范围10-20.则继续步骤(3).3;
步骤(3).3:读取步骤(3).2返回节点,记为当前节点,并判断当前节点的拟合误差是否满足查询误差要求并进行相应操作,具体为:
(3).3.1:如果当前节点的拟合误差小于等于查询误差Qerror,返回当前节点,然后继续步骤(4);
(3).3.2:如果当前节点的拟合误差大于查询误差Qerror,继续步骤(3).4;
其中,查询误差要求是指是节点的拟合误差要小于等于查询误差Qerror;
步骤(3).4:计算目前的查询深度;
查询深度根据步骤(3).3中的节点在树状索引结构上的位置计算,在最上层根节点时,代表查询深度为1,自上而下每深入一层,查询深度加1;
步骤(3).5:根据步骤(3).4计算的目前查询深度判断是否可以继续深入查询,具体为:
(3).5.1:如果目前的查询深度小于h,则根据步骤(3).2中节点的子节点索引,读取包含查询范围开始时刻的子节点作为根节点,跳至步骤(3).2;
(3).5.2:如果目前的查询深度大于等于h,则返回步骤(3).2中的节点,然后跳至步骤(4);
具体到本实例实施,目前查询深度为1小于h=2,可以继续查找,根据孩子节点的索引,读取的孩子节点把作为根节点继续按照步骤(3).2查询;步骤同上,经过步骤(3).2和步骤(3).3的判断,符合查询要求,将返回;
步骤(4):根据包含查询范围的开始时刻的节点,将满足查询范围要求的所有节点加入查询结果数组中,并输出查询结果数组,具体为:
步骤(4).1:读取包含查询范围的开始时刻的节点,并更新当前节点为此节点;
步骤(4).2:判断当前节点是否满足查询范围,把满足查询范围要求的节点加入查询结果数组中;
(4).2.1:如果当前节点的结束时间时刻,小于查询范围的结束时刻Qe,将当前节点加入查询结果数组R中,并读取当前节点的右指针指向的节点作为当前节点,然后继续步骤(4).2;
(4).2.2:如果当前节点的结束时刻大于等于查询范围的结束时刻,将当前节点加入查询结果数组R中,结束查询,继续执行步骤(5);
其中,满足查询范围要求是指节点开始时刻和结束时刻之间覆盖的时间范围和查询范围的开始时刻和查询范围的结束时刻之间覆盖的时间范围存在交集;
具体到本实例实施,节点的结束时刻小于查询范围的结束时刻20,因此把赋值给R[0],根据R[0]的右指针,读取第二层中间节点的第二个节点,记为作为当前节点继续步骤(4).2,经过步骤(4).2的判断,的结束时间大于查询结束时间20,因此将赋值给R[1],继续执行步骤(5);
步骤(5):将查询结果数组中的数据展示出来;
具体到本实例实施,按照下面的流程执行:
步骤(5).1:判断查询结果数组R是否有更新,并根据判断结果决定是否进行可视化展现:
(5).1.1:若查询结果数组R上存在更新,跳至步骤(5).2;
(5).1.2:若查询结果数组R上不存在更新,跳至步骤(6);
具体到本实例实施,R上存在更新,继续步骤(5).2;
步骤(5).2:判断查询结果数组R中第一个节点R[0]的开始时刻与查询范围的开始时刻是否一致,更新不一致情况下查询结果数组R中第一个节点的开始时刻和开始时刻的值;
(5).2.1:如果判断结果一致,则跳至步骤(5).3;
(5).2.2:若判断结果不一致,即R[0]节点开始时刻小于查询范围的开始时刻Qs,则以R[0]节点开始时刻和结束时刻的值为横坐标,R[0]节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,再根据拟合后的直线求出查询范围开始时刻对应的值,用查询范围的开始时刻和计算出查询范围开始时刻的值替换R[0]节点的开始时刻和开始时刻的值,然后,继续步骤(5).3;
在本实例实施中,R[0]从开始时刻为1,而查询开始时刻为10,不一致,则以R[0]节点开始时刻和结束时刻的值为横坐标,R[0]节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,计算出直线的函数表达式,记为Fs(t),表示为公式(1):
Fs(t)=0.1777t+9.4723(1)
其中t表示时刻,是从1到14的整数。通过公式(1)可以得到开始的时刻的值Fs(10)=11.25,将10和11.25替换R[0]节点的开始时刻和开始时刻的值,然后继续步骤(5).3;
步骤(5).3:判断查询结果数组中最后一个节点的结束时刻是否与查询范围的结束时刻是否一致,更新不一致情况下查询结果数组R中最后一个节点的结束时刻和结束时刻的值;
(5).3.1:如果判断结果一致,则跳至步骤(5).4;
(5).3.2:如果查询结果数组中最后一个节点的结束时刻大于查询的结束时刻Qe,则以查询结果数组中最后一个节点的开始时刻和结束时刻的值为横坐标,查询结果数组中最后一个节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,根据拟合后的直线求出查询范围的结束时刻对应的值,用查询范围的结束时刻和计算出查询范围结束时刻的值替换查询结果数组中最后一个节点的结束时刻和结束时刻的值,然后继续步骤(5).4;
在本实例实施中,R[1]结束时刻为29,而查询结束时刻为20,不一致,则需要按照R[1]的开始时刻和结束时刻的值为横坐标,查询结果数组中最后一个节点开始时刻的值和结束时刻的值为纵坐标,利用这两点拟合为一条直线,计算出直线的函数表达式,记为Fe(t),表示为公式(2):
Fe(t)=-0.047t+11.965(2)
其中t表示时刻,是从15到29的整数。通过公式(2)可以得到结束的时刻的值Fe(20)=10.39,将20和10.39替换R[1]节点的开始时刻和开始时刻的值,然后,继续步骤(5).4;
步骤(5).4:以时间作为横坐标,以对应的值作为纵坐标,建立直角坐标系,将查询结果数组R中所有节点的开始时刻和结束时刻对应的点,用直线相连,可视化展现出来;
在本实例实施中,可视化时以时间作为横轴,对应的值作为纵轴,建立坐标系,将节点对应的点用直线相连;查询结果数组中目前对应的4个点的坐标分别是(10,11.25)、(14,11.96)、(15,11.26)、(20,10.39),其中每个坐标第一个值对应横轴,第二个值对应纵轴;
步骤(6):依次遍历查询结果数组中的每一个节点,判断查询结果数组中是否有不满足查询误差要求需要细化查询的节点,返回不满足查询误差要求的节点和细化查询的查询语句;
具体到本实例实施,按照下面的流程执行:
步骤(6).1:顺序读取查询结果数组R中的一个节点,判断读取到的节点拟合误差和查询误差的关系,返回不满足查询误差要求的节点和细化查询的查询语句;
(6).1.1:如果读取到的节点的拟合误差大于查询误差Qerror,则重新构造查询语句q,如果此次读取到的节点的开始时刻比查询范围的开始时刻Qs小,查询语句q的查询范围的开始时刻Qs不变,否则q的查询范围的开始时刻Qs设置为此次读取到的节点的开始时刻;如果此次读取到的节点的结束时刻比查询语句q查询范围的结束时刻Qe大,则q的查询范围的结束时刻Qe不变,否则q的查询范围的结束时刻Qe设置为此次读取到的节点的结束时刻;查询误差Qerror保持不变;然后返回此次读取到的节点和查询语句q,跳转至步骤(7);
(6).1.2:如果读取到的节点的拟合误差小于等于查询误差Qerror,且不是最后一个节点,继续步骤(6).1;如果读取到的节点的拟合误差小于等于查询误差Qerror,且是最后一个节点,跳转到步骤(6).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返回,继续步骤(7);
步骤(7):根据步骤(6)中返回的节点和查询语句,进行细化查询并更新查询结果数组;
具体到本实例实施,按照下面的流程执行:
步骤(7).1:在步骤(2)读入内存的树状索引结构中,找到步骤(6)中返回的节点并根据找到节点的子节点索引,读取包含q中查询范围开始时刻的子节点;
步骤(7).2:判断读取到的子节点的拟合误差是否满足查询误差要求,并根据判断结果进行如下操作:
(7).2.1:如果子节点的拟合误差小于等于查询语句q中查询误差Qerror,初始化一个结果缓冲区,暂时保存读取到的子节点,按照子节点的右指针连续读取查询语句q查找范围内包含的所有节点,依次放入结果缓冲区中,然后跳转至步骤(7).3;
(7).2.2:如果子节点的拟合误差大于查询语句q中查询误差Qerror,将当前读取到的子节点当作步骤(6)返回的节点,跳转至步骤(7).1;
步骤(7).3:将查询结果数组R中步骤(6)返回的节点用结果缓冲区的节点替换,更新查询结果数组R,然后跳转到步骤(5);
具体到本实例实施,将R中节点用和节点替换,然后跳转至步骤(5),按照步骤(5)再次执行,此时查询结果数组R对应的可视化的6个点的坐标分别是(10,11.25)、(14,11.96)、(15,11.58)、(18,10.87)、(19,11.06)、(20,10.99),经过步骤(6)判断,每个节点都满足查询误差要求,结束查询。
至此,从步骤(2)到(7)完成了本实例一种自适应的时间序列数据可视化查询算法中增量式查询过程。
由本实例实施的查询可视化流程可以看出本发明可以确保在用户要求的时间延迟前,返回一个可视化结果,保证了查询的效率,而且在展现可视化结果时,采用了渐进式不断细化的方式,保证了展示结果的精度,同时与返回查询时间范围内所有的原始数据相比,本方法只返回节点数据,数据量小,尤其是在查询时间范围比较大的查询时,效果更加明显。
实施例4
将实施例1中的股票数据改成网络流量数据,交通路口通过车辆数据等其他任意类型的时间序列数据,本发明所提出的自适应的时间序列数据可视化方法仍然有效。
上述实施方式未述及的有关技术采用或借鉴已有的技术即可实现。
以上所述为本发明的较佳实施例而已,本发明不应该局限于该实施例和附图所公开的内容。凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。
Claims (7)
1.一种自适应的时间序列数据查询方法,其特征在于:构建基于摘要的时间序列数据索引,需要查询时,首先查找查询范围内的节点并加入查询结果数组,即首先在用户要求的时延内,返回一个粗糙的查询结果;再遍历查询结果数组中的所有节点,判断是否有不满足误差要求需要细化查询的节点,并根据判断结果进行细化查询与否的相应操作;即不断细化不满足用户查询要求的部分,最终保证全部查询结果达到用户查询要求,最后更新查询结果数组,而且索引结构建立一次,可供多次查询使用;通过以下步骤实现:
步骤1:建立基于摘要的时间序列数据树状索引结构;
步骤2:将基于步骤1建立的时间序列树状索引结构的上半部分读入内存,其中,树状索引结构的上半部分,具体为树状索引结构中除了最底层子节点外的其他部分;构造查询语句,初始化查询结果数组和数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟以及查询时深入查找一层所需要的时间;
步骤3:基于步骤2的查询语句查找包含查询范围的开始时刻的节点,同时保证查询时延小于用户要求的最大时延,返回包含查询范围的开始时刻的节点;
具体为:
步骤3.1:计算查询时可以查找的最大深度;
其中,查询时可以查找的最大深度记为h,把数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟,记为L;查询时深入查找一层所需要的时间,记为c,h=L/c;
步骤3.2:读取根节点,判断根节点是否包含查询范围的开始时刻,并根据判断结果返回节点,进行相应操作:
3.21:若根节点包含查询范围的开始时刻,返回当前判断的根节点,跳至步骤3.3;
3.22:若根节点不包含查询范围的开始时刻,则读取根节点的右指针指向的节点作为根节点,跳转到步骤3.2;
步骤3.3:读取步骤3.2返回节点,记为当前节点,并判断当前节点的拟合误差是否满足查询误差要求并进行相应操作,具体为:
3.3.1:如果当前节点的拟合误差小于等于查询误差Qerror,返回当前节点,然后继续步骤4;
3.3.2:如果当前节点的拟合误差大于查询误差Qerror,继续步骤3.4;
其中,查询误差要求是指是节点的拟合误差要小于等于查询误差Qerror;
步骤3.4:计算目前的查询深度;
查询深度根据步骤3.3中的节点在树状索引结构上的位置计算,在最上层根节点时,代表查询深度为1,自上而下每深入一层,查询深度加1;
步骤3.5:根据步骤3.4计算的目前查询深度判断是否可以继续深入查询,具体为:
3.5.1:如果目前的查询深度小于h,则根据步骤3.2中节点的子节点索引,读取包含查询范围开始时刻的子节点作为根节点,跳至步骤3.2;
3.5.2:如果目前的查询深度大于等于h,则返回步骤3.2中的节点,然后跳至步骤4;
步骤4:根据包含查询范围的开始时刻的节点,将满足查询范围要求的所有节点加入查询结果数组中,并输出查询结果数组;
步骤5:将查询结果数组中的数据展示出来;
步骤6:依次遍历查询结果数组中的每一个节点,判断查询结果数组中是否有不满足查询误差要求需要细化查询的节点,返回不满足查询误差要求的节点和细化查询的查询语句;
步骤7:根据步骤6中返回的节点和查询语句,进行细化查询并更新查询结果数组;
至此,经过步骤1到步骤7,完成了一种自适应的时间序列数据查询方法。
2.根据权利要求1所述的一种自适应的时间序列数据查询方法,其特征在于:步骤1,具体为:
步骤1.1基于时间序列数据,初始化系统参数;
其中,系统参数包括时间序列标号、分段最大误差以及树状索引结构中间节点的子节点个数基准、时间序列片段数组;
其中,时间序列标号,记为i,代表时间序列数据T中第i个时刻,此第i个时刻的值记为vi,第i时刻记为ti,下标i是大于等于0的整数;将原始时间序列分段时最大的误差,即分段最大误差记为ε;树状索引结构中间节点的子节点个数基准记为B,B是一个大于0的整数;时间序列片段数组,记为U,初始化为空;
步骤1.2:对时间序列数据进行分段,输出时间序列片段并保存到时间序列片段数组中;对时间序列数据进行分段能够按照等间隔分段,还能够按照不等间隔分段;
步骤1.3:采用拟合函数对步骤1.2输出的每一段时间序列片段进行拟合,得到每一段时间序列片段的数据摘要信息;
将步骤1.2输出结果,时间序列片段数组U中的每一项采用线性回归进行拟合,并记录每一项的数据摘要信息下标j对应时间序列片段在U中的顺序,j是大于0小于|U|的整数,|U|代表数组U的长度;ts和te分别代表时间序列片段的开始时刻和结束时刻,vs和ve分别表示ts时刻和te时刻的值,e代表用线性拟合后的直线代替时间序列数据产生的误差,即拟合误差,M代表每一时刻的值累加后的和,P代表每一时刻和该时刻的值相乘后累加的和;
步骤1.4:利用步骤1.3得到的数据摘要,构建树状索引结构;
具体为:将步骤1.3中每一项数据摘要信息,当作树中最底层节点,自下而上合并产生上层节点,构建树状索引结构;其中,自下而上合并产生上层节点,即由下一层节点合并产生上一层节点。
3.根据权利要求1所述的一种自适应的时间序列数据查询方法,其特征在于:步骤2中,树状索引结构的上半部分,具体为树状索引结构中除了最底层子节点外的其他部分;查询语句为:
q=select*from dateset where time>Qs and time<Qe and error<Qerror,
其中,Qs代表查询范围的开始时刻,Qe代表查询范围的结束时刻,Qerror代表查询结果允许的最大误差,即查询误差,表示查询在Qs和Qe时刻之间的数据,并且误差要小于等于Qerror;初始化查询结果数组R为空;把数据可视化时从查询开始到展现出来用户可以接受的最大时间延迟,记为L;查询时深入查找一层所需要的时间,记为c。
4.根据权利要求1所述的一种自适应的时间序列数据查询方法,其特征在于:步骤4,具体为:
步骤4.1:读取包含查询范围的开始时刻的节点,并更新当前节点为此节点;
步骤4.2:判断当前节点是否满足查询范围,把满足查询范围要求的节点加入查询结果数组中;
4.2.1:如果当前节点的结束时间时刻,小于查询范围的结束时刻Qe,将当前节点加入查询结果数组R中,并读取当前节点的右指针指向的节点作为当前节点,然后继续步骤4.2;
4.2.2:如果当前节点的结束时刻大于等于查询范围的结束时刻,将当前节点加入查询结果数组R中,结束查询;继续执行步骤5;
其中,满足查询范围要求是指节点开始时刻和结束时刻之间覆盖的时间范围和查询范围的开始时刻和查询范围的结束时刻之间覆盖的时间范围存在交集。
5.根据权利要求1所述的一种自适应的时间序列数据查询方法,其特征在于:步骤5,具体为:
步骤5.1:判断查询结果数组R是否有更新,并根据判断结果决定是否进行可视化展现:
5.1.1:若查询结果数组R上存在更新,跳至步骤5.2;
5.1.2:若查询结果数组R上不存在更新,跳至步骤6;
步骤5.2:判断查询结果数组R中第一个节点R[0]的开始时刻与查询范围的开始时刻是否一致,更新不一致情况下查询结果数组R中第一个节点的开始时刻和开始时刻的值;
5.2.1:如果判断结果一致,则跳至步骤5.3;
5.2.2:若判断结果不一致,即R[0]节点开始时刻小于查询范围的开始时刻Qs,则以R[0]节点开始时刻和结束时刻的值为横坐标,R[0]节点开始时刻的值和结束时刻的值为纵坐标,利用开始时刻的值和结束时刻的值拟合为一条直线,再根据拟合后的直线求出查询范围开始时刻对应的值,用查询范围的开始时刻和计算出查询范围开始时刻的值替换R[0]节点的开始时刻和开始时刻的值,然后,继续步骤5.3;
步骤5.3:判断查询结果数组中最后一个节点的结束时刻是否与查询范围的结束时刻是否一致,更新不一致情况下查询结果数组R中最后一个节点的结束时刻和结束时刻的值;
5.3.1:如果判断结果一致,则跳至步骤5.4;
5.3.2:如果查询结果数组中最后一个节点的结束时刻大于查询的结束时刻Qe,则以查询结果数组中最后一个节点的开始时刻和结束时刻的值为横坐标,查询结果数组中最后一个节点开始时刻的值和结束时刻的值为纵坐标,利用开始时刻的值和结束时刻的值拟合为一条直线,根据拟合后的直线求出查询范围的结束时刻对应的值,用查询范围的结束时刻和计算出查询范围结束时刻的值替换查询结果数组中最后一个节点的结束时刻和结束时刻的值,然后继续步骤5.4;
步骤5.4:以时间作为横坐标,以对应的值作为纵坐标,建立直角坐标系,将查询结果数组R中所有节点的开始时刻和结束时刻对应的点,用直线相连,可视化展现出来。
6.根据权利要求1所述的一种自适应的时间序列数据查询方法,其特征在于:步骤6,具体步骤如下:
步骤6.1:顺序读取查询结果数组R中的一个节点,判断读取到的节点拟合误差和查询误差的关系,返回不满足查询误差要求的节点和细化查询的查询语句;
6.1.1:如果读取到的节点的拟合误差大于查询误差Qerror,则重新构造查询语句q,如果此次读取到的节点的开始时刻比查询范围的开始时刻Qs小,查询语句q的查询范围的开始时刻Qs不变,否则q的查询范围的开始时刻Qs设置为此次读取到的节点的开始时刻;如果此次读取到的节点的结束时刻比查询语句q查询范围的结束时刻Qe大,则q的查询范围的结束时刻Qe不变,否则q的查询范围的结束时刻Qe设置为此次读取到的节点的结束时刻;查询误差Qerror保持不变;然后返回此次读取到的节点和查询语句q,跳转至步骤7;
6.1.2:如果读取到的节点的拟合误差小于等于查询误差Qerror,且不是最后一个节点,继续步骤6.1;如果读取到的节点的拟合误差小于等于查询误差Qerror,且是最后一个节点,跳转到步骤6.2;
步骤6.2:查询结果数组中所有的节点的拟合误差都小于等于查询误差Qerror,满足查询误差要求,结束查询。
7.根据权利要求1所述的一种自适应的时间序列数据查询方法,其特征在于:步骤7,具体为:
步骤7.1:在步骤2读入内存的树状索引结构中,找到步骤6中返回的节点并根据找到节点的子节点索引,读取包含q中查询范围开始时刻的子节点;
步骤7.2:判断读取到的子节点的拟合误差是否满足查询误差要求,并根据判断结果进行如下操作:
7.2.1:如果子节点的拟合误差小于等于查询语句q中查询误差Qerror,初始化一个结果缓冲区,暂时保存读取到的子节点,按照子节点的右指针连续读取查询语句q查找范围内包含的所有节点,依次放入结果缓冲区中,然后跳转至步骤7.3;
7.2.2:如果子节点的拟合误差大于查询语句q中查询误差Qerror,将当前读取到的子节点当作步骤6返回的节点,跳转至步骤7.1;
步骤7.3:将查询结果数组R中步骤6返回的节点用结果缓冲区的节点替换,更新查询结果数组R,然后跳转到步骤5。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710051701.1A CN106844666B (zh) | 2017-01-20 | 2017-01-20 | 一种自适应的时间序列数据查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710051701.1A CN106844666B (zh) | 2017-01-20 | 2017-01-20 | 一种自适应的时间序列数据查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106844666A CN106844666A (zh) | 2017-06-13 |
CN106844666B true CN106844666B (zh) | 2020-07-31 |
Family
ID=59120503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710051701.1A Active CN106844666B (zh) | 2017-01-20 | 2017-01-20 | 一种自适应的时间序列数据查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106844666B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241121A (zh) * | 2017-06-29 | 2019-01-18 | 阿里巴巴集团控股有限公司 | 时间序列数据的存储和查询方法、装置、系统及电子设备 |
CN109947764B (zh) * | 2017-09-18 | 2020-12-22 | 中国科学院声学研究所 | 一种基于时延构建弹性现场的查询增强系统及方法 |
CN108470063A (zh) * | 2018-03-26 | 2018-08-31 | 四川斐讯信息技术有限公司 | 一种大数据可视化场景下的数据处理的方法及系统 |
CN111177163A (zh) * | 2019-12-09 | 2020-05-19 | 国电南瑞科技股份有限公司 | 一种面向时标数据的数据访问方法、装置及存储介质 |
CN113254451B (zh) * | 2021-06-01 | 2022-04-19 | 北京城市网邻信息技术有限公司 | 一种数据索引构建方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102446184A (zh) * | 2010-10-12 | 2012-05-09 | 上海可鲁系统软件有限公司 | 一种基于时间序列的工业数据存储及索引方法 |
CN104182460A (zh) * | 2014-07-18 | 2014-12-03 | 浙江大学 | 基于倒排索引的时间序列相似性查询方法 |
-
2017
- 2017-01-20 CN CN201710051701.1A patent/CN106844666B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102446184A (zh) * | 2010-10-12 | 2012-05-09 | 上海可鲁系统软件有限公司 | 一种基于时间序列的工业数据存储及索引方法 |
CN104182460A (zh) * | 2014-07-18 | 2014-12-03 | 浙江大学 | 基于倒排索引的时间序列相似性查询方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106844666A (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 | |
US9299173B2 (en) | Automatic selection of different visualizations for the organization of multivariate data | |
US6757686B1 (en) | Method and apparatus for representing database and query information using interval hash tree | |
US8015129B2 (en) | Parsimonious multi-resolution value-item lists | |
US20090204582A1 (en) | Navigation for large scale graphs | |
US10650559B2 (en) | Methods and systems for simplified graphical depictions of bipartite graphs | |
CN102902826B (zh) | 一种基于基准图像索引的图像快速检索方法 | |
CN103544216A (zh) | 一种结合图像内容和关键字的信息推荐方法及系统 | |
KR100797232B1 (ko) | 계층적 데이터 지향 네비게이션 시스템 및 정보 인출 방법 | |
JP2004178605A (ja) | 情報検索装置及びその方法 | |
US8977621B1 (en) | Search engine optimizer | |
CN105677837A (zh) | 一种关联规则的挖掘方法和关联规则的挖掘装置 | |
JP2003504727A (ja) | 関係経路の実行可能予測 | |
CN111078952B (zh) | 一种基于层次结构的跨模态可变长度哈希检索方法 | |
CN115018545A (zh) | 基于用户画像与聚类算法的相似用户分析方法及系统 | |
CN109997123A (zh) | 用于改进空间-时间数据管理的方法、系统和装置 | |
KR100609022B1 (ko) | 공간관계와 주석을 이용한 이미지 검색 방법 | |
Hoeber et al. | HotMap: Supporting visual exploration of Web search results | |
CN111915414A (zh) | 向目标用户展示目标对象序列的方法和装置 | |
US20230126509A1 (en) | Database management system and method for graph view selection for a relational-graph database | |
CN110580299A (zh) | 生成对象的推荐语的配图的方法、系统、设备及存储介质 | |
CN113961737A (zh) | 检索模型训练方法与装置、检索方法与装置、电子设备及存储介质 | |
WO2022235297A1 (en) | Classifying elements and predicting properties in an infrastructure model through prototype networks and weakly supervised learning |
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 |