CN113360498A - 流数据转存处理方法、装置及服务器 - Google Patents

流数据转存处理方法、装置及服务器 Download PDF

Info

Publication number
CN113360498A
CN113360498A CN202110608014.1A CN202110608014A CN113360498A CN 113360498 A CN113360498 A CN 113360498A CN 202110608014 A CN202110608014 A CN 202110608014A CN 113360498 A CN113360498 A CN 113360498A
Authority
CN
China
Prior art keywords
packet
transferred
stream data
stored
grouping
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.)
Pending
Application number
CN202110608014.1A
Other languages
English (en)
Inventor
李乾
孙志斌
冉丁
王勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Agricultural Bank of China
Original Assignee
Agricultural Bank of China
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Agricultural Bank of China filed Critical Agricultural Bank of China
Priority to CN202110608014.1A priority Critical patent/CN113360498A/zh
Publication of CN113360498A publication Critical patent/CN113360498A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (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

流数据转存处理方法、装置及服务器
技术领域
本发明实施例涉及大数据技术领域,尤其涉及一种流数据转存处理方法、装置及服务器。
背景技术
随着大数据的兴起,流计算成为了一种常用的计算模式。流计算通常包括实时数据计算,和批处理方式相比,具有低时延、擅长窗口计算等优点;但是同时也有对计算机程序性能要求高、不容易实现多个流数据的关联、重复执行代价较大等缺点。因此,为了同时利用批处理和流计算的优点,既要处理大容量的离线数据,同时也要快速处理实时数据,提出了Lambda和Kappa等流批合一框架。在流批合一框架中,需要将流计算的结果(即流数据)存储到数据库中。
当前,现有的流计算引擎中能够提供微批计算模型的Storm Trident和Flink。但是这两种方式都是通过将流数据切分成一个个微小的批次,然后被流计算引擎进行处理,微批处理后将流数据微批转存至关系型数据库中。但是这种微批模型对数据流进行微批转存的模式,在一定程度上降低了对目标关系型数据库的访问,但是仍需要流计算引擎直接与关系型数据建立连接。当网络故障或者流数据出现峰值时导致关系型数据转存写入故障,会使得流数据转存失败。
发明内容
本发明实施例提供一种流数据转存处理方法、装置及服务器,以克服现有技术中当网络故障或者流数据出现峰值时导致关系型数据转存写入故障,会使得流数据转存失败的问题。
第一方面,本发明实施例提供一种流数据转存处理方法,包括:
通过流计算引擎接收分布式消息系统实时发送的流数据;将所述流数据写入所述流数据所属的主题对应的分组集合中,其中所述分组集合部署在内存数据库中;所述分组集合中包括多个分组,每个分组具有一个分组号、且每个分组的最大可存储量相同;其中所述流数据存各个分组中时,一个分组号的分组存满后存入下一个分组号的分组;
通过转存程序按照预设时间间隔,扫描所述流数据所属主题对应的分组集合中的待转存的分组;若所述待转存的分组已达到所述最大可存储量,则从所述内存数据库中读取所述待转存的分组中的流数据,并转存至关系型数据库中。
在一种可能的设计中,所述将所述流数据存储在所述流数据所属的主题对应的分组集合中,包括:
从所述内存数据库获取一个序列号,所述序列号中包含所述流数据所属的主题信息;
根据所述序列号和所述流数据所属的主题信息对应的主题分组的最大可存储量,确定所述分组号;
根据所述分组号,将流数据存储至所述分组号对应的分组中,直至所述分组存满后,重新执行从所述内存数据库获取一个新的序列号的步骤,其中所述新的序列号是在所述序列号基础上自动递增更新的序列号。
在一种可能的设计中,所述通过转存程序按照预设时间间隔,获取所述流数据所属主题对应的分组集合中的待转存的分组;若所述待转存的分组已达到所述最大可存储量,则从所述内存数据库中读取所述待转存的分组中的流数据,并转存至关系型数据库中,包括:
按照预设时间间隔,访问所述流数据所属主题对应的分组集合中的分组号被标记为待转存的分组;
若所述待转存的分组的存储记录数以达到最大可存储量,则读取所述待转存的分组中的流数据,并转存至关系型数据库;
将所述待转存的分组的分组号递增为下一个分组的分组号,并将下一个分组的分组号标记为待转存分组的分组,并重复执行确定所述流数据所属主题对应的分组集合中的分组号被标记为待转存分组的分组,为所述待转存的分组的步骤。
在一种可能的设计中,所述转存程序部署在集群中,所述方法还包括:
从所述内存数据库中获取所述待转存的分组所属主题的分布式锁;
若所述分布式锁获取成功,则从所述内存数据库获取当前日期的待转存的分组;
判断所述待转存的分组的分组号是否为空;
若为空,则获取所述当前日期的第一个分组的记录数;
若所述分组的记录数大于0,则获取当前日期的前一日期的待转存的分组;
若所述当前日期的前一日期的待转存的分组的记录数不为0,则将当前日期的前一日期的待转存的分组的流数据转存至关系型数据库;
删除内存数据库中当前日期的前一日期的所有待转存的分组的流数据;
将从内存数据库中获取的当前日期的待转存的分组的分组号设置为0;
删除所述获取的所述待转存的分组所属主题的分布式锁。
在一种可能的设计中,所述判断所述待转存的分组的分组号是否为空之后,所述方法还包括:
若不为空,则记录待转存的分组的分组号为初始分组号;
从所述内存数据库中获取所述初始分组号对应的分组的记录数;
判断记录数是否达到最大可存储量;
若达到,则将对应的待转存的分组转存至关系型数据库;并从所述内存数据库中删除所述待转存的分组的流数据,并将所述初始分组号递增1,并重复执行从所述内存数据库中获取所述初始分组号对应的分组的记录数的步骤,直至确定待转存的分组的的记录数小于最大可存储量。
在一种可能的设计中,所述确定待转存的分组的记录数小于最大可存储量之后,还包括:
判断待转存的分组的分组号是否大于初始分组号;
若否,则从所述内存数据库中获取当前流数据的序列号,并根据所述序列号和所述流数据所属的主题信息对应的主题分组的最大可存储量,确定当前真实分组号;
若所述待转存的分组的分组号小于所述当前真实分组号、且所述待转存的分组的记录数为0,则待转存的分组的分组号累积递增1,直至所述待转存的分组的分组号大于所述真实分组号;
判断待转存的分组的分组号是否大于初始分组号;
若是,则在所述内存数据库中进行待转存的分组的分组号的更新,以将更新后的待转存的分组的分组号的流数据,并转存至关系型数据库中。
第二方面,本发明实施例提供一种流数据转存处理装置,包括:
分组缓存模块,用于通过流计算引擎接收分布式消息系统实时发送的流数据;将所述流数据写入所述流数据所属的主题对应的分组集合中,其中所述分组集合部署在内存数据库中;所述分组集合中包括多个分组,每个分组具有一个分组号、且每个分组的最大可存储量相同;其中所述流数据存各个分组中时,一个分组号的分组存满后存入下一个分组号的分组;
分组转存模块,用于通过转存程序按照预设时间间隔,扫描所述流数据所属主题对应的分组集合中的待转存的分组;若所述待转存的分组已达到所述最大可存储量,则从所述内存数据库中读取所述待转存的分组中的流数据,并转存至关系型数据库中。
第三方面,本发明实施例提供一种服务器,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的设计所述的流数据转存处理方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的流数据转存处理方法。
第五方面,本发明实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时,实现如上第一方面以及第一方面各种可能的设计所述的流数据转存处理方法。
本发明实施例提供的流数据转存处理方法、装置及服务器,该方法通过将待转存的流数据按照分组缓存至内存数据库中,其中每个分组具有一个分组号、且每个分组的最大可存储量相同,其中所述流数据存各个分组中时,一个分组号的分组存满后存入下一个分组号的分组;然后对于内存数据库中缓存的分组的流数据,按照预设时间间隔进行扫描,当每个分组已经存满时,将分组的流数据转存至关系型数据库中。本发明实施例能够将流数据进行微批缓存,然后对微批缓存的流数据进行微批转存至关系型数据库,既能减少对关系型数据库的访问,且不会因为暂时的故障,导致流数据转存失败,只要转存程序在故障后,转存程序重启继续进行微批转存即可,保证了系统的稳定运行。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的流数据转存处理的系统架构示意图;
图2为本发明实施例提供的流数据转存处理方法的流程示意图一;
图3为本发明实施例提供的流数据转存处理方法的流程示意图二;
图4为本发明实施例提供的流数据转存处理方法的流程示意图三;
图5为本发明实施例提供的流数据转存处理方法的流程示意图四;
图6为本发明实施例提供的流数据转存处理装置的结构示意图;
图7为本发明实施例提供的服务器的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,如果流数据仅是某些维度的汇总数据,数据量不是特别大并且通过特定的关键字或关键字组合查询即可满足业务需求,我们可以将流数据写入内存数据库中。如果流数据是明细数据,应用系统需要实时地对这些流数据进行多种条件的组合查询,则需要将这些流数据实时地转存到关系型数据库中。目前,对于金融系统中的流数据(例如交易明细数据),通常是采用Kafka等分布式消息系统来搭建实时数据总线,产生实时流数据的前台业务系统往Kafka发送消息,对数据进行实时分析和监测的后台分析系统从Kafka获取流数据消息。但是当流数据的数据量比较大时,如果从Kafka获得数据比较大的实时流数据,直接保存到关系型数据库中,会对关系型数据库的访问造成较大压力,从影响系统的性能和稳定性。另外,如果流数据的获取包括一系列的流计算过程,通常使用流计算引擎整合Kafka发送的实时计算数据时,还需要考虑流计算引擎的处理速度跟不上Kafka发送的实时计算数据,容易导致流计算超时,甚至到时流数据的重发或业务逻辑错误。例如,流计算引擎处理的流数据中,通常包括多维度的汇总数据的计算吗,数据重发容易造成汇总计算结果的错误。综上,当流数据的实时数据量较大时,不适合将流数据实时保存到关系型数据库中;而且采用流计算引擎时,考虑到流计算引擎的处理速度跟不上Kafka发送的实时计算数据,容易导致流计算超时。为了解决上述问题,比较合理的解决方式是按照微小批量(微批)的方式对流数据进行转存到关系型数据库。然而,现有的流计算引擎中能够提供微批计算模型的Storm Trident和Flink。但是这两种方式都是通过将流数据切分成一个个微小的批次,然后被流计算引擎进行处理,微批处理后将流数据微批转存至关系型数据库中。但是这种微批模型对数据流进行微批转存的模式,在一定程度上降低了对目标关系型数据库的访问,但是仍需要流计算引擎直接与关系型数据建立连接。当网络故障或者流数据出现峰值时导致关系型数据转存写入故障,会使得流数据转存失败。
为了解决上述技术问题,本发明提供了如下技术思路:将流数据按照分组进行微批的缓存,其中流数据分组被缓存至内存数据库中;然后将内存数据库中微批缓存的流数据的分组,进行微批转存至关系型数据库中。既能减少对关系型数据库的访问,且不会因为暂时的故障,导致流数据转存失败,只要故障后继续对缓存的流数据的分组进行微批转存即可,保证了系统的稳定运行。
图1为本发明实施例提供的流数据转存处理的系统架构示意图。如图1所示,本实施例提供的系统包括终端101和服务器102。其中,终端101可以为手机、平板、个人电脑等。本实施例对终端101的实现方式不做特别限制,只要该终端101能够与用户进行输入输出的交互即可。服务器102可以是一台服务器也可以是几台服务器的集群。
图2为本发明实施例提供的流数据转存处理方法的流程示意图一,本实施例的执行主体可以为图1所示实施例的服务器,本实施例此处不做特别限制。如图2所示,该方法包括:
S201:通过流计算引擎接收分布式消息系统实时发送的流数据;将所述流数据写入所述流数据所属的主题对应的分组集合中,其中所述分组集合部署在内存数据库中;所述分组集合中包括多个分组,每个分组具有一个分组号、且每个分组的最大可存储量相同;其中所述流数据存各个分组中时,一个分组号的分组存满后存入下一个分组号的分组。
在本实施例中,流计算引擎接收分布式消息系统实时发送的流数据可以是Kafka等分布式消息系统实时发送的流数据。
内存数据库可以是Redis内存数据库。
在本实施例中,不同的分布式消息系统发送的流数据可以对应一个主题,每个分布式消息系统发送的流数据存入该分布式消息系统对应的主题的分组集合中。
分组集合中包括多个分组,每个分组具有一个分组号、且每个分组的最大可存储量相同。参考图2,分组集合包括分组号分别为“组1、组2、组3......”的多个分组。
将流数据按照分组缓存至分组集合中时,按照分组号由小到大的顺序进行存储,将一个分组号的分组存满后(即达到最大可存储量)存入下一个分组号的分组。
参考图2,组1进行流数据的缓存;组1存满后,组2进行流数据的缓存;组2存满后,组3进行流数据的缓存,......,如此递增。
S202:通过转存程序按照预设时间间隔,扫描所述流数据所属主题对应的分组集合中的待转存的分组;若所述待转存的分组已达到所述最大可存储量,则从所述内存数据库中读取所述待转存的分组中的流数据,并转存至关系型数据库中。
在本实施例中,预设时间间隔可以在转存程序中进行设置。例如10秒。其中每个分组的最大可存储量可以进行设置,例如所述每个分组的最大可存储量为100条记录数。
从上述描述可知,通过将待转存的流数据按照分组缓存至内存数据库中,其中每个分组具有一个分组号、且每个分组的最大可存储量相同,其中所述流数据存各个分组中时,一个分组号的分组存满后存入下一个分组号的分组;然后对于内存数据库中缓存的分组的流数据,按照预设时间间隔进行扫描,当每个分组已经存满时,将分组的流数据转存至关系型数据库中。本发明实施例能够将流数据进行微批缓存,然后对微批缓存的流数据进行微批转存至关系型数据库,既能减少对关系型数据库的访问,且不会因为暂时的故障,导致流数据转存失败,只要转存程序在故障后,转存程序重启继续进行微批转存即可。此外,当流数据吞吐量发生显著变化时,只会影响内存数据库中缓存的数据量大小,不会影响转存程序的稳定运行,由于内存数据库存储空间的存在,保证了系统的稳定性。
图3为本发明实施例提供的流数据转存处理方法的流程示意图二,本实施例在图2实施例的基础上,对上述实施例中将所述流数据存储在所述流数据所属的主题对应的分组集合中的具体实现过程进行了详细说明。如图3所示,该方法包括:
S301:从所述内存数据库获取一个序列号,所述序列号中包含所述流数据所属的主题信息。
在本实施例中,序列号可以是流计算引擎从Redis内存数据库中通过incr方法获得的一个自增的序列号,这个自增的序列号的key参数中包含主题信息。
S302:根据所述序列号和所述流数据所属的主题信息对应的主题分组的最大可存储量,确定所述分组号。
在本实施例中,根据序列号,将序列号减1,在除以分组的最大可存储量(记录数),得到分组号。
S303:根据所述分组号,将流数据存储至所述分组号对应的分组中,直至所述分组存满后,重新执行从所述内存数据库获取一个新的序列号的步骤,其中所述新的序列号是在所述序列号基础上自动递增更新的序列号。
在本实施例中,将流数据通过Redis内存数据库的rpush方法添加到对应的分组的list对象中。
从上述描述可知,通过自增的序列号的更新,对分组的分组号进行有序地递增,实现了流数据按照相同大小的分组的有序存储。
在本发明的一个实施例中,由于持续的流数据是无限大的,为了防止序列号不够用,考虑了序列号的日切。即,这个自增的序列号的key参数中除了包含主题信息,还包括日期信息。当序列号的日期信息发生变化时,序列号则重新开始计数(例如重新从1开始计数)。
图4为本发明实施例提供的流数据转存处理方法的流程示意图三,本实施例在图2实施例的基础上,对上述实施例中步骤S202的具体实现过程进行了详细说明。如图4所示,该方法包括:
S401:按照预设时间间隔,访问所述流数据所属主题对应的分组集合中的分组号被标记为待转存的分组。
S402:若所述待转存的分组的存储记录数以达到最大可存储量,则读取所述待转存的分组中的流数据,并转存至关系型数据库。
S403:将所述待转存的分组的分组号递增为下一个分组的分组号,并将下一个分组的分组号标记为待转存分组的分组,并重复执行确定所述流数据所属主题对应的分组集合中的分组号被标记为待转存分组的分组,为所述待转存的分组的步骤。
在本实施例中,转存程序从Redis内存数据库中获得待转存的分组,具体地,识别分组中分组号被标记为待转存分组的分组。当待转存的分组存储记录数以达到最大可存储量(即最大记录数),则读取分组的流数据,将各个存满的分组中的流数据批量地保存至关系型数据库中,然后删除Redis内存数据库中已转存的分组中的流数据。
图5为本发明实施例提供的流数据转存处理方法的流程示意图四。在本发明的一个实施例中,转存程序部署在集群中,上述方法还包括:
从所述内存数据库中获取所述待转存的分组所属主题的分布式锁;
若所述分布式锁获取成功,则从所述内存数据库获取当前日期的待转存的分组;
判断所述待转存的分组的分组号是否为空;
若为空,则获取所述当前日期的第一个分组的记录数;
若所述分组的记录数大于0,则获取当前日期的前一日期的待转存的分组;
若所述当前日期的前一日期的待转存的分组的记录数不为0,则将当前日期的前一日期的所有待转存的分组的流数据转存至关系型数据库;
删除内存数据库中当前日期的前一日期的所有待转存的分组的流数据;
将从内存数据库中获取的当前日期的待转存的分组的分组号设置为0;
删除所述获取的所述待转存的分组所属主题的分布式锁。
在本实施例中,若所述分布式锁获取失败,则结束流程。
其中,若所述分组的记录数等于0,则删除所述获取的所述待转存的分组所属主题的分布式锁,结束流程。
在本实施例中,内存数据库为Redis内存数据库。
具体地,若所述当前日期的前一日期的待转存的分组的记录数不为0,则将当前日期的前一日期的所有待转存的分组的流数据转存至关系型数据库;
删除内存数据库中当前日期的前一日期的所有待转存的分组的流数据,具体包括:当前日期的前一日期的待转存的分组的记录数不为0,则转存该分组的流数据至关系型数据库,并删除内存数据中该分组的流数据,然后将待转存的分组的分组号递增1,重复执行若所述当前日期的前一日期的待转存的分组的记录数不为0,则将当前日期的前一日期的所有待转存的分组的流数据转存至关系型数据库的步骤,直至当前日期的前一日期的待转存的分组的记录数等于0。
从上述描述可知,当流数据的统计的日期发生变化时,将当前日期的前一日期的流数据进行一次性的转存,能够实现对流数据的按照日期进行切分,实现流数据的日切。
继续参考图5,在本发明的另一个实例中,所述判断待转存的分组的分组号是否为空之后,所述方法还包括:
若不为空,则记录待转存的分组的分组号为初始分组号;
从所述内存数据库中获取所述初始分组号对应的分组的记录数;
判断记录数是否达到最大可存储量;
若达到,则将对应的待转存的分组转存至关系型数据库;并从所述内存数据库中删除所述待转存的分组的流数据,并将所述初始分组号递增1,并重复执行从所述内存数据库中获取所述初始分组号对应的分组的记录数的步骤,直至确定待转存的分组的的记录数小于最大可存储量。
在本实施例中,内存数据库为Redis内存数据库。
从上述描述可知,当待转存的分组的分组号不为空时,则对当前的各个待转存的分组进行流数据的批量转存。
继续参考图5,在本发明的另一个实例中,所述确定待转存的分组的记录数小于最大可存储量之后,还包括:
判断待转存的分组的分组号是否大于初始分组号;
若否,则从所述内存数据库中获取当前流数据的序列号,并根据所述序列号和所述流数据所属的主题信息对应的主题分组的最大可存储量,确定当前真实分组号;
若所述待转存的分组的分组号小于所述当前真实分组号、且所述待转存的分组的记录数为0,则待转存的分组的分组号累积递增1,直至所述待转存的分组的分组号大于所述真实分组号;
判断待转存的分组的分组号是否大于初始分组号;
若是,则在所述内存数据库中进行待转存的分组的分组号的更新,以将更新后的待转存的分组的分组号的流数据,并转存至关系型数据库中。
在本实施例中,内存数据库为Redis内存数据库。
在本实施例中,判断待转存的分组的分组号是否大于初始分组号之后,若待转存的分组的分组号大于初始分组号,则在所述内存数据库中进行待转存的分组的分组号的更新,以将更新后的待转存的分组的分组号的流数据,并转存至关系型数据库中。
在本实施例中,在所述内存数据库中进行待转存的分组的分组号的更新,以将更新后的待转存的分组的分组号的流数据,并转存至关系型数据库中之后,还包括:删除所述获取的所述待转存的分组所属主题的分布式锁,结束流程。
从上述描述可知,通过对流数据已经完成转存但是没有对待转存的分组的分组号进行更新,解决了数据完成转存后,待转存的分组号没有设置成功的问题;同时也确保了在某些极端情况下(如应用系统停机后导致Redis缓存的数据较多时),在Redis的分布式锁失效时间内,某个转存程序未完成数据转存,另一个转存程序也开始执行,也不会重复读取和转存流数据的情况。
图6为本发明实施例提供的流数据转存处理装置的结构示意图。如图6所示,该流数据转存处理装置60包括:分组缓存模块601和分组转存模块602。
分组缓存模块601,用于通过流计算引擎接收分布式消息系统实时发送的流数据;将所述流数据写入所述流数据所属的主题对应的分组集合中,其中所述分组集合部署在内存数据库中;所述分组集合中包括多个分组,每个分组具有一个分组号、且每个分组的最大可存储量相同;其中所述流数据存各个分组中时,一个分组号的分组存满后存入下一个分组号的分组;
分组转存模块602,用于通过转存程序按照预设时间间隔,扫描所述流数据所属主题对应的分组集合中的待转存的分组;若所述待转存的分组已达到所述最大可存储量,则从所述内存数据库中读取所述待转存的分组中的流数据,并转存至关系型数据库中。
在本发明的一个实施例中,所述分组缓存模块601,具体用于所述将所述流数据存储在所述流数据所属的主题对应的分组集合中的过程,包括:从所述内存数据库获取一个序列号,所述序列号中包含所述流数据所属的主题信息;根据所述序列号和所述流数据所属的主题信息对应的主题分组的最大可存储量,确定所述分组号;根据所述分组号,将流数据存储至所述分组号对应的分组中,直至所述分组存满后,重新执行从所述内存数据库获取一个新的序列号的步骤,其中所述新的序列号是在所述序列号基础上自动递增更新的序列号。
在本发明的一个实施例中,所述分组转存模块602,具体用于按照预设时间间隔,访问所述流数据所属主题对应的分组集合中的分组号被标记为待转存的分组;若所述待转存的分组的存储记录数以达到最大可存储量,则读取所述待转存的分组中的流数据,并转存至关系型数据库;将所述待转存的分组的分组号递增为下一个分组的分组号,并将下一个分组的分组号标记为待转存分组的分组,并重复执行确定所述流数据所属主题对应的分组集合中的分组号被标记为待转存分组的分组,为所述待转存的分组的步骤。
在本发明的一个实施例中,所述转存程序部署在集群中,所述装置还包括:
分布式锁第一处理模块603,用于从所述内存数据库中获取所述待转存的分组所属主题的分布式锁;若所述分布式锁获取成功,则从所述内存数据库获取当前日期的待转存的分组;判断所述待转存的分组的分组号是否为空;若为空,则获取所述当前日期的第一个分组的记录数;若所述分组的记录数大于0,则获取当前日期的前一日期的待转存的分组;若所述当前日期的前一日期的待转存的分组的记录数不为0,则将当前日期的前一日期的待转存的分组的流数据转存至关系型数据库;删除内存数据库中当前日期的前一日期的所有待转存的分组的流数据;将从内存数据库中获取的当前日期的待转存的分组的分组号设置为0;删除所述获取的所述待转存的分组所属主题的分布式锁。
分布式锁第二处理模块604,用于所述判断所述待转存的分组的分组号是否为空之后,还包括:若不为空,则记录待转存的分组的分组号为初始分组号;从所述内存数据库中获取所述初始分组号对应的分组的记录数;判断记录数是否达到最大可存储量;若达到,则将对应的待转存的分组转存至关系型数据库;并从所述内存数据库中删除所述待转存的分组的流数据,并将所述初始分组号递增1,并重复执行从所述内存数据库中获取所述初始分组号对应的分组的记录数的步骤,直至确定待转存的分组的的记录数小于最大可存储量。
分布式锁第三处理模块605,用于所述确定待转存的分组的记录数小于最大可存储量之后,还包括:判断待转存的分组的分组号是否大于初始分组号;若否,则从所述内存数据库中获取当前流数据的序列号,并根据所述序列号和所述流数据所属的主题信息对应的主题分组的最大可存储量,确定当前真实分组号;若所述待转存的分组的分组号小于所述当前真实分组号、且所述待转存的分组的记录数为0,则待转存的分组的分组号累积递增1,直至所述待转存的分组的分组号大于所述真实分组号;判断待转存的分组的分组号是否大于初始分组号;若是,则在所述内存数据库中进行待转存的分组的分组号的更新,以将更新后的待转存的分组的分组号的流数据,并转存至关系型数据库中。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图7为本发明实施例提供的服务器的硬件结构示意图。如图7所示,本实施例的服务器70包括:处理器701以及存储器702;其中
存储器702,用于存储计算机执行指令;
处理器701,用于执行存储器存储的计算机执行指令,以实现上述实施例中服务器所执行的各个步骤。具体可以参见前述方法实施例中的相关描述。
可选地,存储器702既可以是独立的,也可以跟处理器701集成在一起。
当存储器702独立设置时,该服务器还包括总线703,用于连接所述存储器702和处理器701。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上所述的流数据转存处理方法。
本发明实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时,实现如上所述的流数据转存处理方法。
在本发明所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(Central Processing Unit,简称CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,简称ISA)总线、外部设备互连(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,简称EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (10)

1.一种流数据转存处理方法,其特征在于,包括:
通过流计算引擎接收分布式消息系统实时发送的流数据;将所述流数据写入所述流数据所属的主题对应的分组集合中,其中所述分组集合部署在内存数据库中;所述分组集合中包括多个分组,每个分组具有一个分组号、且每个分组的最大可存储量相同;其中所述流数据存各个分组中时,一个分组号的分组存满后存入下一个分组号的分组;
通过转存程序按照预设时间间隔,扫描所述流数据所属主题对应的分组集合中的待转存的分组;若所述待转存的分组已达到所述最大可存储量,则从所述内存数据库中读取所述待转存的分组中的流数据,并转存至关系型数据库中。
2.根据权利要求1所述的方法,其特征在于,所述将所述流数据存储在所述流数据所属的主题对应的分组集合中,包括:
从所述内存数据库获取一个序列号,所述序列号中包含所述流数据所属的主题信息;
根据所述序列号和所述流数据所属的主题信息对应的主题分组的最大可存储量,确定所述分组号;
根据所述分组号,将流数据存储至所述分组号对应的分组中,直至所述分组存满后,重新执行从所述内存数据库获取一个新的序列号的步骤,其中所述新的序列号是在所述序列号基础上自动递增更新的序列号。
3.根据权利要求1所述的方法,其特征在于,所述通过转存程序按照预设时间间隔,获取所述流数据所属主题对应的分组集合中的待转存的分组;若所述待转存的分组已达到所述最大可存储量,则从所述内存数据库中读取所述待转存的分组中的流数据,并转存至关系型数据库中,包括:
按照预设时间间隔,访问所述流数据所属主题对应的分组集合中的分组号被标记为待转存的分组;
若所述待转存的分组的存储记录数以达到最大可存储量,则读取所述待转存的分组中的流数据,并转存至关系型数据库;
将所述待转存的分组的分组号递增为下一个分组的分组号,并将下一个分组的分组号标记为待转存分组的分组,并重复执行确定所述流数据所属主题对应的分组集合中的分组号被标记为待转存分组的分组,为所述待转存的分组的步骤。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述转存程序部署在集群中,所述方法还包括:
从所述内存数据库中获取所述待转存的分组所属主题的分布式锁;
若所述分布式锁获取成功,则从所述内存数据库获取当前日期的待转存的分组;
判断所述待转存的分组的分组号是否为空;
若为空,则获取所述当前日期的第一个分组的记录数;
若所述分组的记录数大于0,则获取当前日期的前一日期的待转存的分组;
若所述当前日期的前一日期的待转存的分组的记录数不为0,则将当前日期的前一日期的待转存的分组的流数据转存至关系型数据库;
删除内存数据库中当前日期的前一日期的所有待转存的分组的流数据;
将从内存数据库中获取的当前日期的待转存的分组的分组号设置为0;
删除所述获取的所述待转存的分组所属主题的分布式锁。
5.根据权利要求4所述的方法,其特征在于,所述判断所述待转存的分组的分组号是否为空之后,所述方法还包括:
若不为空,则记录待转存的分组的分组号为初始分组号;
从所述内存数据库中获取所述初始分组号对应的分组的记录数;
判断记录数是否达到最大可存储量;
若达到,则将对应的待转存的分组转存至关系型数据库;并从所述内存数据库中删除所述待转存的分组的流数据,并将所述初始分组号递增1,并重复执行从所述内存数据库中获取所述初始分组号对应的分组的记录数的步骤,直至确定待转存的分组的的记录数小于最大可存储量。
6.根据权利要求5所述的方法,其特征在于,所述确定待转存的分组的记录数小于最大可存储量之后,还包括:
判断待转存的分组的分组号是否大于初始分组号;
若否,则从所述内存数据库中获取当前流数据的序列号,并根据所述序列号和所述流数据所属的主题信息对应的主题分组的最大可存储量,确定当前真实分组号;
若所述待转存的分组的分组号小于所述当前真实分组号、且所述待转存的分组的记录数为0,则待转存的分组的分组号累积递增1,直至所述待转存的分组的分组号大于所述真实分组号;
判断待转存的分组的分组号是否大于初始分组号;
若是,则在所述内存数据库中进行待转存的分组的分组号的更新,以将更新后的待转存的分组的分组号的流数据,并转存至关系型数据库中。
7.一种流数据转存处理装置,其特征在于,包括:
分组缓存模块,用于通过流计算引擎接收分布式消息系统实时发送的流数据;将所述流数据写入所述流数据所属的主题对应的分组集合中,其中所述分组集合部署在内存数据库中;所述分组集合中包括多个分组,每个分组具有一个分组号、且每个分组的最大可存储量相同;其中所述流数据存各个分组中时,一个分组号的分组存满后存入下一个分组号的分组;
分组转存模块,用于通过转存程序按照预设时间间隔,扫描所述流数据所属主题对应的分组集合中的待转存的分组;若所述待转存的分组已达到所述最大可存储量,则从所述内存数据库中读取所述待转存的分组中的流数据,并转存至关系型数据库中。
8.一种服务器,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至6任一项所述的流数据转存处理方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至6任一项所述的流数据转存处理方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6任一项所述的流数据转存处理方法。
CN202110608014.1A 2021-06-01 2021-06-01 流数据转存处理方法、装置及服务器 Pending CN113360498A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110608014.1A CN113360498A (zh) 2021-06-01 2021-06-01 流数据转存处理方法、装置及服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110608014.1A CN113360498A (zh) 2021-06-01 2021-06-01 流数据转存处理方法、装置及服务器

Publications (1)

Publication Number Publication Date
CN113360498A true CN113360498A (zh) 2021-09-07

Family

ID=77530780

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110608014.1A Pending CN113360498A (zh) 2021-06-01 2021-06-01 流数据转存处理方法、装置及服务器

Country Status (1)

Country Link
CN (1) CN113360498A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115455015A (zh) * 2022-08-08 2022-12-09 中亿(深圳)信息科技有限公司 一种海量数据存储方法以及装置、存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814090A (zh) * 2010-03-22 2010-08-25 深圳市芯朗金能源技术有限公司 一种关系数据库的大批量数据插入方法
CN103914449A (zh) * 2012-12-29 2014-07-09 上海可鲁系统软件有限公司 一种多源时间序列数据压缩存储方法
CN104954388A (zh) * 2015-07-14 2015-09-30 电子科技大学 面向视频流数据的分布式多内存副本存储系统及方法
CN110704484A (zh) * 2019-09-09 2020-01-17 华迪计算机集团有限公司 一种对海量实时数据流进行处理的方法及系统
WO2021098555A1 (zh) * 2019-11-22 2021-05-27 北京金山云网络技术有限公司 一种分布式表格存储的处理方法、装置及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814090A (zh) * 2010-03-22 2010-08-25 深圳市芯朗金能源技术有限公司 一种关系数据库的大批量数据插入方法
CN103914449A (zh) * 2012-12-29 2014-07-09 上海可鲁系统软件有限公司 一种多源时间序列数据压缩存储方法
CN104954388A (zh) * 2015-07-14 2015-09-30 电子科技大学 面向视频流数据的分布式多内存副本存储系统及方法
CN110704484A (zh) * 2019-09-09 2020-01-17 华迪计算机集团有限公司 一种对海量实时数据流进行处理的方法及系统
WO2021098555A1 (zh) * 2019-11-22 2021-05-27 北京金山云网络技术有限公司 一种分布式表格存储的处理方法、装置及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115455015A (zh) * 2022-08-08 2022-12-09 中亿(深圳)信息科技有限公司 一种海量数据存储方法以及装置、存储介质
CN115455015B (zh) * 2022-08-08 2024-01-26 中亿(深圳)信息科技有限公司 一种海量数据存储方法以及装置、存储介质

Similar Documents

Publication Publication Date Title
US11307769B2 (en) Data storage method, apparatus and storage medium
CN111159436A (zh) 一种推荐多媒体内容的方法、装置及计算设备
CN111857574A (zh) 一种写请求数据压缩方法、系统、终端及存储介质
CN111273870A (zh) 云存储系统间海量数据迭代迁移方法、设备及存储介质
CN116501715B (zh) 一种多表全量数据的实时关联更新方法及装置
CN113360498A (zh) 流数据转存处理方法、装置及服务器
US20230030856A1 (en) Distributed table storage processing method, device and system
CN104077082A (zh) 网络投票数据存储方法和装置
CN113704359B (zh) 一种时序数据库多数据副本的同步方法、系统以及服务器
CN114020525A (zh) 故障隔离方法、装置、设备及存储介质
CN111090782A (zh) 一种图数据存储方法、装置、设备及存储介质
CN111125168A (zh) 一种数据处理方法、装置、电子设备及存储介质
CN115982244A (zh) 时序数据处理方法和装置、电子设备和存储介质
CN115695587A (zh) 一种业务数据处理系统、方法、装置和存储介质
CN110490581B (zh) 一种分布式系统临界数据资源更新方法及系统
CN109766363B (zh) 流式数据处理方法、系统、电子设备及存储介质
CN111435332B (zh) 数据处理方法及设备
CN114896276A (zh) 数据存储方法、装置、电子设备及分布式存储系统
CN113268395A (zh) 业务数据的处理方法、处理装置及终端
CN112925643A (zh) 数据处理方法、装置以及存储引擎装置
CN118365452B (zh) 基于Redis的热点账户的交易方法、装置、介质和设备
CN118400386B (zh) 日志管理方法及装置和电子设备
CN117112696A (zh) 数据同步的方法、装置、计算机设备及存储介质
CN114328498A (zh) 一种流数据存储方法及装置
CN113918587A (zh) 数据请求方法、装置、服务器及存储介质

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