一种数据查询处理方法与流程

文档序号:12010535阅读:307来源:国知局
一种数据查询处理方法与流程
本发明涉及数据查询统计技术领域。

背景技术:
随着数据获取技术和数据处理要求的不断提高,当今社会已进入信息爆炸的时代,业界称之为“大数据”时代。大数据存在以下4V的特点:数据量巨大(Volume)、数据类型多样化(Variety)、高处理速度要求(Velocity)、蕴含巨大的价值(Value)。按照数据的不同类型,目前存在的技术主要包括:针对海量结构化数据的并行数据库处理技术,以及针对海量非结构化数据处理的Hadoop/MapReduce处理技术。这些技术的共同点都是在多台服务器上启动多个并行进程/线程,同时进行数据的读写和计算操作,以达到提升数据处理的目的。这些数据处理可以得到最终的数据处理结果,是在特定数据集下的一个精确结果,即输入不变,计算可靠的情况下,均可以得到一个最终的大数据处理结果。由于问题规模限制,大数据处理通常需要较长的执行时间,现有的查询处理技术只有在最终处理完成才能得到计算的结果。现有技术存在如下几个问题:1)由于处理过程较长,参与数据处理的进程数和硬件部件较多,整个处理过程中的任何失败可能导致无法得到最终的处理结果;只有在所有数据处理顺利完成才能得到最终结果;数据处理过程中只能等待,无法获得与最终结果接近的估计结果。2)有时数据处理只是为了得到统计值,在处理过程中,每完成一部分数据的统计即可得到一个近似的统计结果,而不需要等到所有数据处理完成。比如统计某地区的人均收入,统计完成一部分人的平均收入即可得到一个估算值,虽然与统计完所有人员的结果有一定的偏差,但这个近似的统计结果仍有一定的参考价值。3)数据处理时间较长时,用户如果中途退出计算,之前的所有的执行操作都会变为无效计算,这种情况在大数据处理时尤其耗费系统资源。

技术实现要素:
本发明旨在针对现有技术存在的以上问题,提供一种数据查询处理方法,通过不断扩大数据处理样本进行计算,在得到最终结果的过程中始终可以得到一个不断逼近最终结果的近似值。为实现上述目的,本发明的技术方案为:一种数据查询处理方法,包括如下步骤:将原始数据集拆分成多个数据子集;对第一个数据子集进行查询,将查询结果作为近似结果;依次对各个数据子集进行查询,并利用其查询结果对前次近似结果进行修正;按此操作完成全部数据子集的查询,获得最终查询结果。一种数据查询处理方法,包括如下步骤:从原始数据集中拆分出第一个数据子集,并对第一个数据子集进行查询,并将其查询结果作为近似结果;继续从原始数据集中拆分出下一数据子集,对该数据子集进行查询,并利用其查询结果对前一近似结果进行修正;按此操作完成原始数据集全部数据的拆分和查询,获得最终查询结果。所述拆分是按数据库分区进行拆分,或者按数据量进行拆分。所述修正具体为:利用当前数据子集的查询结果以增量的方式对前一近似结果进行修正。每次修正完成后,保存修正后的近似结果。在查询处理过程中,当用户提出查询中止请求后,将最后一次经修正后的近似结果作为最终查询结果返回给用户。将当前查询处理的进度返回给用户。所述当前查询处理的进度为当前已处理的数据子集个数与拆分的数据子集总数的比例。当用户提出查询中止请求时,如果已获得当前数据子集的查询结果,则等待对近似结果的修正完成后返回本次修正后的近似结果。本发明提供的一种数据查询处理方法,采用数据分片和逐步处理的思想,使得用户在系统处理过程中随时可以中止查询,不必等到所有数据都处理完成,就可以得到一个较为准确的近似值,避免了长时间的等待,同时也在一定程度上节省了大量的计算资源。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书以及附图中所特别指出的结构来实现和获得。附图说明图1为本发明实施例的数据查询示意图;图2为本发明实施例的另一数据查询示意图;图3为本发明实施例的查询执行与中止查询流程示意图。具体实施方式为了使本发明的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是所有实施例的穷举。本发明实施例提出了一种数据查询处理方法,采用本发明实施例的数据查询处理方法可以大幅提高查询效率,特别是对大数据的查询处理尤为明显。所谓大数据,指的是一些无法通过常规方法进行处理的大量数据集,其特点是数据量巨大、分散分布在多台存储设备上、需要大量机器并行的协同进行处理。本发明实施例提供的数据查询处理方法采用的是一种渐进的查询方法,通过数据拆分、逐步处理进而计算出查询处理的结果。所谓渐进查询,也就是说,查询过程中随着已处理数据的不断增加,查询结果处于一个不断精确和细化的过程。渐进查询具体过程为:查询引擎对已读取到的部分分片数据进行计算,并显示这部分数据计算的结果;随着新的分片数据的不断读入,会不断的对之前的计算结果进行修正。随着处理的分片数的增加,计算的结果也就逐步逼近最终结果,并当读取完所有分片后最终得到一个固定的值,也即最终查询结果。渐进查询处理时,在整个过程中的任何时刻点都可以得到一个与最终结果相近似的处理结果,也可以称之为中间结果或近似结果。直到最后所有数据处理完成,即得到了最终的精确查询结果。本发明实施例提出的数据查询处理方法,如图1所示,包括如下步骤:首先将原始数据集拆分成多个数据子集;对第一个数据子集执行查询操作,并将其查询结果作为近似结果;接下来,再对第二个数据子集执行操作,利用第二个数据子集的查询结果对上述近似结果进行修正,...,以此类推,依次对各个数据子集进行查询,并利用其查询结果不断对近似结果进行修正;按照这样的操作方式完成全部数据子集的查询,并同时也获得了最终查询结果。为了提高数据拆分和查询的效率,本发明实施例还提出了一种数据查询处理方法,将数据拆分操作与查询处理操作合并,这样只需进行一次数据扫描即可,不必对数据进行多次扫描。如图2所示,包括如下步骤:从原始数据集中拆分出第一个数据子集,并且对这个数据子集执行查询操作,得到查询结果,并将该查询结果作为近似结果;系统继续从原始数据数据集中拆分出第二个数据子集,同时对第二个数据子集进行查询,并利用其查询结果对上面的近似结果进行修正;...以此类推,不断从原始数据集中拆分出下一数据子集,并对该数据子集执行查询操作,利用这个数据子集的查询结果对前一近似结果进行修正;按此操作完成原始数据集中全部数据的拆分和查询,并获得最终的查询结果,即最后一次修正后的近似结果。可以看出,本发明实施例所提出的两种数据查询处理方法主要从三个方面考虑:首先要考虑如何对数据库中的数据进行拆分操作,其次在数据查询处理过程中如何实现对近似结果结果的修正,最后,如果在数据查询处理过程中,用户在不同时间点执行了查询中止或停止操作,系统又应该如何处理。因此,下面分别从这三个方面一一介绍如下:一、数据拆分:数据拆分是按照一定的方法把需要处理的数据集分割成多个子集(即数据分片),而所有子集的数据合并在一起就是查询需要处理的完整数据集。如图1所示,假设查询处理的原始数据集为Q,拆分后的数据子集为Q1、Q2、Q3...Qn。数据拆分时遵循如下原则:1)查询原始数据集是所有数据子集的并,即Q=Q1∪Q2∪Q3∪...∪Qn;2)任意两个数据子集之间数据没有重叠,也即Qi∩Qj=Φ(i≠j)。通常数据的拆分可以有多种方式,比如,按照已有的数据库分区进行拆分,每个分区内的数据为一个数据子集。目前商业数据库都有数据分区技术,如Hash、Range等分区;也可以按照数据量进行拆分,如每10万条记录或者每256MB数据一个数据子集等。为了提高数据拆分和查询的效率,数据拆分通常不必关心数据的属性,即拆分无需额外的数据扫描,可以和查询处理的数据合并,如图2所示。即拆分和查询只需要一次扫描,而不必对数据进行多次扫描。二、结果修正:由于查询引擎是按照数据流的方式对数据进行处理的,经过计算得到相应的分片结果,因此,完成数据拆分后,查询引擎在对数据进行处理时需要按照拆分后的数据子集逐步读取每个子集进行处理。当第一个子集Q1处理完成以后,形成的结果为R1,将结果R1保存在近似结果中。后续,每个数据子集Qi数据处理完成以后,可以用当前数据子集Qi的查询结果Ri对之前的近似结果进行修正。在逐一对每个数据子集进行数据处理的过程中,当前数据子集的处理结果都会用于与之前经修正的中间结果或者说是近似结果进行计算,以达到对近似结果进一步修正的目的。当查询条件为查询总额/总数时,计算方式可以将当前数据子集的查询结果与之前经修正的近似结果进行增量求和运算,也即,每次查询总额计算结果Si可以表示为:Si=Si-1+Δi,而增量Δi则可以表示为:Δi=(Ri-Si-1/n)/(i/n)。其中S0=0,i≥1,i/n表示查询进度,i/n*100%即为查询进度的百分比。在返回给用户查询总额结果的同时,还会将查询进度的百分比也返回给用户。例如,用户查询条件是查询用户一季度消费总额,假设一月份的消费总额为R1=100(万元),二月份的消费总额为R2=200(万元),三月份的消费总额为R3=300(万元)。查询完一月份的数据子集以后,显示给用户的查询总额近似结果为S1=S0+Δ1=0+(R1-0)/(1/3)=300(万元);查询完二月份的数据子集以后,查询总额结果为S2=S1+Δ2,Δ2=(R2-S1/3)/(2/3)=(200-300/3)/(2/3)=150(万元),显示给用户的查询总额近似结果为S2=300+150=450(万元);查询完三月份的数据子集以后,查询总额结果为S3=S2+Δ3,Δ3=(R3-S2/3)/(3/3)=300-450/3=150(万元),显示给用户的查询总额近似结果为S3=450+150=600(万元)。如果用户的查询条件是要计算数据的平均值,那么就需要利用求平均值的计算公式来求得平均值。也即,每次的平均值近似结果Ti可以表示为:Ti=Ti-1+Δi,其中,增量Δi=(Ri-Ti-1)/i,i≥1。例如,用户查询条件是查询北京7月到9月的平均温度,假设7月份的平均温度为R1=26℃,8月份的平均温度为R2=34℃,9月份的平均温度为R3=24℃。当查询完7月份的数据子集后,显示给用户的平均温度值T1=R1=26℃;当查询完8月份的数据子集后,显示给用户的平均温度值T2=T1+Δ2,Δ2=(R2-T1)/2=(34-26)/2=-4,那么显示给用户的平均温度值T2=26+4=30℃;当查询完9月份的数据子集后,显示给用户的平均温度值T3=T2+Δ3,Δ3=(R3-T2)/3=(24-30)/3=(-2),那么显示给用户的平均温度值T3=30+(-2)=28℃。本发明实施例仅以求和、求平均值为例进行了说明,上述计算可以根据用户查询的实际需要进行不同的计算公式,本发明对此不作限制。本领域技术人员在了解本发明的思想的基础上可以对计算方式进行各种变化,然而这些变化也应在本发明的保护范围之内。处理过程中保存上一次修正后的结果(这个结果也是最终查询结果的一个近似值)以及当前处理的增量结果Δ即可。当一个数据子集处理完以后再进行一次合并,并不需要保存所有的增量结果Δ的数据。因此,采用本发明的渐进查询方式,不会引入过多的存储开销。三、查询停止采用本发明实施例的渐进查询,只要有一个数据子集处理完成,在处理过程中任意时刻停止查询都可以获得查询最终结果的近似值,也即近似结果。采用近似结果和逐步增量合并的方式,查询引擎对近似结果和增量Δ分别进行了保存。当用户提出查询中止的请求以后,查询引擎可将上一次修正后的近似结果返回,同时返回一个查询处理的进度百分比。如果经数据拆分后总的数据子集数量为n个,而已经处理完的数据子集数量为k个(也即,表示正在处理第k+1个数据子集),则近似结果和百分比分别表示为:本次近似结果=上次近似结果+Δ2+...+Δk,(k<=n)处理进度百分比=k/n*100%也就是说,只要处理完一定数量的数据子集,比如k个分片数据,就可以计算出这k个分片数据的查询结果,也即最终结果的一个近似值。当k=n时,表示所有分片的数据处理完成,就可以得到最终的查询结果。对于本发明实施例提供的边拆分边查询的数据查询处理方法,由于不知道最终拆分的数据子集数量,因此,对于进度百分比的计算可以采用已处理数据与原始数据集的比值来表示。假设原始数据集共有N条数据,而已经处理完的数据数量为M条,则处理进度百分比=M/N*100%。对于进度百分比的计算表示,本领域技术人员可以有其他的计算方式,但均应属于本发明的保护范围之内。当然,在整个查询过程中,用户随时可能中止或停止查询。对于这种情况,本发明实施例也提供了相应的解释和说明,完整的渐进查询处理和中止查询的过程如图3所示。渐进查询引擎循环读取数据子集进行处理,并不断的对近似结果进行增量修正。用户可以随时中止查询,得到查询的近似结果。查询中止时根据用户不同的中止时间会有不同的中止点,本发明实施例仅按不同的场景给出三个主要的中止点作为例子进行说明,如图3中所示。用户提出的查询中止请求将停止查询执行,并读取上一次保存的近似结果进行返回,对于三个主要的中止点的操作方式介绍如下:1)中止点1,也即读取或扫描下一个数据子集时中止。当用户在这样的时刻中止查询时,系统则直接返回上一次合并后的近似结果,并退出查询。2)中止点2,也即系统计算增量结果Δi时用户中止查询,这时系统会停止增量计算,并返回上一次合并后的近似结果,然后退出查询。3)中止点3,也即增量结果计算完毕,正在进行合并时用户中止查询。对于这种情况本发明提供两种处理方式:一种是强制退出方式,即直接返回上一次的近似结果然后退出查询;另一种是默认方式,即合并完成以后返回本次合并后的结果,然后退出查询。本发明实施例的渐进查询方法,类似于一种抽样计算,采用分片和逐步处理的思想,通过对部分数据的计算得到一个近似值,并返回一个已处理部分的百分比。这样使得用户不必等到所有数据都处理完成,就可以对总体的查询结果有一个较为准确的近似的把握,避免了较长时间的等待。除此之外,用户也可以在处理过程中随时停止查询处理,节省大量的计算资源。本发明实施例的渐进查询方法适用于大部分的数据处理的应用场景。实施例一、场景为统计某大型电子商务网站的所有客户的消费数据。该网站的客户数据超过千万,且消费记录数据量有十亿条。当需要统计某个时间段内客户的消费总额等数据时,则可以采用部分统计的方式,不断修正统计结果。首先将消费记录按照数据量的大小进行拆分,当对第一个数据子集统计完成以后,即可得到已统计的部分客户(即第一个数据子集中的数据)的消费总额的数据;当处理完第二个数据子集以后,可以得到前两个数据子集的客户的消费总额的结果。这样逐一对每个数据子集进行处理,不断的对统计结果进行修正,直到所有的数据处理完成,就可以得到最终的统计结果。用户如果在数据查询的中途提出中止查询请求,采用本发明的技术方案,还是一样可以获得已处理部分数据的统计结果。比如,想要查询5.1期间客户的消费总额,那么首先需要将消费记录进行拆分,可以按天进行拆分,还可以按消费记录的数量或者条数将消费记录拆分成多个数据子集。假设5.1期间客户消费记录数共400万条,本发明以按每100万条消费记录分成一个数据子集为例进行说明如下:当系统查询完第一个数据子集(也即前100万条消费记录)后,假设第一个数据子集的计算结果为R1=1亿元,那么计算出近似的客户消费总额为S1=1亿/(100万/400万)=4亿元,查询进度比为100万/400万*100%=25%;系统继续查询,当查询完第二个数据子集后,假设第二个数据子集的消费总额为R2=3亿元,那么增量Δ2=(3亿元-4亿元/4)/(2/4)=4亿元,计算出近似的客户消费总额为S2=S1+Δ2=4亿元+4亿元=8亿元,当前查询进度比为200万/400万*100%=50%;系统继续查询,如果系统正在查询第200万零500条记录(也即正在查询第三个数据子集),这时用户点击中止查询按钮的话,系统就会将按照此前的两个数据子集计算的近似客户消费总额(也即8亿元)反馈给用户,并将当前处理进度百分比(50%)也反馈给用户。虽然这个结果可能会与最终结果有一定的偏差,但在最短的时间内得到一个近似结果,可以作为最终查询结果的一个参考。实施例二、场景为统计某移动通信运营商某一年度的用户月均通话时长。首先将该运营商该年度的全部通话记录以月为单位拆分成12个数据子集,查询过程具体如下:当系统查询完1月(第一个数据子集)的通话记录以后,假设1月的用户平均通话时长R1为300分钟,那么近似的用户月均通话时长T1为300分钟,查询进度百分比为1/12*100%=8.3%;系统继续查询,当查询完2月(第二个数据子集)的通话记录以后,假设2月用户平均通话时长R2为460分钟,那么近似的用户月均通话时长T2=T1+Δ2=T1+(R2-T1)/2=300分钟+(460分钟-300分钟)/2=380分钟,查询进度百分比为2/12*100%=16.7%;系统继续查询,当查询完3月(第三个数据子集)的通话记录后,假设3月用户平均通话时长R3为410分钟。如果用户这时发出中止查询请求,那么系统可以中止计算、直接返回上一次的查询近似结果,也即380分钟;当然系统也可以继续计算操作,然后返回本次计算的近似结果,也即T3=T2+Δ3=T2+(R3-T2)/3=380+(410-380)/3=390分钟,查询进度比为3/12*100%=25%。以上实施例仅用以说明本发明的技术方案而非对其进行限制,在不背离本发明精神及其实质的情况下,本领域技术人员可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1