一种从海量数据中快速检索变化数据段的方法及系统
技术领域
本发明涉及数据处理领域,尤其涉及一种从海量数据中快速检索变化数据段的方法及系统。
背景技术
物联网和传感器技术的应用,积累了大量的数据,利用这些数据之前通常需要对数据进行分析。这些数据常常是按某种顺序采样的数据,例如工业自动化中设备状态的监控数据,由传感器按时序采样生成,使用时往往需要获得状态变化的开始和结束时间。
传统的方法是按时间顺序搜索某个时间点之前或之后出现不同状态的最接近时间,这种方法需要对数据进行全局搜索,而对海量数据进行全局搜索存在速度慢、工作量大以及难以实施的问题。
发明内容
本发明目的在于提供一种从海量数据中快速检索变化数据段的方法及系统,以解决获得状态变化的开始和结束时间需对海量数据进行全局搜索工作量大的技术问题。
为实现上述目的,本发明提供了一种从海量数据中快速检索变化数据段的方法,包括以下步骤:
S1:将海量数据以一条数据为单位按顺序排序;
S2:将本条数据作为中数据段,前一条数据作为前数据段,后一条数据作为后数据段,三者联合形成一条新数据;
S3:查找所有新数据中:前数据段符合第一状态且中数据段符合第二状态的所有新数据,作为数据第一位置;中数据段符合第二状态且后数据段符合第三状态的所有新数据,作为数据第二位置。
作为本发明的方法的进一步改进:
S3还包括:
查找到前数据段符合第一状态且中数据段符合第二状态的所有新数据,按顺序编号,得到数据第一位置的所有新数据集;
查找到中数据段符合第二状态且后数据段符合第三状态的所有新数据,按顺序编号,得到数据第二位置的所有新数据集。
S3还包括:数据第一位置的所有新数据集和数据第二位置的所有新数据集,按顺序编号的规则相同;
将数据第一位置的所有新数据集以及数据第二位置的所有新数据集中具有相同编号的新数据进行连接,得到所有本条数据符合第二状态的数据连续段的第一位置、第二位置及数据。
第一状态和第三状态均为数据段为空,第二状态为数据段不为空。
数据第一位置为数据开始位置,数据第二位置为数据结束位置。
作为一个总的技术构思,本发明还提供了一种从海量数据中快速检索变化数据段的系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法的步骤。
本发明具有以下有益效果:
本发明的从海量数据中快速检索变化数据段的方法,通过联合每条数据与前、后的数据,将不同数据记录之间的比较,转化为一条记录内不同数据字段之间的比较,使得原来需要全局搜索的作业,可以分布到多个节点上分布执行,快速检索出数据变化的开始、结束范围及其数据,也适用于多数据项及多状态值的数据的检索。
除了上面所描述的目的、特征和优点之外,本发明还有其它的目的、特征和优点。下面将参照附图,对本发明作进一步详细的说明。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明优选实施例的海量数据中快速检索变化数据段的方法的流程示意图。
具体实施方式
以下结合附图对本发明的实施例进行详细说明,但是本发明可以由权利要求限定和覆盖的多种不同方式实施。
参见图1,本发明的从海量数据中快速检索变化数据段的方法,包括以下步骤:
S1:将海量数据以一条数据为单位按顺序排序;
S2:将本条数据作为中数据段,前一条数据作为前数据段,后一条数据作为后数据段,三者联合形成一条新数据;
S3:查找所有新数据中:前数据段符合第一状态且中数据段符合第二状态的所有新数据,作为数据第一位置;中数据段符合第二状态且后数据段符合第三状态的所有新数据,作为数据第二位置。
通过以上步骤,联合每条数据与前、后的数据,将不同数据记录之间的比较,转化为一条记录内不同数据字段之间的比较,使得原来需要全局搜索的作业,可以分布到多个节点上分布执行,快速检索出多数据项及多状态值的数据。
实施例1:
本发明的从海量数据中快速检索变化数据段的方法,包括以下步骤:
S1:将海量数据以一条数据为单位按顺序排序;
S2:将本条数据作为中数据段,前一条数据作为前数据段,后一条数据作为后数据段,三者联合形成一条新数据;
S3:查找所有新数据中:前数据段符合第一状态且中数据段符合第二状态的所有新数据,作为数据第一位置,按顺序编号(第1条编号为1,第2条编号为2,依此类推),得到数据第一位置的所有新数据集;中数据段符合第二状态且后数据段符合第三状态的所有新数据,作为数据第二位置,按顺序编号(第1条编号为1,第2条编号为2,依此类推),得到数据第二位置的所有新数据集。数据第一位置的所有新数据集和数据第二位置的所有新数据集,按顺序编号的规则相同;
S4:将数据第一位置的所有新数据集以及数据第二位置的所有新数据集中具有相同编号的新数据进行连接,得到所有本条数据符合第二状态的数据连续段的第一位置、第二位置及数据。由于数据是按具有唯一性的编号,将编号相等的数据进行连接,不会产生重复。
以上步骤,通过联合每条数据与前、后的数据,将不同数据记录之间的比较,转化为一条记录内不同数据字段之间的比较,使得原来需要全局搜索的作业,可以分布到多个节点上分布执行。
实施例2:
本实施例从海量数据中快速检索变化数据段的方法,包括以下步骤:
本实施例用数据记录(以下简称记录)进行说明,一条数据记录data中有序号id、时间time、状态state、值value等数据项。本实施例采用类似SQL语句来表示算法实现。
1、将记录按顺序排序后,对于每条记录,将本身数据(记为S)与前1条数据(记为P)及后1条数据(记为N)联合形成1条新记录,对于第1条前数据P为空;对于最后1条后数据N为空。
联合每条记录与前、后记录得到新记录jointData:
select id,value,state,lag(value,1)over(order by time)as pValue,lag(state,1)over(order by time)as pState,lead(value,1)over(order by time)asnValue,lead(state,1)over(order by time)as nState from data。
2、假设数据有0、1值,0表示数据段为空,1表示数据段不为空,比较新记录中本身数据S与前数据P,查出S=1并且P=0或P为空的所有记录,按顺序编号,得到数据由0变1(开始位置)的所有记录集。
在新记录中查找state由0变1的记录并编号得到startData:
select id as pId,pValue,row_number()over(order by time)as index fromjointData where state=1and(pState is null or pState=0)。
3、再查出S=1并且N=0或N为空的所有记录,按顺序编号,得到数据由1变0(结束位置)的所有记录集。
在新记录中查找state由1变0的记录并编号得到endData:
select id as nId,nValue,row_number()over(order by time)as index fromjointData where state=1and(nState is null or nState=0)。
4、两个记录集中记录条数相同,且相同编号的记录是同一段数据开始、结束位置,将两者以相同编号进行连接,得到所有的数据为1的数据连续段的开始、结束位置及数据。
将startData与endData以编号连接得到每个连续state的记录范围:
select pId,pValue,nId,nValue from startData s join endData e ons.index=e.index。
数据为0或者更多状态可以依此类推。能快速检索出数据变化的开始、结束范围及其数据。在范围记录集中,利用序号id可以定位对应的原记录,通过扩展状态state、值value等数据项及其数据值,可以处理多数据项、多状态值的情况。
实施例3:
本实施例的一种从海量数据中快速检索变化数据段的系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一实施例的步骤。
综上可知,本发明通过联合每条数据与前、后的数据,将不同数据记录之间的比较,转化为一条记录内不同数据字段之间的比较,使得原来需要全局搜索的作业,可以分布到多个节点上分布执行,快速检索出数据变化的开始、结束范围及其数据,也适用于多数据项及多状态值的数据的检索。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。