一种用于流计算的数据处理方法与设备
技术领域
本申请涉及计算机领域,尤其涉及一种用于流计算的数据处理技术。
背景技术
在分布式流计算过程中,会产生很多中间数据结果,通常后续计算需要应用之前计算的中间数据结果。一般做法是在规定时间内,将所述中间数据结果保存在对应内存中,以便快速地满足后续计算需要,但是当流处理信息量增大,有限的内存存储过多的中间数据结果会导致内存溢出,甚至使得整个流计算无法进行。
此时,现有技术通过引入辅助存储装置,将中间结果保存到辅助存储装置中并不断地释放内存空间来解决内存溢出问题。但是在实际计算中,对于接收到的流消息,需要先进行一次内存查找,当判断不存在时,需要再进行一次辅助存储装置查找,若流消息是新消息,则所述辅助存储装置查找的时间就是被浪费的时间,所以当全部消息中新消息的比重较大时,会带来极大的时间开销,对整个流计算系统的计算速度产生较大的不利影响。
发明内容
本申请的目的是提供一种用于流计算的数据处理方法与设备。
根据本申请的一个方面,提供了一种用于流计算的数据处理方法,包括:
获取流计算信息中的目标消息;
通过布隆过滤器判断对应内存是否包括所述目标消息所对应的中间数据结果;
当判断所述对应内存包括所述中间数据结果时,检验所述中间数据结果是否已存在;
基于检验所得信息,对所述目标消息执行相应的数据计算。
根据本申请的另一方面,还提供了一种用于流计算的数据处理设备,包括:
第一装置,用于获取流计算信息中的目标消息;
第二装置,用于通过布隆过滤器判断对应存储是否包括所述目标消息所对应的中间数据结果;
第三装置,用于当判断所述对应存储包括所述中间数据结果时,检验所述中间数据结果是否已存在;
第四装置,用于基于检验所得信息,对所述目标消息执行相应的数据计算。
与现有技术相比,本申请通过布隆过滤器检测目标消息对应的中间结果信息是否已经存在,以及对被判断为已存在的中间结果信息的进一步检测,实现对目标消息的流计算;由于布隆过滤器具有非常好的空间和时间效率,本申请显著减少了内存查询所需的时间,从而有效提高了流计算的实时性,并减少了响应延迟、改善了用户的使用体验。同时,由于布隆过滤器极低的误判率,它避免了现有技术中当接收到新的流消息时绝大多数需要到辅助存储中进行的无用查找。此外,本申请克服了布隆过滤器因存在误判而导致时延增加而不能应用于流计算的技术偏见,通过对由布隆过滤器判断为已存在的中间结果信息进行进一步的检验,来排除布隆过滤器可能导致的误判结果。在本申请中布隆过滤器的误判所带来的不利影响是产生极少量无用的辅助存储查找,但是它所损耗的不必要时间非常少。总体而言,本申请与现有技术相比可以保障在不影响内存工作的前提下最大程度地提高流计算系统的计算速度。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种用于流计算的数据处理设备示意图;
图2示出根据本申请另一个方面的一种用于流计算的数据处理方法流程图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种用于流计算的数据处理设备示意图。所述用于流计算的数据处理设备1包括第一装置101、第二装置102、第三装置103和第四装置104。
其中,第一装置101获取流计算信息中的目标消息;第二装置102通过布隆过滤器判断对应存储是否包括所述目标消息所对应的中间数据结果;第三装置103当判断所述对应存储包括所述中间数据结果时,检验所述中间数据结果是否已存在;第四装置104基于检验所得信息,对所述目标消息执行相应的数据计算。
具体地,所述用于流计算的数据处理设备1的第一装置101获取流计算信息中的目标消息。在此,所述流计算的应用场景包括实时计算,例如,所述流计算所要完成的任务一般可以抽象为基于一个或是多个业务维度的完成的实时计算。例如,在电子商务平台中计算商品成交金额,可以设置一个维度,如卖家,设定基于卖家的交易信息计算成交金额,如某个确定卖家的实时交易金额的计算;也可以设置多个维度,如卖家、商品类目,设定基于卖家和商品类目两个维度的信息计算商品的成交金额。所述流计算信息中的目标消息包括进行对应流计算所需要的具体的数据信息,如确定的卖家的交易信息,确定的商品类目对应的成交信息,同时,所述目标消息中也可能包括一些所述目标流计算并不需要的其他信息,例如其他业务维度的数据信息等等。对于目标流计算,优选地,可以先从目标消息中筛选出当前计算中实际需要的有用信息,并基于所述有用信息进行后续的操作。此外,所述流计算信息中的目标消息的获取可以基于实际的需要设置一定的获取周期,例如每隔T时间获取一次目标消息等。
在此,本领域技术人员应能理解,上述流计算的应用场景包括实时计算仅为举例,其他应用场景若是可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
接着,所述用于流计算的数据处理设备1的第二装置102通过布隆过滤器判断对应存储是否包括所述目标消息所对应的中间数据结果。
具体地,在此,所述对应存储包括但不限于内存、或是各类磁盘、软盘等辅助存储。优选地,所述布隆过滤器一般保存在相应内存中,是一种空间效率很高的随机数据结构,其利用位数组表示一个集合,并能够判断一个元素是否属于所述集合。在此,本领域技术人员应该能够理解,所述布隆过滤器利用位数组匹配对应的目标消息,可以认为所述布隆过滤器对于曾存在于所述内存的目标消息保存了与其对应的消息标识,进而对于当前目标消息,可以通过与所述布隆过滤器中保存的消息标识进行匹配,从而判断所述目标消息是否曾经存在于所述内存。基于所述目标消息与所述中间数据结果的对应关系,所述内存本应该包含曾经存在于所述内存中的目标消息对应的中间结果数据,但是为了避免所述内存溢出,部分目标消息对应的中间结果数据被置换出所述内存,所以可能存在部分目标消息对应的中间结果数据在当前所述内存中查找不到,但同时,因为内存中的中间结果数据会全部保存在辅助存储中,进而基于所述目标消息与所述中间数据结果的对应关系,可以判断对应辅助存储中是否包括所述目标消息所对应的中间数据结果。进一步,基于布隆过滤器的原理,所述布隆过滤器做出所述目标消息未曾存在于内存中的判定是准确的,而若是判断所述目标消息曾经存在于所述内存中则可能出现一定的误差,需要进一步检验。在此,虽然布隆过滤器存在误判,但是其误判率很低,同时,所述布隆过滤器还能够在占用较少内存空间的同时提供高效的判断操作,所以如果对布隆过滤器的存在误判可能的判断结果进一步进行合理检验,就可以很好地发挥布隆过滤器在实时计算中作为集合元素存在的判断方法的优势,从而在保障不影响内存工作的前提下最大程度地提高了流计算系统的计算速度。
此外,所述中间数据结果包括所述流计算对应的历史计算结果,也是基于目标消息进行当前计算的数据基础。例如,计算一定周期的某一商品交易额的增长幅度,则需要知道当前该商品的交易额以及同一商品在历史周期中的交易额,而所述历史周期中该商品的交易额即保存为所述流计算的目标消息对应的中间数据结果。更进一步,若是所述目标消息信息量较大,可以对其进行信息筛选,从所述目标消息中初步获得有用信息,并对筛选出的有用信息进行保存,和所述历史计算结果一样作为中间数据结果,提供给后续计算取用。
在此,本领域技术人员应能理解,上述布隆过滤器仅为举例,其他判断方法若是可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
接着,所述用于流计算的数据处理设备1的第三装置103当判断所述对应存储包括所述中间数据结果时,检验所述中间数据结果是否已存在。在此,通过所述布隆过滤器对到达的目标消息进行初次判断,会出现对应的不同结果,例如,其中之一的结果是目标消息对应的中间结果曾经存在于所述内存中,但是此时会存在一定的误差。在此,本领域技术人员应该能够理解,基于布隆过滤器的原理,所述布隆过滤器占用内存固定的区域,当越来越多的目标消息对应的消息标识保存在布隆过滤器中时,不同消息标识可能在所述布隆过滤器中的同一位置上产生重叠,从而发生“碰撞”,布隆过滤器产生误判,错误的判断所述目标消息对应的中间数据结果曾经存在所述内存中。所以当布隆过滤器判断所述中间数据结果曾经存在于内存中时,并非一定是最终结果,还需要进行进一步检验,例如,验证在所述内存或是所述内存对应的辅助存储中是否确定有所述目标消息对应的中间数据结果存在。
接着,所述用于流计算的数据处理设备1的第四装置104基于检验所得信息,对所述目标消息执行相应的数据计算。具体地,由于布隆过滤器存在一定的误判率,所以对于所述判断可能会存在不同的检验结果,例如,所述检验所得信息可以是布隆过滤器判断准确,所述目标消息对应的中间数据结果的确存在于对应的存储装置中;所述检验所得信息也可以是布隆过滤器误判,所述目标消息对应的中间数据结果不存在于对应的存储装置中,所述目标消息是第一次到达所述内存。基于不同的检验所得信息,所执行的数据计算可以有所不同。例如,对于曾到达过所述内存的所述目标消息,所述内存中、或是所述内存对应的辅助存储中保留了与所述目标消息对应的中间数据结果,则此时,通过当前所述目标消息的具体要求和对应的中间数据结果等信息,可以执行相应的数据计算。在此,对所述目标消息执行的数据计算的基础数据来源于对应的中间数据结果,所述中间数据结果可以包括对应数据计算的历史计算数据,也可以包括对每一次目标消息进行筛选后得到的有用信息。又如,若所述目标消息是第一次到达所述内存,则所执行的数据计算是对应目标消息的初始指标计算,所述初始指标计算的基础数据大部分来源于所述目标消息。
优选地,当判断所述对应存储不包括所述中间数据结果时,所述第四装置104对所述目标消息执行初始指标计算,并将初始指标计算中的中间数据结果存储于所述对应存储。具体地,通过所述布隆过滤器对到达的目标消息进行初次判断,会出现对应的不同结果,其中包括目标消息对应的中间数据结果未曾存在于所述内存中。基于所述布隆过滤器的原理,对于集合元素不存在的判断不存在误判可能,所以此时,基于所述目标消息并不存在历史计算结果,可以对所述目标消息执行初始指标计算。
在此,本申请通过布隆过滤器对于到达的目标消息对应的中间结果信息是否曾经存在于内存中进行初步判断,对于判断为曾经存在于内存的中间结果信息,再针对可能存在的误判进行进一步的检验,由于布隆过滤器具有高效率和低错误率,所以误判的可能非常低,所损耗的不必要时间非常少,从而在保障不影响内存工作的前提下最大程度地提高了流计算系统的计算速度。
在一个优选实施例中,检验所述中间数据结果是否已存在包括:检验所述中间数据结果是否存在于所述对应内存其中,所述第四装置104若所述检验所得信息包括所述中间数据结果存在于所述对应内存,根据所述中间数据结果对所述目标消息执行相应的数据计算。
具体地,在所述用于流计算的数据处理设备1中,所述的数据计算,包括所述基于中间数据结果进行的数据计算,也包括基于新的业务维度进行的初始数据计算,都是在内存中进行的,同时,所述内存中会保留所述目标消息对应的消息标识,以及所述数据计算对应的更新或是初设的中间数据结果。进一步,优选地,为了避免内存溢出,内存中的消息标识与对应的中间数据结果会定期置换到辅助存储,即内存中的数据会定期清除,辅助存储中保存有全部消息标识以及对应的中间数据结果。所以此时,若是所述布隆过滤器判断所述中间数据结果曾经存在于内存是正确的,则所述目标消息有可能在对应的内存中匹配相应的消息标识,并检验到对应的所述中间数据结果。从而基于所述目标消息对应的所述中间数据结果和目标消息的具体内容完成对应的数据计算。在此,所述内存的置换方法可以根据具体计算场景的使用情况选择FIFO(先进先出)、LRU(最久未使用)、OPT(最佳置换)等不同的内存置换算法。
优选地,检验所述中间数据结果是否已存在还包括:若经检验所述中间数据结果不存在于所述对应内存,检验所述中间数据结果是否存在于对应辅助存储;其中,所述第四装置104还用于若所述检验所得信息包括所述中间数据结果存在于所述对应辅助存储,将所述中间数据结果读入所述对应内存,并根据所述中间数据结果对所述目标消息执行相应的数据计算。
具体地,所述用于流计算的数据处理设备1在内存中获得目标消息时,为了避免内存溢出并影响整个流计算的进程,优选地,为所述的内存匹配一定的辅助存储,包括但不限于各类磁盘、软盘等可以进行存储和读取的装置。在此,所述辅助存储中可以与内存同时保留所述目标消息对应的消息标识,以及所述数据计算对应的更新或是初设的中间数据结果。因此,对于确定曾经存在于内存的目标消息,其对应的中间数据结果若是在内存中不存在,可能因为已经被内存的置换操作换出,但是在与所述内存对应的辅助存储中有可能找到对应的中间数据结果。进一步,需要将所找到的中间数据结果加载到所述内存中,从而对所述目标消息进行对应的数据计算。在此,为了避免流计算过程中内存的溢出,优选地,将所有在内存中进行过计算的对应目标消息的消息标识和对应的中间数据结果都备份写入对应的辅助存储中,所以只要所述目标消息对应的中间数据结果存在于所述内存或是对应的辅助存储中,相应的寻找和读取操作对应的时间开销都是必要的,但由于布隆过滤器的误判使得经过判断和检验后,在所述辅助存储中都无法找到所述中间数据结果时,对所述目标消息耗费的查找检验时间则可以通过对布隆过滤器的设定而降低,例如,通过对布隆过滤器的工作参数进行设定来降低误判率,从而可以有效地节省不必要的消耗时间,保证流计算系统的计算速度。
更优选地,若所述检验所得信息包括所述中间数据结果不存在于所述对应辅助存储,所述第四装置104对所述目标消息执行初始指标计算;并将初始指标计算中的中间数据结果存储于所述对应内存。
具体地,当所述检验所得信息包括所述中间结果不存在所述对应辅助存储,可以得出所述布隆过滤器出现了误判。此时所述目标消息在所述内存或所述对应辅助存储中都不存在对应的中间数据结果。优选地,基于所述目标消息筛选出目标数据计算所需要的有用数据信息,执行初始指标计算。并且可以将初始指标计算的中间数据结果与所述目标消息的消息标识对应存储在所述对应内存中。更进一步,还可以将所述初始指标计算的中间数据结果与所述目标消息的消息标识对应存储在与所述内存对应的辅助存储中。
优选地,所述第四装置104根据所述数据计算的结果更新对应存储中的所述中间数据结果。
具体地,对于所述数据计算,包括所述目标消息基于所述中间数据结果进行的指标计算,也包括所述目标消息进行的初始指标计算,优选地,都是在所述内存中进行。其中,对于计算得到的中间数据结果可以更新到所述内存中和所述对应辅助存储中。同时,对于进行初始指标计算的目标消息,可以将其对应的消息标识更新到所述布隆过滤器中保存,并可以同时将其保存在对应的内存和所述对应辅助存储中。在此,优选地,所述内存和所述对应辅助存储中数据的更新可以是同时进行,并且在所述内存或是所述对应辅助存储中,所述消息标识与对应的所述中间数据结果可以是一一对应匹配的。在此,可以利用所述对应辅助存储大容量的优势,将所有在内存中进行过数据计算的目标消息和对应的中间数据结果都进行保存,并与内存同步更新,则当所述内存由于计算需要和空间限制进行内容置换时,被置换的内容就可以在对应的所述辅助存储中找到,并基于所述布隆过滤器的高效快速地判断,从而可以为当前目标消息提供历史计算数据,使得对应流计算可以顺利、高效地进行。
在另一个优选实施例中,所述用于流计算的数据处理设备1中所述第二装置包括第一单元(未示出)和第二单位(未示出),其中,第一单元通过布隆过滤器检测所述目标消息是否已存在;第二单元用于若所述目标消息已存在,判断对应存储包括所述目标消息所对应的中间数据结果。
具体地,判断所述,判断所述对应存储中是否包括所述目标消息所对应的中间数据结果,优选地,检测所述中间数据结果对应的目标消息是否存在于所述对应存储,如,对应内存中。例如,利用布隆过滤器进行判断,假设布隆过滤器使用m bit的数组来保存目标消息,初始时,所述布隆过滤器中,每一位都设置为0。对于每一个第一次到达内存的目标消息,布隆过滤器会使用k个相互独立的哈希函数对其映射,通过映射,所映射的k个值对应与布隆过滤器的k个位置上的0则变为1。当一个目标消息到达内存时,布隆过滤器会使用上述k个哈希函数对所述目标消息进行映射,若映射对应的k个位置上都已经是1,则判断所述目标消息曾经存在于所述内存中;若至少一个位置上仍然是0,则判断所述目标消息不曾存在于所述内存中。此时,所述布隆过滤器做出所述目标消息不曾存在于内存中的判断是准确的,而若是判断所述目标消息曾经存在于所述内存中则可能出现一定的误差,需要进一步检验。又因为所述中间数据结果与对应的目标消息是对应的,所以可以据此推定所述目标消息对应的中间数据结果是否曾经存在于所述内存中。在此,本领域技术人员应该能够理解,所述布隆过滤器利用位数组匹配对应的目标消息,可以认为所述布隆过滤器中保存了与所述目标消息对应的消息标识,通过所述消息标识可以寻找到对应的所述目标消息,并进一步确定所述中间数据结果。
优选地,所述用于流计算的数据处理设备1还包括第五装置(未示出),用于设置布隆过滤器的工作参数;其中,所述第一单元用于:通过所述布隆过滤器及所述工作参数检测所述目标消息是否已存在。
具体地,所述布隆过滤器对目标消息的判断包括目标消息对应的中间数据结果从未存在于所述内存中,此时布隆过滤器的判断是不存在误差的;也包括目标消息对应的中间数据结果曾经存在于所述内存中,此时布隆过滤器的判断存在一定的误差,这是由布隆过滤器本身的工作原理决定的,在此,本领域技术人员应该能够理解,基于布隆过滤器的原理,不同目标消息在布隆过滤器上都对应着一组哈希值,若是一个从未到达过所述内存的当前目标消息,它对应的布隆过滤器上的多个映射位置分别被在先到达的目标消息所映射过,即所有与所述当前目标对应的位置上的0都变为1,则所述当前目标消息与其他多个目标消息发生“碰撞”,布隆过滤器产生误判,错误的判断所述目标消息对应的中间数据结果曾经存在于所述内存中。所以当布隆过滤器判断所述中间数据结果曾经存在于内存时,需要进行进一步检验,验证在所述内存或是所述内存对应的辅助存储中是否确定有所述目标消息对应的中间数据结果存在。
例如,可以进入内存中寻找与所述目标消息相匹配的中间数据结果,若是存在,则证明所述布隆过滤器的判断正确;若是不存在,则要到所述内存对应的辅助存储中进一步进行验证,若是在所述辅助存储中寻找到所述目标消息匹配的中间数据结果则同样证明所述布隆过滤器的判断正确;若是在所述辅助存储中找不到匹配的目标消息对应的中间数据结果,则可以推定,所述目标消息不曾到达过内存,所述布隆过滤器判断失误。在此,所述流计算判断目标消息的存在是为了读取与之相对应的中间数据结果而进行对应的当前指标运算,所以只要在内存中或对应的辅助存储中找到匹配的中间数据结果,所花费的时间都是为了避免流计算中内存溢出的必要开销,同时,最后在所述辅助存储进行查询后依然没找到所述中间数据结果的目标消息,其对应的内存查询和所述辅助存储查询所消耗的时间是不必要的,也是应该优化的。
例如,假设待处理的目标消息量为N,全部目标消息中新成员的比例是k(0<k≤1),布隆过滤器的误判率为f(0<k≤1)做一次布隆过滤器查找的时间是t,做一次辅助存储查找的时间是T,则所述不必要的开销时间S=Nt+kNfT,由此可知,所述过滤器的误判率越小,所述不必要的开销时间越小,对于实时计算的延迟越短,流计算的效果也就越好,而所述布隆过滤器的误判率可以通过设置布隆过滤器的工作参数来改变和优化。所述布隆过滤器的工作参数包括但不限于所述布隆过滤器中用来存储所述目标消息映射的总位数、所述布隆过滤器为所述目标消息设置的哈希映射的个数、利用所述布隆过滤器进行判断的目标消息的个数等等,这些工作参数可以影响到所述布隆过滤器的误判率的大小,例如,在其他条件不变的情况下,所布隆过滤器用来存储所述目标消息映射的总位数越多,利用所述布隆过滤器进行判断的目标消息的个数越少,布隆过滤器的误判率就越低,带来的实时计算的延迟就越短,流计算的效果就越好。
更优选地,所述第五装置(未示出)根据所述流计算信息所对应的应用相关信息设置布隆过滤器的工作参数。
具体地,所述应用相关信息可以包括所述流计算对应的应用延迟指标信息、消息池数据容量等和具体流计算相关的各方面信息。在此,所述流计算信息所对应的应用相关信息可以基于每一个流计算的具体应用场景和应用需要而有所差异,如,流计算A所允许的应用延迟时间为t1,所可能接受的目标消息总量约Q1;而流计算B所允许的应用延迟时间为t2,所可能接受的目标消息总量约Q2。基于不同流计算的应用相关信息可以设置布隆过滤器的不同工作参数,从而得到适用于不同计算场景的不同的布隆过滤器的误判率,进而,对最终流计算的耗时和最终计算效果产生直接影响。同时,在计算进程过程中,也可以修改原有的布隆过滤器的工作参数来适用实时的计算要求,例如,若是在计算进程中,希望保存布隆过滤器的误判率不变,则当映射保存进入布隆过滤器的目标消息增加时,所述布隆过滤器中用来存储所述目标消息映射的总位数也需要按照一定的幅度同时增加。
图2示出根据本申请另一个方面的一种用于流计算的数据处理方法流程图。
其中,在步骤S201中,获取流计算信息中的目标消息;在步骤S202中,通过布隆过滤器判断对应存储是否包括所述目标消息所对应的中间数据结果;在步骤S203中,当判断所述对应存储包括所述中间数据结果时,检验所述中间数据结果是否已存在;在步骤S204中,基于检验所得信息,对所述目标消息执行相应的数据计算。
具体地,在步骤S201中,所述用于流计算的数据处理设备1获取流计算信息中的目标消息。在此,所述流计算的应用场景包括实时计算,例如,所述流计算所要完成的任务一般可以抽象为基于一个或是多个业务维度的完成的实时计算。例如,在电子商务平台中计算商品成交金额,可以设置一个维度,如卖家,设定基于卖家的交易信息计算成交金额,如某个确定卖家的实时交易金额的计算;也可以设置多个维度,如卖家、商品类目,设定基于卖家和商品类目两个维度的信息计算商品的成交金额。所述流计算信息中的目标消息包括进行对应流计算所需要的具体的数据信息,如确定的卖家的交易信息,确定的商品类目对应的成交信息,同时,所述目标消息中也可能包括一些所述目标流计算并不需要的其他信息,例如其他业务维度的数据信息等等。对于目标流计算,优选地,可以先从目标消息中筛选出当前计算中实际需要的有用信息,并基于所述有用信息进行后续的操作。此外,所述流计算信息中的目标消息的获取可以基于实际的需要设置一定的获取周期,例如每隔T时间获取一次目标消息等。
在此,本领域技术人员应能理解,上述流计算的应用场景包括实时计算仅为举例,其他应用场景若是可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
接着,在步骤S202中,通过布隆过滤器判断对应存储是否包括所述目标消息所对应的中间数据结果。
具体地,在此,所述对应存储包括但不限于内存、或是各类磁盘、软盘等辅助存储。优选地,所述布隆过滤器一般保存在相应内存中,是一种空间效率很高的随机数据结构,其利用位数组表示一个集合,并能够判断一个元素是否属于所述集合。在此,本领域技术人员应该能够理解,所述布隆过滤器利用位数组匹配对应的目标消息,可以认为所述布隆过滤器对于曾存在于所述内存的目标消息保存了与其对应的消息标识,进而对于当前目标消息,可以通过与所述布隆过滤器中保存的消息标识进行匹配,从而判断所述目标消息是否曾经存在于所述内存。基于所述目标消息与所述中间数据结果的对应关系,所述内存本应该包含曾经存在于所述内存中的目标消息对应的中间结果数据,但是为了避免所述内存溢出,部分目标消息对应的中间结果数据被置换出所述内存,所以可能存在部分目标消息对应的中间结果数据在当前所述内存中查找不到,但同时,因为内存中的中间结果数据会全部保存在辅助存储中,进而基于所述目标消息与所述中间数据结果的对应关系,可以判断对应辅助存储中是否包括所述目标消息所对应的中间数据结果。进一步,基于布隆过滤器的原理,所述布隆过滤器做出所述目标消息未曾存在于内存中的判定是准确的,而若是判断所述目标消息曾经存在于所述内存中则可能出现一定的误差,需要进一步检验。在此,虽然布隆过滤器存在误判,但是其误判率很低,同时,所述布隆过滤器还能够在占用较少内存空间的同时提供高效的判断操作,所以如果对布隆过滤器的存在误判可能的判断结果进一步进行合理检验,就可以很好地发挥布隆过滤器在实时计算中作为集合元素存在的判断方法的优势,从而在保障不影响内存工作的前提下最大程度地提高了流计算系统的计算速度。
此外,所述中间数据结果包括所述流计算对应的历史计算结果,也是基于目标消息进行当前计算的数据基础。例如,计算一定周期的某一商品交易额的增长幅度,则需要知道当前该商品的交易额以及同一商品在历史周期中的交易额,而所述历史周期中该商品的交易额即保存为所述流计算的目标消息对应的中间数据结果。更进一步,若是所述目标消息信息量较大,可以对其进行信息筛选,从所述目标消息中初步获得有用信息,并对筛选出的有用信息进行保存,和所述历史计算结果一样作为中间数据结果,提供给后续计算取用。
在此,本领域技术人员应能理解,上述布隆过滤器仅为举例,其他判断方法若是可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
接着,在步骤S203中,当判断所述对应存储包括所述中间数据结果时,检验所述中间数据结果是否已存在。在此,通过所述布隆过滤器对到达的目标消息进行初次判断,会出现对应的不同结果,例如,其中之一的结果是目标消息对应的中间结果曾经存在于所述内存中,但是此时会存在一定的误差。在此,本领域技术人员应该能够理解,基于布隆过滤器的原理,所述布隆过滤器占用内存固定的区域,当越来越多的目标消息对应的消息标识保存在布隆过滤器中时,不同消息标识可能在所述布隆过滤器中的同一位置上产生重叠,从而发生“碰撞”,布隆过滤器产生误判,错误的判断所述目标消息对应的中间数据结果曾经存在所述内存中。所以当布隆过滤器判断所述中间数据结果曾经存在于内存中时,并非一定是最终结果,还需要进行进一步检验,例如,验证在所述内存或是所述内存对应的辅助存储中是否确定有所述目标消息对应的中间数据结果存在。
接着,在步骤S204中,所述用于流计算的数据处理设备1基于检验所得信息,对所述目标消息执行相应的数据计算。具体地,由于布隆过滤器存在一定的误判率,所以对于所述判断可能会存在不同的检验结果,例如,所述检验所得信息可以是布隆过滤器判断准确,所述目标消息对应的中间数据结果的确存在于对应的存储装置中;所述检验所得信息也可以是布隆过滤器误判,所述目标消息对应的中间数据结果不存在于对应的存储装置中,所述目标消息是第一次到达所述内存。基于不同的检验所得信息,所执行的数据计算可以有所不同。例如,对于曾到达过所述内存的所述目标消息,所述内存中、或是所述内存对应的辅助存储中保留了与所述目标消息对应的中间数据结果,则此时,通过当前所述目标消息的具体要求和对应的中间数据结果等信息,可以执行相应的数据计算。在此,对所述目标消息执行的数据计算的基础数据来源于对应的中间数据结果,所述中间数据结果可以包括对应数据计算的历史计算数据,也可以包括对每一次目标消息进行筛选后得到的有用信息。又如,若所述目标消息是第一次到达所述内存,则所执行的数据计算是对应目标消息的初始指标计算,所述初始指标计算的基础数据大部分来源于所述目标消息。
优选地,当判断所述对应存储不包括所述中间数据结果时,在步骤S204中,对所述目标消息执行初始指标计算,并将初始指标计算中的中间数据结果存储于所述对应存储。具体地,通过所述布隆过滤器对到达的目标消息进行初次判断,会出现对应的不同结果,其中包括目标消息对应的中间数据结果未曾存在于所述内存中。基于所述布隆过滤器的原理,对于集合元素不存在的判断不存在误判可能,所以此时,基于所述目标消息并不存在历史计算结果,可以对所述目标消息执行初始指标计算。
在此,本申请通过布隆过滤器对于到达的目标消息对应的中间结果信息是否曾经存在于内存中进行初步判断,对于判断为曾经存在于内存的中间结果信息,再针对可能存在的误判进行进一步的检验,由于布隆过滤器具有高效率和低错误率,所以误判的可能非常低,所损耗的不必要时间非常少,从而在保障不影响内存工作的前提下最大程度地提高了流计算系统的计算速度。
在一个优选实施例中,检验所述中间数据结果是否已存在包括:检验所述中间数据结果是否存在于所述对应内存;其中,在步骤S204中,若所述检验所得信息包括所述中间数据结果存在于所述对应内存,根据所述中间数据结果对所述目标消息执行相应的数据计算。
具体地,在所述用于流计算的数据处理设备1中,所述的数据计算,包括所述基于中间数据结果进行的数据计算,也包括基于新的业务维度进行的初始数据计算,都是在内存中进行的,同时,所述内存中会保留所述目标消息对应的消息标识,以及所述数据计算对应的更新或是初设的中间数据结果。进一步,优选地,为了避免内存溢出,内存中的消息标识与对应的中间数据结果会定期置换到辅助存储,即内存中的数据会定期清除,辅助存储中保存有全部消息标识以及对应的中间数据结果。所以此时,若是所述布隆过滤器判断所述中间数据结果曾经存在于内存是正确的,则所述目标消息有可能在对应的内存中匹配相应的消息标识,并检验到对应的所述中间数据结果。从而基于所述目标消息对应的所述中间数据结果和目标消息的具体内容完成对应的数据计算。在此,所述内存的置换方法可以根据具体计算场景的使用情况选择FIFO(先进先出)、LRU(最久未使用)、OPT(最佳置换)等不同的内存置换算法。
优选地,检验所述中间数据结果是否已存在还包括:若经检验所述中间数据结果不存在于所述对应内存,检验所述中间数据结果是否存在于对应辅助存储;其中,在步骤S204中,若所述检验所得信息包括所述中间数据结果存在于所述对应辅助存储,将所述中间数据结果读入所述对应内存,并根据所述中间数据结果对所述目标消息执行相应的数据计算。
具体地,所述用于流计算的数据处理设备1在内存中获得目标消息时,为了避免内存溢出并影响整个流计算的进程,优选地,为所述的内存匹配一定的辅助存储,包括但不限于各类磁盘、软盘等可以进行存储和读取的装置。在此,所述辅助存储中可以与内存同时保留所述目标消息对应的消息标识,以及所述数据计算对应的更新或是初设的中间数据结果。因此,对于确定曾经存在于内存的目标消息,其对应的中间数据结果若是在内存中不存在,可能因为已经被内存的置换操作换出,但是在与所述内存对应的辅助存储中有可能找到对应的中间数据结果。进一步,需要将所找到的中间数据结果加载到所述内存中,从而对所述目标消息进行对应的数据计算。在此,为了避免流计算过程中内存的溢出,优选地,将所有在内存中进行过计算的对应目标消息的消息标识和对应的中间数据结果都备份写入对应的辅助存储中,所以只要所述目标消息对应的中间数据结果存在于所述内存或是对应的辅助存储中,相应的寻找和读取操作对应的时间开销都是必要的,但由于布隆过滤器的误判使得经过判断和检验后,在所述辅助存储中都无法找到所述中间数据结果时,对所述目标消息耗费的查找检验时间则可以通过对布隆过滤器的设定而降低,例如,通过对布隆过滤器的工作参数进行设定来降低误判率,从而可以有效地节省不必要的消耗时间,保证流计算系统的计算速度。
更优选地,在步骤S204中,若所述检验所得信息包括所述中间数据结果不存在于所述对应辅助存储,对所述目标消息执行初始指标计算;并将初始指标计算中的中间数据结果存储于所述对应内存。
具体地,当所述检验所得信息包括所述中间结果不存在所述对应辅助存储,可以得出所述布隆过滤器出现了误判。此时所述目标消息在所述内存或所述对应辅助存储中都不存在对应的中间数据结果。优选地,基于所述目标消息筛选出目标数据计算所需要的有用数据信息,执行初始指标计算。并且可以将初始指标计算的中间数据结果与所述目标消息的消息标识对应存储在所述对应内存中。更进一步,还可以将所述初始指标计算的中间数据结果与所述目标消息的消息标识对应存储在与所述内存对应的辅助存储中。
优选地,在步骤S204中,所述用于流计算的数据处理设备1根据所述数据计算的结果更新对应存储装置中的所述中间数据结果。
具体地,对于所述数据计算,包括所述目标消息基于所述中间数据结果进行的指标计算,也包括所述目标消息进行的初始指标计算,优选地,都是在所述内存中进行。其中,对于计算得到的中间数据结果可以更新到所述内存中和所述对应辅助存储中。同时,对于进行初始指标计算的目标消息,可以将其对应的消息标识更新到所述布隆过滤器中保存,并可以同时将其保存在对应的内存和所述对应辅助存储中。在此,优选地,所述内存和所述对应辅助存储中数据的更新可以是同时进行,并且在所述内存或是所述对应辅助存储中,所述消息标识与对应的所述中间数据结果可以是一一对应匹配的。在此,可以利用所述对应辅助存储大容量的优势,将所有在内存中进行过数据计算的目标消息和对应的中间数据结果都进行保存,并与内存同步更新,则当所述内存由于计算需要和空间限制进行内容置换时,被置换的内容就可以在对应的所述辅助存储中找到,并基于所述布隆过滤器的高效快速地判断,从而可以为当前目标消息提供历史计算数据,使得对应流计算可以顺利、高效地进行。
在另一个优选实施例中,步骤S202包括步骤S2021(未示出)和步骤S2022(未示出),其中,在步骤S2021中,通过布隆过滤器检测所述目标消息是否已存在;在步骤S2022中,若所述目标消息已存在,判断对应存储包括所述目标消息所对应的中间数据结果。
具体地,判断所述对应存储中是否包括所述目标消息对应的中间数据结果,优选地,检测所述中间数据结果对应的目标消息是否存在于所述对应存储,如,对应内存中,例如,利用布隆过滤器进行判断,假设布隆过滤器使用m bit的数组来保存目标消息,初始时,所述布隆过滤器中,每一位都设置为0。对于每一个第一次到达内存的目标消息,布隆过滤器会使用k个相互独立的哈希函数对其映射,通过映射,所映射的k个值对应与布隆过滤器的k个位置上的0则变为1。当一个目标消息到达内存时,布隆过滤器会使用上述k个哈希函数对所述目标消息进行映射,若映射对应的k个位置上都已经是1,则判断所述目标消息曾经存在于所述内存中;若至少一个位置上仍然是0,则判断所述目标消息不曾存在于所述内存中。此时,所述布隆过滤器做出所述目标消息不曾存在于内存中的判断是准确的,而若是判断所述目标消息曾经存在于所述内存中则可能出现一定的误差,需要进一步检验。又因为所述中间数据结果与对应的目标消息是对应的,所以可以据此推定所述目标消息对应的中间数据结果是否曾经存在于所述内存中。在此,本领域技术人员应该能够理解,所述布隆过滤器利用位数组匹配对应的目标消息,可以认为所述布隆过滤器中保存了与所述目标消息对应的消息标识,通过所述消息标识可以寻找到对应的所述目标消息,并进一步确定所述中间数据结果。
优选地,所述方法还包括步骤S205(未示出),在步骤S205中,设置布隆过滤器的工作参数;其中,在步骤S2021(未示出)中,通过所述布隆过滤器及所述工作参数检测所述目标消息是否已存在。
具体地,所述布隆过滤器对目标消息的判断包括目标消息对应的中间数据结果从未存在于所述内存中,此时布隆过滤器的判断是不存在误差的;也包括目标消息对应的中间数据结果曾经存在于所述内存中,此时布隆过滤器的判断存在一定的误差,这是由布隆过滤器本身的工作原理决定的,在此,本领域技术人员应该能够理解,基于布隆过滤器的原理,不同目标消息在布隆过滤器上都对应着一组哈希值,若是一个从未到达过所述内存的当前目标消息,它对应的布隆过滤器上的多个映射位置分别被在先到达的目标消息所映射过,即所有与所述当前目标对应的位置上的0都变为1,则所述当前目标消息与其他多个目标消息发生“碰撞”,布隆过滤器产生误判,错误的判断所述目标消息对应的中间数据结果曾经存在于所述内存中。所以当布隆过滤器判断所述中间数据结果曾经存在于内存时,需要进行进一步检验,验证在所述内存或是所述内存对应的辅助存储中是否确定有所述目标消息对应的中间数据结果存在。
例如,可以进入内存中寻找与所述目标消息相匹配的中间数据结果,若是存在,则证明所述布隆过滤器的判断正确;若是不存在,则要到所述内存对应的辅助存储中进一步进行验证,若是在所述辅助存储中寻找到所述目标消息匹配的中间数据结果则同样证明所述布隆过滤器的判断正确;若是在所述辅助存储中找不到匹配的目标消息对应的中间数据结果,则可以推定,所述目标消息不曾到达过内存,所述布隆过滤器判断失误。在此,所述流计算判断目标消息的存在是为了读取与之相对应的中间数据结果而进行对应的当前指标运算,所以只要在内存中或对应的辅助存储中找到匹配的中间数据结果,所花费的时间都是为了避免流计算中内存溢出的必要开销,同时,最后在所述辅助存储进行查询后依然没找到所述中间数据结果的目标消息,其对应的内存查询和所述辅助存储查询所消耗的时间是不必要的,也是应该优化的。
例如,假设待处理的目标消息量为N,全部目标消息中新成员的比例是k(0<k≤1),布隆过滤器的误判率为f(0<k≤1)做一次布隆过滤器查找的时间是t,做一次辅助存储查找的时间是T,则所述不必要的开销时间S=Nt+kNfT,由此可知,所述过滤器的误判率越小,所述不必要的开销时间越小,对于实时计算的延迟越短,流计算的效果也就越好,而所述布隆过滤器的误判率可以通过设置布隆过滤器的工作参数来改变和优化。所述布隆过滤器的工作参数包括但不限于所述布隆过滤器中用来存储所述目标消息映射的总位数、所述布隆过滤器为所述目标消息设置的哈希映射的个数、利用所述布隆过滤器进行判断的目标消息的个数等等,这些工作参数可以影响到所述布隆过滤器的误判率的大小,例如,在其他条件不变的情况下,所布隆过滤器用来存储所述目标消息映射的总位数越多,利用所述布隆过滤器进行判断的目标消息的个数越少,布隆过滤器的误判率就越低,带来的实时计算的延迟就越短,流计算的效果就越好。
更优选地,在步骤S205(未示出)中,根据所述流计算信息所对应的应用相关信息设置布隆过滤器的工作参数。
具体地,所述应用相关信息可以包括所述流计算对应的应用延迟指标信息、消息池数据容量等和具体流计算相关的各方面信息。在此,所述流计算信息所对应的应用相关信息可以基于每一个流计算的具体应用场景和应用需要而有所差异,如,流计算A所允许的应用延迟时间为t1,所可能接受的目标消息总量约Q1;而流计算B所允许的应用延迟时间为t2,所可能接受的目标消息总量约Q2。基于不同流计算的应用相关信息可以设置布隆过滤器的不同工作参数,从而得到适用于不同计算场景的不同的布隆过滤器的误判率,进而,对最终流计算的耗时和最终计算效果产生直接影响。同时,在计算进程过程中,也可以修改原有的布隆过滤器的工作参数来适用实时的计算要求,例如,若是在计算进程中,希望保存布隆过滤器的误判率不变,则当映射保存进入布隆过滤器的目标消息增加时,所述布隆过滤器中用来存储所述目标消息映射的总位数也需要按照一定的幅度同时增加。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。