一种OLAP动态缓存方法及装置
技术领域
本发明涉及数据存储技术领域,尤其涉及一种OLAP动态缓存方法及装置。
背景技术
缓存技术是提升查询性能、增加并发性的一个通用解决方案,但是在OLAP引擎中,如果一个查询既包括历史数据又包括实时数据,则很难使用缓存技术,因为原始数据随着时间的推移一直在变化,对应的导致结果数据也随之会发生变化,这将导致结果数据无法及时被缓存。例如,实时统计从0点到当前时刻的销售额,若当前查询统计的销售额为10000元,则在一分钟后再进行查询统计,若此期间发生了一笔100元的销售,则在缓存中获取到的统计销售额仍为先前的10000元,但实际的销售额合计为10100元,显然此时从缓存中获取到的统计结果是不准确的。
发明内容
本发明的目的在于提供一种OLAP动态缓存方法,能够在提升集群查询性能的同时保证查询结果的实时性与准确性。
为了实现上述目的,本发明的一方面提供一种OLAP动态缓存方法,包括:
构建缓存架构,所述缓存架构包括协调节点、历史节点和实时节点;
根据数据量大小设置实时文件包及多个历史文件包,所述实时文件包设在实时节点中,多个历史文件包分布在各历史节点中;
获取实时数据缓存于实时文件包中,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发于各历史文件包中存储;
接收当前时刻的查询语句,通过协调节点从对应的历史文件包和/或实时文件包中获取目标数据,经统计汇总后反馈输出。
优选地,在获取实时数据缓存于实时文件包中,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发与各历史文件包中存储之后还包括:
从所述查询语句中解析出涉及存储目标数据的历史文件包信息,所述历史文件包信息包括历史文件包的版本信息、索引信息、键值信息中的一种或多种;
基于相关的历史文件包一一对应的设置缓存包,且缓存包分布于对应的历史节点中,或者,聚集在协调节点中。
较佳地,获取实时数据缓存于实时文件包中,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发于各历史文件包中存储的方法包括:
预设数据的分发时段T,每间隔时段T将实时文件包中当前时段的缓存数据统一分发给各历史文件包中存储,同时清空实时文件包中的缓存数据准备下一时段的缓存。
优选地,接收当前时刻的查询语句,通过协调节点从对应的历史文件包和/或实时文件包中获取目标数据,经统计汇总后反馈输出的方法包括:
基于查询语句涉及的目标数据及缓存包的分布策略,动态选择缓存包的设置模式;
当动态选择的设置模式为分布于对应的历史节点中时,则在首次查询时通过对应的缓存包从相关历史文件包中获取相关的零散目标数据,经由各自缓存包所属的历史节点汇总合并后得到历史目标数据,再由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据再次汇总合并后得到目标数据反馈输出;
当动态选择的设置模式为聚集在协调节点中时,则在首次查询时通过对应的缓存包从相关历史文件包中获取相关的零散目标数据,经由协调节点汇总合并后得到历史目标数据,再由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据再次汇总合并后得到目标数据反馈输出。
可选地,还包括:
在动态选择的设置模式为分布于对应的历史节点中时且在首次查询之后,在相同时段再次执行相同的查询操作时,直接从各自缓存包所属的历史节点中获取缓存的历史目标数据,并由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据再次汇总合并后得到目标数据反馈输出;和/或,
在动态选择的设置模式为聚集在协调节点中时且在首次查询之后,在相同时段再次执行相同的查询操作时,直接从协调节点的缓存包中获取缓存的历史目标数据,并由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据再次汇总合并后得到目标数据反馈输出。
较佳地,所述缓存包的分布策略为:
查询语句中涉及存储目标数据的历史文件包的数量小于N个时,采取缓存包聚集在协调节点的布局策略,且N<2*M;或者,
查询语句中涉及存储目标数据的历史文件包的数量小于M个时,且所属历史节点的数量大于4*M时,采取缓存包聚集在协调节点的布局策略;
否则,采取缓存包分布于对应历史节点的布局策略。
示例性地,所述M取值为20,所述N取值为30。
与现有技术相比,本发明提供的OLAP动态缓存方法具有以下有益效果:
本发明提供的OLAP动态缓存方法中,可将整个集群划分为协调节点、历史节点和实时节点,然后根据缓存数据量的大小设置1个实时文件包和多个历史文件包,其中,实时文件包用于获取实时数据缓存,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发于各历史文件包中存储,当历史文件包的数据存储满时可对应增加新的历史文件包继续存储,也可利用现有的历史文件包循环存储,之后根据当前时刻的查询语句通过协调节点从对应的历史文件包和/或实时文件包中获取目标数据,经统计汇总后反馈输出。
可见,本发明通过协调节点、历史节点和实时节点的搭配设置,能够在提升集群查询性能的同时保证查询结果的实时性与准确性,克服了现有技术中随着查询时刻的推移,查询结果无法实时更新导致的查询结果不准确的问题。
本发明的另一方面提供一种OLAP动态缓存装置,应用于上述技术方案提到的OLAP动态缓存方法中,该装置包括:
架构设置单元,用于构建缓存架构,所述缓存架构包括协调节点、历史节点和实时节点;
文件包设置单元,用于根据数据量大小设置实时文件包及多个历史文件包,所述实时文件包设在实时节点中,多个历史文件包分布式在各历史节点中;
分发存储单元,用于获取实时数据缓存于实时文件包中,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发于各历史文件包中存储;
查询输出单元,用于接收当前时刻的查询语句,通过协调节点从对应的历史文件包和/或实时文件包中获取目标数据,经统计汇总后反馈输出。
优选地,在分发存储单元和查询输出单元之间还包括
缓存包设置单元,用于从所述查询语句中解析出涉及存储目标数据的历史文件包信息,所述历史文件包信息包括历史文件包的版本信息、索引信息、键值信息中的一种或多种;并基于相关的历史文件包一一对应的设置缓存包,且缓存包分布于对应的历史节点中,或者,聚集在协调节点中。
与现有技术相比,本发明提供的OLAP动态缓存装置的有益效果与上述技术方案提供的OLAP动态缓存方法的有益效果相同,在此不做赘述。
本发明的第三方面提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述OLAP动态缓存方法的步骤。
与现有技术相比,本发明提供的计算机可读存储介质的有益效果与上述技术方案提供的OLAP动态缓存方法的有益效果相同,在此不做赘述。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例一中OLAP动态缓存方法的流程示意图;
图2为本发明实施例一中缓存包设在历史节点中初次查询的过程示意图;
图3为本发明实施例一中缓存包设在历史节点中再次查询的过程示意图;
图4为本发明实施例一中缓存包设在协调节点中初次查询的过程示意图;
图5为本发明实施例一中缓存包设在协调节点中再次查询的过程示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其它实施例,均属于本发明保护的范围。
实施例一
请参阅图1,本实施例提供一种OLAP动态缓存方法,包括:构建缓存架构,缓存架构包括协调节点、历史节点和实时节点;根据数据量大小设置实时文件包及多个历史文件包,实时文件包设在实时节点中,多个历史文件包分布在各历史节点中;获取实时数据缓存于实时文件包中,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发于各历史文件包中存储;接收当前时刻的查询语句,通过协调节点从对应的历史文件包和/或实时文件包中获取目标数据,经统计汇总后反馈输出。
具体实施时,在海量数据情况下一个单位时段的数据量会非常大,可能达到几十G甚至上百G,如果只是按照一个文件包来进行管理,进行统计汇总时,需要消耗的计算资源会非常大,导致计算结果输出比较慢,不能充分利用分布式集群的资源优势和单台机器的多核优势,也不方便容错、扩容。因此我们可以按照一定的策略对一个时间段内的海量数据进行切分,分成多个历史文件包或实时文件包,每个文件包称之为segment,该策略包括随机算法、按照某字段进行hash取模等,这些segment可以分布到集群的不同机器,这样就能将一个统计查询分散到多台机器上执行,提升资源利用率和查询性能。此外,上述历史文件包或实时文件包可以有多个副本,这样在提供高可用性的同时还会提升统计计算的并发性。
本实施例提供的OLAP动态缓存方法中,可将整个集群划分为协调节点、历史节点和实时节点,然后根据缓存数据量的大小设置1个实时文件包和多个历史文件包,其中,实时文件包用于获取实时数据缓存,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发于各历史文件包中存储,当历史文件包的数据存储满时可对应增加新的历史文件包继续存储,也可利用现有的历史文件包循环存储,之后根据当前时刻的查询语句通过协调节点从对应的历史文件包和/或实时文件包中获取目标数据,经统计汇总后反馈输出。
可见,本实施例通过协调节点、历史节点和实时节点的搭配设置,能够在提升集群查询性能的同时保证查询结果的实时性与准确性,克服了现有技术中随着查询时刻的推移,查询结果无法实时更新导致的查询结果不准确的问题。
为了提高查询效率,上述实施例中在获取实时数据缓存于实时文件包中,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发与各历史文件包中存储之后还包括:
从查询语句中解析出涉及存储目标数据的历史文件包信息,历史文件包信息包括历史文件包的版本信息、索引信息、键值信息中的一种或多种;基于相关的历史文件包一一对应的设置缓存包,且缓存包分布于对应的历史节点中,或者,聚集在协调节点中。
具体实施时,如果历史节点中历史文件包数据发生了变化,则对应的版本信息也会发生变化,这时就不能再从缓存包中索取统计结果,需要从历史文件包中重新统计,完成后再将结果以KV形式存储到缓存包中。
上述实施例中获取实时数据缓存于实时文件包中,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发于各历史文件包中存储的方法包括:
预设数据的分发时段T,每间隔时段T将实时文件包中当前时段的缓存数据统一分发给各历史文件包中存储,同时清空实时文件包中的缓存数据准备下一时段的缓存。
历史文件包用于存储历史数据,可以对数据进行统计和缓存,实时文件包用于存放实时数据,超过当前时间段,则将当前时段的缓存数据提交至历史文件包中成为历史数据,实时节点用于时刻接收新产生的实时数据,协调节点负责接收查询语句,并且将查询分发到相应的历史节点和实时节点,同时对历史节点和实时节点返回的统计结果进行合并,或者可以根据需要将各个历史文件包的统计结果进行缓存。
上述实施例中接收当前时刻的查询语句,通过协调节点从对应的历史文件包和/或实时文件包中获取目标数据,经统计汇总后反馈输出的方法包括:
基于查询语句涉及的目标数据及缓存包的分布策略,动态选择缓存包的设置模式;
当动态选择的设置模式为分布于对应的历史节点中时,则在首次查询时通过对应的缓存包从相关历史文件包中获取相关的零散目标数据,经由各自缓存包所属的历史节点汇总合并后得到历史目标数据,再由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据再次汇总合并后得到目标数据反馈输出;
当动态选择的设置模式为聚集在协调节点中时,则在首次查询时通过对应的缓存包从相关历史文件包中获取相关的零散目标数据,经由协调节点汇总合并后得到历史目标数据,再由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据再次汇总合并后得到目标数据反馈输出。
具体实施时,请参阅图2,如果将缓存包设在历史节点,则在第一次查询时,从segment数据中进行统计,并且将统计结果缓存到历史节点中,历史节点会对各个segment结果进行合并操作,最终协调节点会对历史节点和实时节点的统计结果进行合并得到目标数据反馈输出;请参阅图3,如果将缓存包设在协调节点,则不会在历史节点对多个segment的结果进行合并操作,而是将每个segment的结果传输到协调节点,再由协调节点将其缓存到内存中,同时将实时节点的统计结果进行合并得到目标数据反馈输出。
较佳地,上述实施例中还包括:
在动态选择的设置模式为分布于对应的历史节点中时且在首次查询之后,在相同时段再次执行相同的查询操作时,直接从各自缓存包所属的历史节点中获取缓存的历史目标数据,并由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据再次汇总合并后得到目标数据反馈输出。请参阅图4,具体实施时,当进行第二次查询时,历史节点就会直接从缓存中获取统计结果,将其进行合并后形成历史目标数据提交至协调节点,由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据汇总合并后得到目标数据反馈输出。
在动态选择的设置模式为聚集在协调节点中时且在首次查询之后,在相同时段再次执行相同的查询操作时,直接从协调节点的缓存包中获取缓存的历史目标数据,并由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据再次汇总合并后得到目标数据反馈输出。请参阅图5,具体实施时,当进行第二次查询时,如果发现查询中涉及到的历史目标数据已经被缓存,则直接从本地缓存获取历史目标数据,同时由协调节点将历史目标数据与当前时刻实时文件包中的缓存数据汇总合并后得到目标数据反馈输出。此时协调节点不会和历史节点进行交互。
此外,如果第二次查询时涉及到了更长时间段的历史目标数据,此时可将已缓存的历史目标数据直接调用,而未缓存的历史目标数据则先从历史节点中单独统计,再由协调节点将其与当前时刻实时文件包中的缓存数据汇总合并后得到目标数据反馈输出。
需要说明的是,查询语句中包括目标数据涉及的版本信息、索引信息、键值信息中的一种或多种,以供检索到所需的历史目标数据及实时文件包中的缓存数据。
需要说明的是,缓存包到底是放到历史节点还是放到协调节点上需根据集群大小和查询大小的特性动态选择;例如:
场景一:一个集群有5个历史节点,一个查询只涉及到5个历史文件包(segment),并且这5个segment平均分布到5个历史节点中,此时,如果将缓存包放到历史节点中,在每次查询时,首先需要将缓存结果从历史节点上传协调节点,然后再由协调节点进行统计合并,假设数据传输时长为100ms,合并每个segment需要50ms,则整个耗时为50*(5-1)+100=300ms;如果将缓存包放到协调节点上,则不需要进行数据传输,直接在协调节点上进行统计合并,则整个耗时为50*(5-1)=200ms;显然上述场景中将缓存包放到协调节点中性能会更好。
场景二:一个集群有20个历史节点,一个查询涉及到200个历史文件包(segment),并且这200个segment平均分布到20个历史节点中,即每个历史节点平均有10个segment,此时,如果将缓存包放到协调节点中,一来200个segment的结果缓存可能大量占用内存,另外对于200个segment缓存结果进行合并,耗时也比较长,一次查询总共耗时为(200-1)*50ms=9950ms;而如果将缓存包放到历史节点中,因为历史节点可以并发执行,则总共耗时为(10-1)*50+100+(20-1)*50=1500ms,可以看到在这种场景下,将缓存放到历史节点会明显加快性能。
综上,具体实施时,可以根据当前集群的大小、参与查询的segment的数量、查询的复杂度以及参与的历史节点个数,动态地决定将缓存放到协调节点还是历史节点。通常遵循的策略原则如下:
1、如果参与查询的segment数较少,就将缓存放到协调节点上。这样在命中缓存的情况下会直接在协调节点和实时节点上进行统计,省去缓存数据网络传输时间和开销,协调节点合并结果的压力也不大;
2、如果参与统计的segment数量较多,此时需要具体考虑该查询参与的历史节点数:
如果参与的历史节点数较少,换句话说,也就是说每个历史节点上参与查询的segment较多的话,这时将缓存放到历史节点就非常有优势,例如可以并发地在历史节点进行合并,提升查询的并发度;或者协调节点合并数据的的时间会大大降低;
如果参与的历史节点数较多,换句话说,也就是每个历史节点上参与查询的segment数较少,在这种情况下,在历史节点缓存以及合并的效果就不明显了,因为传递给协调节点需要合并的历史目标数据量依然很大,在协调节点上合并的延迟也比较大。这种情况下,将缓存包放到协调节点或者历史节点上,对于性能影响不大,这时就需要考虑查询的复杂度、每个segment的缓存数据量大小以及协调节内存缓存的压力了;如果每个segment的缓存数据量不大,或者协调节内存缓存压力比较小,可以考虑将缓存放到协调节点上,这样可以减少网络传输的开销;否则,考虑将缓存包放到历史节点上,这样会减轻协调节点合并的开销。
示例性地,上述实施例中缓存包的分布策略为:
查询语句中涉及存储目标数据的历史文件包的数量小于N个时,采取缓存包聚集在协调节点的布局策略,且N<2*M;或者,查询语句中涉及存储目标数据的历史文件包的数量小于M个时,且所属历史节点的数量大于4*M时,采取缓存包聚集在协调节点的布局策略;否则,采取缓存包分布于对应历史节点的布局策略。如M取值为20,N取值为30。
具体实施时,上述配置是可以在线动态调节的,即可以根据实际执行效果进行动态调整。经实践结果分析后得知,在使用了上述动态缓存包分布策略后,整个集群的查询延迟平均降低了30%,并发性也提升了20%,达到了动态缓存的预期效果。
实施例二
本实施例提供一种OLAP动态缓存装置,包括:
架构设置单元,用于构建缓存架构,所述缓存架构包括协调节点、历史节点和实时节点;
文件包设置单元,用于根据数据量大小设置实时文件包及多个历史文件包,所述实时文件包设在实时节点中,多个历史文件包分布式在各历史节点中;
分发存储单元,用于获取实时数据缓存于实时文件包中,并在缓存时长达到预设时段时将实时文件包中的缓存数据分发于各历史文件包中存储;
查询输出单元,用于接收当前时刻的查询语句,通过协调节点从对应的历史文件包和/或实时文件包中获取目标数据,经统计汇总后反馈输出。
优选地,在分发存储单元和查询输出单元之间还包括
缓存包设置单元,用于从所述查询语句中解析出涉及存储目标数据的历史文件包信息,所述历史文件包信息包括历史文件包的版本信息、索引信息、键值信息中的一种或多种;并基于相关的历史文件包一一对应的设置缓存包,且缓存包分布于对应的历史节点中,或者,聚集在协调节点中。
与现有技术相比,本发明实施例提供的OLAP动态缓存装置的有益效果与上述实施例一提供的OLAP动态缓存方法的有益效果相同,在此不做赘述。
实施例三
本实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述OLAP动态缓存方法的步骤。
与现有技术相比,本实施例提供的计算机可读存储介质的有益效果与上述技术方案提供的OLAP动态缓存方法的有益效果相同,在此不做赘述。
本领域普通技术人员可以理解,实现上述发明方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,上述程序可以存储于计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。