CN114328498A - 一种流数据存储方法及装置 - Google Patents
一种流数据存储方法及装置 Download PDFInfo
- Publication number
- CN114328498A CN114328498A CN202011017656.6A CN202011017656A CN114328498A CN 114328498 A CN114328498 A CN 114328498A CN 202011017656 A CN202011017656 A CN 202011017656A CN 114328498 A CN114328498 A CN 114328498A
- Authority
- CN
- China
- Prior art keywords
- data
- stream data
- storage
- storage unit
- column
- 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
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种流数据存储方法及装置,用以提高对历史流数据分析时读数据的效率。在实时接收流数据时,将行存储格式的流数据转换为列存储格式的流数据,当需要访问历史流数据时,按照需求的列属性读取相应的列数据,然后再转换为适合流处理的行存储格式的流数据。由于对历史数据的分析时,一般不会需求流数据的所有列的数据,而是仅需要其中的若干列的数据,所以在访问历史流数据时,按照需求的列属性读取相应的列数据,过滤掉无需处理的列数据,提高数据的读取效率。
Description
技术领域
本申请实施例涉及存储技术领域,尤其涉及一种流数据存储方法及装置。
背景技术
随着互联网、物联网(internet of things,IoT)和第五代移动通信技术(5thgeneration mobile networks或5th generation wireless systems、5th-Generation,5G)的快速发展,从互联网服务、IoT设备或终端设备采集而成的流数据规模也日益增加。进一步地,对流数据存储的要求的规模更大,要求的效率更高,要求的时延更低,与此同时,对历史流数据的分析与实时处理中流处理的融合的要求也日益突出。
目前并没有一种可行的流数据存储方案适配历史流数据的分析与实时处理中流处理的融合。
发明内容
本申请实施例提供一种流数据存储方法及装置,用以支持历史流数据的分析与实时处理中流处理的有效融合。
本申请实施例提供的具体技术方案如下:
第一方面,本申请实施例提供一种流数据存储方法,包括:接收采用行存储格式的第一流数据;将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据。
通过上述方案,实时接收流数据将采用行存储格式的流数据转换为列存储格式的流数据,能够为后续对历史流数据进行分析提供服务。由于历史对流数据的分析时,需要批量分析流数据,因此,采用列存储格式的流数据适合批量分析流数据。
在一种可能的实施方式中,所述方法还可以包括:
将第一流数据存储到第一存储单元中;
将所述第二流数据存储到第二存储单元中,所述第二存储单元的读性能低于所述第一存储单元的读性能。
在一种可能的实施方式中,所述方法还可以包括:将所述第一流数据存储到第一存储单元中,过滤所述第二流数据中的无效事务的流数据,将经过过滤的第二流数据存储到所述第二存储单元中,所述无效事务的流数据包括经过事务处理后回滚的数据和/或经过事务处理后终止的数据。
上述设计中,在进行格式转化后,为了提高存储的流数据的有效性,将列存储格式的第二流数据中无效事务的流数据过滤掉,然后再将经过过滤的第二流数据存储到第二存储单元中。可以有效过滤脏数据,防止后续批量分析流数据时,读取脏数据占用资源,导致资源浪费。
在一种可能的设计中,将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据之前,确定所述第一流数据存储在所述第一存储单元中的时长已达到时长阈值。
由于数据的事务处理需要一定的时长,时长阈值可以根据事务处理的经验时长来确定。比如事务处理的经验时长为T秒。在流数据完成事务处理后,将其存储格式转换。
在一种可能的设计中,将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据之前,还包括:确定所述第一存储单元中存储的流数据达到存储量阈值。
在一种可能的设计中,所述第一流数据为所述第一存储单元中不需要执行事务处理的主题所属的流数据。
在一种可能的设计中,还包括:当所述第一存储单元中存储的数据达到存储量阈值且所述第一存储单元中包括未完成事务处理的主题所属的流数据时,触发降低属于设定的主题的流数据的接收速率。
在一种可能的设计中,还包括:接收客户端读取请求,所述读取请求携带需读取的数据所需满足的至少一个属性;从所述第二存储单元预读满足所述至少一个属性的第三流数据至预读缓存;将所述第三流数据转换为采用行存储格式的第四流数据;从所述预读缓存中读取流数据,并向所述客户端发送从预读缓存读取的流数据。
上述设计中,在实时接收流数据时,将行存储格式的流数据转换为列存储格式的流数据,再存储到大容量存储设备中。当需要访问历史流数据时,从大容量存储设备中按照需求的列属性读取相应的列数据,然后再转换为适合流处理的行存储格式的流数据。由于对历史数据的分析时,一般不会需求流数据的所有列的数据,比如,服务日志多达几十列数据,而是仅需要其中的若干列的数据,所以在访问历史流数据时,按照需求的列属性读取相应的列数据,过滤掉无需处理的列数据,提高数据的读取效率。
在一种可能的设计中,所述从所述第二存储单元读取满足所述至少一个属性的第三流数据至预读缓存,包括:根据第一元数据从所述第二存储单元中预读列属性与所述至少一个属性中任一属性匹配的列数据得到第三流数据,将所述第三流数据存储至预读缓存,所述第一元数据用于指示按列存储的流数据的每个列的列属性。
在一种可能的设计中,所述将所述第三流数据转换为采用行存储格式的第四流数据,包括:在将所述第三流数据由列存储格式转换行存储格式的过程中,过滤掉每一列数据中不满足所述至少一个属性中任一属性的列数据所在行的行数据,得到所述第四流数据。
第二方面,基于与第一方面的方法实施例同样的发明构思,还提供了一种流数据存储装置,该装置可以是芯片或者芯片***、或者一个或多个处理。该装置具有实现上述第一方面及第一方面各个可能的实现方式所实现的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
第三方面,本申请实施例提供一种装置,包括:处理器和存储器;该存储器用于存储指令,当该装置运行时,该处理器执行该存储器存储的该指令,以使该装置执行上述第一方面或第一方面的任一实现方法中的流数据存储方法。需要说明的是,该存储器可以集成于处理器中,也可以是独立于处理器之外。装置还可以包括总线。其中,处理器通过总线耦接存储器。其中,存储器可以包括可读存储器以及随机存取存储器。
第四方面,本申请实施例还提供一种可读存储介质,所述可读存储介质中存储有程序或指令,当其在计算机上运行时,使得上述第一方面的流数据存储方法被执行。
第五方面,本申请实施例还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面中的流数据存储方法。
另外,第二方面至第五方面中任一种实现方式所带来的技术效果可参见第一方面中不同实现方式所带来的技术效果,此处不再赘述。
附图说明
图1为本申请实施例中流数据存储***100的一种可能的结构示意图;
图2A为本申请实施例中流数据处理***200的一种可能的结构示意图;
图2B为本申请实施例中流数据处理***200的另一种可能的结构示意图;
图2C为本申请实施例中流数据存储***100的另一种可能的结构示意图;
图2D为本申请实施例中流数据存储***100的应用场景示意图。
图3为本申请实施例中一种流数据存储方法流程示意图;
图4为本申请实施例中另一种流数据存储方法流程示意图;
图5为本申请实施例中行存储格式转换为列存储格式示意图;
图6为本申请实施例中一种流数据读取流程示意图;
图7为本申请实施例中列存储格式转换为行存储格式示意图;
图8为本申请实施例中流数据存储装置示意图。
具体实施方式
为了更好理解本申请提供的流数据处理方法,首先对本申请实施例中涉及到的技术概念进行解释说明。
1)流数据(streaming data):流数据是一组顺序、大量、快速、连续到达的数据序列。一般情况下,流数据可被视为随时间延续而无限增长的动态数据集合。
2)流处理(stream processing)。
流处理是大数据处理的一种处理模式,是对动态数据的处理。在数据生成或接收数据时直接对数据进行处理。例如,处理模式可以包括事件流处理(event streamprocessing,ESP)、复杂事件处理(complex event processing,CEP)等。
3)批处理(batch processing)。
批处理是大数据处理的一种处理模式,主要是对静态数据集进行批量处理,并在处理完成后返回处理结果。批处理的数据集通常满足有界、持久、大量等特征,批处理的处理时延相比流处理较长。批处理,比如采用联机分析处理(on-line analyticalprocessing)。
4)行存储。行存储是指针对流数据按照行格式来存储。行存储可以保证相同记录的所有域存储在同一节点。行存储不支持快速查询处理,当查询仅针对多列表中的少数几列时,不能跳过不必要的列读取。
5)列存储。列存储将同一个记录的不同域分散存储。
6)热数据。热数据是指即时的位置状态、交易和浏览行为等。比如,即时的地理位置,某一特定时间活跃的手机应用等。再比如,一些实时的记录信息,比如用户刚打开某个软件或者网站进行的一些操作等。
7)温数据。温数据是指非即时的状态和行为数据。经常被访问的数据,比如近期经常访问的某个话题的数据。
8)事务(Transaction),事务描述应用程序执行的一组更新,该一组更新在一起管理。
9)事务的回滚(rollback)是指程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。当一个事务的某一个操作发生问题时,整个事务可以回滚掉,换言之当发生错误或事务被取消,则回滚事务。
10)事务的终止(abort)是指程序或者数据处理错误,程序终止。
11)元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data aboutdata),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。本申请实施例中,流数据的元数据可以包括命名空间(namespace)和主题(topic)。命名空间和主题用于标识该流数据。命名空间的主要功能是为了避免与流数据的标识相关的标识中出现歧义。Topic可以包括每个列的列属性。Topic中还可以包括类型、缺省值,以及是否为NULL中的一项或多项。其中,类型可以包括简单类型和复杂类型。复杂类型是由多个简单类型组合而成,在存储时按照一个列存储,可以提高物化效率。比如多个简单类型的列属性可以由一个列属性替代,该多个简单类型的列数据在存储时按照一个列存储。缺省值是指该列属性采用默认值,是否为NULL,用于指示列属性对应的列存储中是否存储有数据。
目前流数据存储中,用于流处理的实时流数据和用于批处理的历史流数据分开存储。目前针对用于批处理的历史流数据,仅能查询流数据处理结果和批处理结果。但在实际业务处理时,存在对历史数据的复杂事件处理,不仅仅需要流数据处理结果和批处理结果,还需要重新读取历史流数据,对满足某些属性的历史流数据进行分析。目前的流数据存储方案中,不支持针对历史数据的复杂事件处理。
为了实现针对历史数据满足复杂事件处理的需求,本申请实施例在接收到流数据后,将完成流处理的数据先存储到第一存储单元中,然后在第一存储单元中的流数据转换为适合进行数据分析的列数据,并存储到第二存储单元,使得第二存储单元中存储的流数据能够适配读取满足某些属性的历史流数据的需求。第一存储单元的读性能高于第二存储单元的读性能。作为一种示例,存储单元的读性能可以包括单位时间内支持的最大读取次数,或者单位时间内读取的最大数据量等中的一项或多项。
接下来,结合附图进一步介绍本申请提供的流数据存储方案。
图1为本申请提供的一种流数据存储***100的架构示意图。流数据存储***100可以包括第一存储单元101、第二存储单元102,以及处理单元103。第一存储单元101的存取速率高于第二存储单元102的存取速率。第一存储单元101,比如可以采用第一存储介质,第一存储介质可以为快速存储设备。快速存储设备具备保电、高吞吐率和低时延的特定。示例性地,快速存储设备可以是固态闪存盘,比如固态驱动器(solid state disk或solidstate drive,SSD)硬盘。快速存储设备还可以是非易失性内存等。第二存储单元102,比如可以采用第二存储介质,第二存储介质可以为大容量存储设备。大容量存储设备具备大压缩比、高吞吐率和大容量的特性。大容量存储设备可以是硬盘驱动器、光盘、软盘、闪存驱动器等。
处理单元103可以包括通用处理器,通用处理器可以是微处理器或者任何常规的处理器等,比如中央处理单元(central processing unit,CPU)。处理单元103,还可以是其他通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(fieldprogrammable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理单元103用于实现本申请实施例提供的流数据处理方法。
流数据存储***100用于为客户端提供读取服务。
作为一种可能的实施方式,流数据存储***100可以采用分布式存储***(distributed storage system)。分布式存储***由多个物理服务器(或者称为节点)组成,辅以管理***,在逻辑上表现为一个整体,提供统一存储服务的***。
一种示例中,分布式存储***中可以包括多个服务器,不同的服务器中可以部署第一存储介质和第二存储介质。多个服务器中部署的第一存储介质组成第一存储单元101,多个服务器中部署的第二存储介质组成第二存储单元102。服务器中可以部署处理器,多个服务器包括的处理器构成分布式处理***。客户端提交的读写任务可以由一个或者多个服务器来实现。
另一种示例中,分布式存储***中可以包括多个第一服务器和多个第二服务器,第一服务器中部署第一存储介质,第二服务器部署第二存储介质。多个第一服务器中部署的第一存储介质组成第一存储单元101,多个第二服务器中部署的第二存储介质组成第二存储单元102。第一存储介质组成第一存储单元101,多个服务器中部署的第二存储介质组成第二存储单元102。第一服务器和第二服务器均可以部署处理器。
应理解的是,分布式存储***中某个服务器可以仅部署第一存储介质,或者仅部署第二存储介质,还可以既部署第一存储介质,也部署第二存储介质。
图2A和图2B为本申请实施例提供的流数据处理***200的逻辑架构图。流数据处理***可以包括客户端侧和服务器端侧。服务器端侧部署流数据存储***。流数据处理***200从逻辑上划分可以包括接口层201、访问服务层202、后台服务层203以及存储层204。接口层201用于为从物联网(the internet of things,Iot)、互联网等采集的流数据提供存储接口。访问服务层202用于对访问的流数据进行管理,比如存储速率管理等。后台服务层203用于提供格式转换以及数据预读服务。存储层204用于存储流数据。作为一种示例,接口层201可以位于客户端侧。访问服务层202、后台服务层203以及存储层204位于服务器端侧。访问服务层202、后台服务层203以及存储层204属于流数据存储***的功能,或者描述为流数据存储***包括访问服务层202、后台服务层203以及存储层204。
示例性地,参见图2B所示,接口层201可以包括流存储接口201a。访问服务层202可以包括数据访问管理202a和事务管理202b。后台服务器层203可以包括格式转换服务203a和预读服务203b。存储层204可以包括热数据存储204a和温数据存储204b。存储层204还可以包括元数据存储204c。热数据存储可以是第一存储单元101,温数据存储可以是第二存储单元102。元数据存储可以由第一存储单元101实现,也可以由第二存储单元102实现,还可以由第一存储单元101和第二存储单元102以外的其它存储单元来实现。
需要说明的是,本申请实施例中,仅以分为热数据和温数据为例,当然还可以分为热数据、温数据和冷数据。可选地,冷数据可以保存的第二存储单元102中,还可以存储在除第一存储单元和第二存储单元以外的一个独立的存储单元中。
作为一种举例,流数据存储***100可以采用分布式存储结构。流数据存储***100部署于服务器端侧。参见图2C所示为一种可能的部署场景中的部署结构。第一存储单元101可以部署于多个第一服务器中,以三个第一服务器为例。第一存储单元101由三个非易失性内存组成,每个非易失性内存部署于一个第一服务器中,每个第一服务器可以部署格式转换服务。第二存储单元102可以部署于多个第二服务器中,参见图2C所示,以三个第二服务器为例,第二存储单元102由三个大容量存储设备组成,每个大容量存储设备部署于一个第二服务器中。预读服务203b可以部署于第二服务器中,比如可以每个第二服务器中均部署预设服务203或者仅部分第二服务器中部署预读服务203b。第一服务器与第二服务器之间可以通过高速网络连接,比如远程直接数据存取remote direct memory access,RDMA)高速网络。作为一个可能的示例,访问服务层202可以由一个或者多个第一服务器实现,也可以由除第一服务器和第二服务器以外的其它的服务器来实现。
在一种可能的应用场景中,本申请实施例提供的流数据存储***100用于存储来源于物联网、互联网或者终端设备等。流数据存储***100对外能够为数据处理的应用提供服务,比如流处理应用、批处理应用或者流批处理一体的应用。例如参见图2D所示,数据处理的处理引擎可以包括Apache Flink处理引擎,Apache Spark处理引擎或者高斯数据库(Gauss data base,Gauss DB)处理引擎等。
下面结合附图进一步介绍本申请实施例所提供的流数据存储方法。图3为一种流数据存储方法流程示意图。流数据存储方法可以由一个服务器来实现,也可以由服务器中的处理器或者逻辑功能模块来实现,比如由处理单元103来实现,后续以处理单元103为例进行说明。
S301,处理单元103接收采用行存储格式的第一流数据。
一种示例中,处理单元103在接收到第一流数据后,可以将第一流数据存储到第一存储单元中。处理单元103在实时接收到流数据时,本实施例以第一流数据为例,将第一流数据存储到第一存储单元后,启动流数据的格式转换。
可选地,处理单元103可以在接收到第一流数据时,也可以先对第一流数据进行格式转换,然后再将格式转换后的流数据存储到第一存储单元中。
S302,将第一存储单元中的第一流数据转换为采用列存储格式的第二流数据。
第一流数据可以是事务(event)流数据,事务流数据采用行存储格式。处理单元103将行存储格式的事务流数据转换为适合批处理的采用列存储格式的第二流数据。
示例性的,列存储格式可以是ORC(optimized row columnar)格式或者Parquet格式或者Carbon data格式存储。Parquet格式是面向分析型业务的列式存储格式。Carbondata格式是华为研发的采用列存储方式的文件存储格式。
在一种示例中,处理单元103可以按照流事务的特性,包括时间连续性特性,从第一存储单元中获取满足第一时间窗口的流数据,比如满足第一时间窗口的流数据中包括第一流数据,将第一流数据的存储格式转换为列存储格式。例如,第一时间窗口为在第二存储单元的存储时长达到T1秒。
又一种示例中,处理单元103第一存储单元中的流数据进行定量和定时的格式转换。比如,处理单元103在确定第一存储单元存储的流数据达到存储量阈值时,处理单元103将第一存储单元中满足第一时间窗口的流数据的转换格式转换为列存储。比如满足第一时间窗口的流数据中包括第一流数据,将第一流数据的存储格式转换为列存储格式得到第二流数据。
在一种可能的实施方式中,处理单元103在完成转换第一存储单元的流数据的存储格式后,可以将转换格式后的流数据存储到第二存储单元中。即执行S303。
S303,将第二流数据存储到第二存储单元中,第二存储单元的读性能低于第一存储单元的读性能。第二存储单元存储的流数据可以为流处理以及批处理提供服务。
在一种可能的实施方式中,在进行格式转化后,为了提高存储的流数据的有效性,可以将列存储格式的第二流数据中无效事务的流数据过滤掉,然后再将经过过滤的第二流数据存储到第二存储单元中。无效事务的流数据可以包括回滚的事务数据和/或终止的事务数据。回滚的事务数据,也可以描述为经过事务处理后回滚的数据。终止的事务数据,也可以描述为经过事务处理后终止的数据。
在一种示例中,处理单元103可以按照流事务的特性,包括时间连续性特性,从第一存储单元中获取满足时间窗口的流数据,比如满足第二时间窗口的流数据中包括第二流数据,处理单元103过滤掉满足时间窗口的流数据中无效事务的流数据。例如,根据时间戳将第一存储单元中距离当前时刻的时长达到T2秒的流数据包括的无效事务的流数据过滤掉。换句话说,对第一存储单元中采用列存储格式的流数据,定时触发数据归档操作。数据归档操作包括过滤无效事务的流数据。
由于事务处理需要一定的时长,第二时间窗口可以根据事务处理的经验时长来确定。比如事务处理的经验时长为T2秒。本申请实施例中,满足第二时间窗口的流数据包括完成事务处理的流数据和/或不需要执行事务处理的流数据。
又一种示例中,处理单元103对格式转换后的流数据进行定量和定时的无效事务数据过滤。比如,处理单元103在确定第一存储单元存储的流数据达到存储量阈值时,处理单元103过滤掉时间戳满足第二时间窗口的流数据中无效事务的流数据。并将经过过滤处理的满足第二时间窗口的流数据保存到第二存储单元中。
可选地,第一时间窗口与第二时间窗口可以相同或者不同。相同的情况下,处理单元103可以对第一存储单元存储的流数据进行定时的数据归档操作,或者对第一存储单元存储的流数据进行定时和定量的数据归档操作,数据归档操作可以包括格式转换和无效事务数据过滤。例如,处理单元103将第一存储单元中满足第一时间窗口的流数据转换为列存储格式。并对转换为列存储格式的流数据进行无效事务数据过滤操作,进一步地,将执行过滤操作后的流数据存储到第二存储单元中。
在一种可能的实施方式中,在将第二流数据存储到第二存储单元之前,可以对第二流数据进行压缩处理,然后再将压缩处理后的第二流数据存储到第二存储单元。该实施例中,进行压缩处理的第二流数据可以是经过过滤处理的第二流数据。
在一种可能的实施方式中,处理单元103在确定第一存储单元存储的流数据达到存储量阈值时,可以优先将第一存储单元中不需要执行事务处理的主题所属的流数据进行格式转换,并将从第一存储单元转移到第二存储单元中。比如,第一流数据为不需要执行事务处理的topic所属的流数据,当第一存储单元存储的流数据达到存储量阈值时,优先将第一流数据进行格式转换并从第一存储单元转移到第二存储单元中。
在另一种可能的实施方式中,处理单元103可以在确定第一存储单元存储的流数据达到存储量阈值且第一存储单元还包含未完成事务主题所属的流数据,一方面,处理单元103优先将第一存储单元中不需要执行事务处理的主题所属的流数据进行格式转换,并将从第一存储单元转移到第二存储单元中。另一方面,处理单元103可以启动流数据限速机制,即触发降低属于设定的主题的流数据的接收速率。比如可以设定限速主题的优先级,优先级高的主题的流数据优先触发限制接收速率,或者优先级低的主题的流数据优先触发限制接收速率。
通过上述方案,实时接收流数据后,将采用行存储格式的流数据转换为列存储格式的流数据保存到大容量存储设备中,大容量存储设备中的列存储格式的流数据能够为后续对历史流数据进行分析提供服务。
进一步地,第二存储单元存储的采用列存储格式的流数据可以为批处理提供服务,比如复杂的伴随查询的批处理。当客户端需要读取流数据时,客户端可以向存储***发送读取请求。
S304,处理单元103接收到客户端发送的读取请求,读取请求中携带需读取的流数据所需满足的至少一个属性。
举例来说,客户端需要查询近三天的违章车辆信息,则读取请求用于请求查询近三天的违章车辆信息。车辆信息可以包括车牌号、车辆颜色、车牌、违章的图片等。读取请求中携带的属性至少包括时间、违章。还可以包括车牌号、车辆颜色、车牌、违章的图片、违章地址等。
S305,处理单元103从第二存储单元读取满足至少一个属性的第三流数据。
接着上面的例子,读取请求用于请求查询近三天的违章车辆信息。读取请求中携带的属性包括时间、违章、车牌号、车辆颜色以及违章地址。
第二存储单元中存储的流数据的列属性可以包括时间、是否违章、车牌号、车辆颜色、经过的地址、车牌、摄像头采集的图片等。例如,参见表1所示。读取的满足至少一个属性的第三流数据包括序号1所在的行中的时间戳列、是否违章列、车牌号列、车辆颜色列以及违章地址列所包括的信息。
表1
序号 | 时间戳 | 是否违章 | 车牌号 | 车辆颜色 | 经过的地址 | 车牌 | 图片 |
1 | 2020-9-15,12:00 | 是 | XXXXXX1 | 红色 | X交叉口 | B | 1.jpg |
2 | 2020-9-14,13:00 | 否 | XXXXXX2 | 黑色 | X路 | C | 2.jpg |
S306,处理单元103将第三流数据转换为采用行存储格式的第四流数据。
S307,处理单元103向客户端发送所述第四流数据。
本申请实施例中,在实时接收流数据时,将行存储格式的流数据转换为列存储格式的流数据。当需要访问历史流数据时,按照需求的列属性读取相应的列数据,然后再转换为适合流处理的行存储格式的流数据。由于对历史数据的分析时,一般不会需求流数据的所有列的数据,比如,服务日志多达几十列数据,而是仅需要其中的若干列的数据,所以在访问历史流数据时,按照需求的列属性读取相应的列数据,过滤掉无需处理的列数据,提高数据的读取效率。
在一种可能的实施方式中,在从第二存储单元中读取满足读取请求所指示的至少一个属性的第三流数据时,可以结合流数据的元数据来从第二存储单元中读取。比如,流数据的元数据称为第一元数据。第一元数据用于指示按列存储的流数据的每个列的列属性。进一步地,处理单元103根据第一元数据从第二存储单元中获取列属性与至少一个属性任一属性匹配的列数据得到第三流数据。处理单元103在将第三数据流转换为采用行存储格式的第四流数据过程中,过滤掉每一列数据中不满足所述至少一个属性中任一属性的列数据所在行的行数据,得到第四流数据。
作为一种举例,读取请求用于请求查询近三天的违章车辆信息。读取请求中携带的属性包括时间、违章、车牌号、车辆颜色以及地址。作为一种举例,第一元数据可以参见表2所示。需要说明的是,表2仅作为一种举例,示出了第一元数据包括的部分信息。
表2
处理单元103结合读取请求确定需要的列的列属性包括时间戳、是否违章、车牌号、车辆颜色和地址。基于此,处理单元103读取时间戳所在列数据、是否违章所在列数据、车牌号所在列数据、车辆颜色所在列数据以及地址所在列数据。即在读取列数据时过滤掉不需要的列数据,过滤车来车牌所在列数据以及图片所在列数据。进一步地,处理单元103在将读取的列数据转换为行数据的过程中,将不满足属性要求的行数据删除。比如当前时间为2020-9-16日,8:00。结合表2,由于序号2所在的行数据并非违章车辆,因此过滤不满足违章的行数据。
下面结合图2B对本申请实施例提供的流数据存储方法进行详细说明,参见图4所示。
流数据的来源可以包括物联网、互联网或者终端设备等。从物联网和互联网传输的流数据通过数据采集服务以及流存储接口到达数据访问管理。
S401,格式转换服务从数据访问管理接收实时采集到的流数据。
一种示例中,格式转换服务可以向数据访问管理发送订阅请求,订阅请求用于订阅流数据,比如某些topic的流数据。数据访问管理根据订阅请求向格式转换服务发送流数据。
从物联网或者互联网传输来的流数据采用的格式一般为行存储格式。
另一种示例中,格式转换服务可以根据需求向数据访问管理主动获取需求的流数据。
S402,格式转换服务将接收到流数据存储到热数据存储中。
当热数据存储的数据达到数据量阈值时,格式转换服务触发执行热数据存储中时间戳满足时间窗口的流数据的数据归档操作。数据归档操作可以包括存储格式转换,还包括无效事务数据过滤。
S403,格式转换服务将热数据存储中的流数据的存储格式转换为列存储格式。参见图5所示。
S404,对热数据存储中列存储格式的流数据进行无效事务数据过滤。
示例性地,可以周期性地执行数据归档操作。比如每间隔T秒将时间戳距离当前时间达到T秒的流数据进行数据归档处理。比如,可以设置定时器,每次定时器超时时,触发数据归档。定时器每次超时后重新计时。
示例性的,无效事务数据过滤至少包括过滤热数据存储中时间戳满足时间窗口的流数据中的无效的事务数据过滤掉,比如rollback事务数据和abort事务数据。通过过滤无效的事务数据,能够实现无脏数据的数据存储,提高后续读数据时读取脏数据带来额外的输入/输出(Input/Output,I/O)开销。
可选地,格式转换服务执行数据归档操作之前,向事务管理验证事务的状态。事务的状态指示事务是否完成执行。
S405,按照流数据的元数据定义,格式转换服务将热数据存储中列存储格式的流数据按列存储格式压缩转移到温数据存储中。
参见图5所示,格式转换服务对经过过滤的列存储格式的流数据进行压缩处理。
S406,格式转换服务在列存储格式的流数据转移到温数据存储后,更新元数据的状态信息。元数据的状态信息用于指示元数据对应的流数据的存储位置,或者可以描述为元数据的状态信息用于记录热数据和温数据的水平切割状态。本实施例中,将热数据存储中的流数据称为热数据,将温数据存储中的流数据称为温数据。热数据和温数据可以按照时间戳来进行水平切割,比如元数据的状态信息包括时间戳阈值,即时间戳早于时间戳阈值的流数据为热数据,时间戳晚于时间戳阈值的流数据为温数据。每次将列存储格式的流数据转移到温数据存储后,可以更新元数据的状态信息,比如更新时间戳阈值。
接收到的流数据按照时间戳进行水平切割为数据段(segment)。每个数据段所记录的流数据的行数由配置决定。每个数据段成对存储有流数据文件和索引文件。流数据文件用于存储流数据。索引文件用于记录流数据在对应流数据文件中的索引信息,比如偏移地址。例如索引信息包括时间戳到数据段的索引<时间戳,数据段编号>,以及数据段编号到段内行号偏移的索引<数据段编号,段内行号偏移>。
在一种可能的实施方式中,事务管理在确定热数据存储中存储的数据达到存储阈值,并且热数据存储包括未完成事务处理的流数据时,事务管理对热数据存储中不需要执行事务处理的流数据进行格式转换,并优先存储到温数据存储中,从而腾出热数据存储的部分存储空间。事务管理还可以向数据访问管理发送限速请求,限速请求用于请求降低设定topic的流数据的接收速率。
应理解的是,温数据存储中的流数据为完成事务处理的流数据或者不需要事务处理的流数据。另外,热数据存储中采用列存储格式的流数据可以为对历史流数据的批处理提供服务。
记录在温数据存储,或者记录在温数据存储和热数据存储中采用列存储格式的流数据能够为历史流数据的批处理提供服务。
下面结合图6对历史流数据的批处理的流程进行说明。
S601,数据访问管理接收来自应用发送的读取请求,读取请求中携带需读取的数据所需满足的至少一个属性。
S602,数据访问管理向预读服务发送读取请求。
S603,预读服务从元数据存储中读取元数据。预读服务根据元数据创建投影映射,投影映射包括元数据包括的列属性与采用列存储格式的流数据中每列数据的映射。根据投影映射过滤不需要读取的列数据,即仅读取列属性满足至少一个属性的列数据。
S604,预读服务在温数据存储中进行数据定位得到定位信息。具体的,预读服务器根据索引文件确定待读取的流数据在温数据存储中的位置。定位信息可以包括时间戳或者绝对的数据段行号。
S605,预读服务在确定定位信息和元数据均合法时,创建预读后台对象。
S606,预读后台对象启动线程,从温数据存储中读取流数据,具体的读取满足至少一个属性的每个属性的列数据,按照行存储格式存入自身的预读缓存。
示例性地,预读后台对象按照投影映射,按照每行数据中列属性的物理顺序存入预读缓存。例如,参见图7所示,预读后台对象在读取流数据时,将列属性不满足至少一个属性中任一属性的列数据过滤掉,然后进行解压缩处理,然后再转换为行存储格式的事务流数据。
另外,在按照每行数据中列属性的物理顺序存入预读缓存的过程中,过滤掉每一列数据中不满足所述至少一个属性中任一属性的列数据所在行的行数据。
S607,预读服务从预读缓存中读取流数据。
需要说明的是,当预读缓存中不具有足够的数据时,预读服务暂停从预读缓存中读取,待预读后台对象存入足够的流数据时,预读服务再从预读缓存中读取流数据。例如,足够的数据可以是一行流数据。需要说明的是,按行存储的流数据,一行流数据可以认为是一条消息或者一条日志等。预读缓存可以是由环形队列构成的生产者消费者模型。预读后台对象作为生产者,预读服务作为消费者。预读缓存能够实现结合缓存的大小和读取数据的速率从历史流数据中读取数据。
S608,预读服务将读取到的流数据发送给数据访问管理。
S609,数据访问管理将接收到的流数据通过流存储接口发送给应用。
在一种可能的实施方式中,由于产生的数据的设备版本发生变化时,比如传感器升级更换等,若接收到某个topic的流数据,创建更新后版本的元数据。不同版本的元数据单独保存,并可以对保存的元数据的版本号进行标注。预读后台对象在从温数据管理中读取满足至少一个属性的每个属性的列数据时,将读取到的非最新版本满足至少一个属性的列数据转换为最新版本的列数据。例如,非最新版本中满足至少一个属性的列数据包括3列,而最新版本中满足至少一个属性的列数据包括4列,将非最新版本中的满足至少一个属性的3列数据转换为4列,增加的一列采用缺省值。通过该方式,客户端侧无需感知数据的版本的变化。
上文中结合图1至图7,详细描述了本申请所提供的流数据存储的方法,流数据存储的方法也可以具体由流数据存储装置来实现,下面将结合图8,描述根据本申请所提供的数据存储装置。
本实施例提供一种数据存储装置800,该装置800可以实现图3、图4或图6所述的方法。参见图8所示,该装置800包括管理单元801、格式转换单元802、后台对象单元803和预读服务单元804。数据存储装置800可以应用于服务器侧。
管理单元804,用于接收采用行存储格式的第一流数据。
格式转换单元802,用于将第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据。
在一种可能的实施方式中,所述管理单元,还用于将所述第一流数据存储到所述第一存储单元中;
所述格式转换单元,还用于将所述第二流数据从第一存储单元转移到第二存储单元中,所述第二存储单元的读性能低于所述第一存储单元的读性能。
在一种可能的实施方式中,所述格式转换单元802,具体用于:过滤所述第二流数据中的无效事务的流数据,将经过过滤的第二流数据存储到所述第二存储单元中,所述无效事务的流数据包括经过事务处理后回滚的数据和/或经过事务处理后终止的数据。
在一种可能的实施方式中,所述格式转换单元802,还用于在将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据之前,确定所述第一流数据存储在所述第一存储单元中的时长已达到时长阈值。
在一种可能的实施方式中,所述格式转换单元802,还用于将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据之前,确定所述第一存储单元中存储的流数据达到存储量阈值。
在一种可能的实施方式中,所述第一流数据为所述第一存储单元中不需要执行事务处理的主题所属的流数据。
在一种可能的实施方式中,所述管理单元801,还用于:当所述第一存储单元中存储的数据达到存储量阈值且所述第一存储单元中包括未完成事务处理的主题所属的流数据时,触发降低属于设定的主题的流数据的接收速率。
在一种可能的实施方式中,所述管理单元801,还用于接收客户端读取请求,所述读取请求携带需读取的数据所需满足的至少一个属性。
后台对象单元803,用于从所述第二存储单元预读满足所述至少一个属性的第三流数据至预读缓存;将所述第三流数据转换为采用行存储格式的第四流数据。
预读服务单元804,从所述预读缓存中读取流数据,并发送给所述管理单元801。
所述管理单元801,用于向所述客户端发送从预读缓存读取的流数据。
可选的,管理单元801可以在接收到读取请求时,将读取请求发送给预读服务单元804,从而预读服务单元804指示后台对象单元803执行预读操作。
在一种可能的实施方式中,所述后台对象单元803,具体用于:
根据第一元数据从所述第二存储单元中预读列属性与所述至少一个属性中任一属性匹配的列数据得到第三流数据,将所述第三流数据存储至预读缓存,所述第一元数据用于指示按列存储的流数据的每个列的列属性。
在一种可能的实施方式中,所述后台对象单元803,具体用于:在将所述第三流数据由列存储格式转换行存储格式的过程中,过滤掉每一列数据中不满足所述至少一个属性中任一属性的列数据所在行的行数据,得到所述第四流数据。
作为一种可能的示例,管理单元801可以用于实现图2A或图2B中访问服务层202的功能。格式转换单元802、后台对象单元803和预读服务单元804可以用于实现图2A或图2B中后台服务层203的功能。比如格式转换单元802用于实现格式转换服务203a的功能。后台对象单元803用于实现预读后台服务的功能。预读服务单元804用于实现预读服务203b的功能。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说可以全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台设备,比如服务器中的处理器(processor)执行本申请各个实施例该方法的全部或部分步骤。而前述的存储介质(或者存储单元)包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。另外,本发明实施例也可以基于硬件来实现,例如FPGA,也可以由软件与硬件结合实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请实施例的范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (21)
1.一种流数据存储方法,其特征在于,包括:
接收采用行存储格式的第一流数据;
将第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
将所述第一流数据存储在第一存储单元;
将所述第二流数据存储到第二存储单元;其中,所述第二存储单元的读性能低于所述第一存储单元的读性能。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
将所述第一流数据存储在第一存储单元;
过滤所述第二流数据中的无效事务的流数据,将经过过滤的第二流数据存储到第二存储单元中,所述无效事务的流数据包括经过事务处理后回滚的数据和/或经过事务处理后终止的数据;其中,所述第二存储单元的读性能低于所述第一存储单元的读性能。
4.如权利要求2或3所述的方法,其特征在于,将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据之前,确定所述第一流数据存储在所述第一存储单元中的时长已达到时长阈值。
5.如权利要求2-4任一项所述的方法,其特征在于,将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据之前,还包括:
确定所述第一存储单元中存储的流数据达到存储量阈值。
6.如权利要求5所述的方法,其特征在于,所述第一流数据为所述第一存储单元中不需要执行事务处理的主题所属的流数据。
7.如权利要求2-6任一项所述的方法,其特征在于,还包括:
当所述第一存储单元中存储的数据达到存储量阈值且所述第一存储单元中包括未完成事务处理的主题所属的流数据时,触发降低属于设定的主题的流数据的接收速率。
8.如权利2-7任一项所述的方法,其特征在于,还包括:
接收客户端读取请求,所述读取请求携带需读取的数据所需满足的至少一个属性;
从所述第二存储单元预读满足所述至少一个属性的第三流数据至预读缓存;
将所述第三流数据转换为采用行存储格式的第四流数据;
从所述预读缓存中读取流数据,并向所述客户端发送从预读缓存读取的流数据。
9.如权利要求8所述的方法,其特征在于,所述从所述第二存储单元读取满足所述至少一个属性的第三流数据至预读缓存,包括:
根据第一元数据从所述第二存储单元中预读列属性与所述至少一个属性中任一属性匹配的列数据得到第三流数据,将所述第三流数据存储至预读缓存,所述第一元数据用于指示按列存储的流数据的每个列的列属性。
10.如权利要求9所述的方法,其特征在于,所述将所述第三流数据转换为采用行存储格式的第四流数据,包括:
在将所述第三流数据由列存储格式转换行存储格式的过程中,过滤掉每一列数据中不满足所述至少一个属性中任一属性的列数据所在行的行数据,得到所述第四流数据。
11.一种流数据存储装置,其特征在于,包括:
管理单元,用于接收采用行存储格式的第一流数据;
格式转换单元,用于将第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据。
12.如权利要求11所述的装置,其特征在于,还包括:
所述管理单元,还用于将所述第一流数据存储到所述第一存储单元中;
所述格式转换单元,还用于将所述第二流数据存储到第二存储单元中,所述第二存储单元的读性能低于所述第一存储单元的读性能。
13.如权利要求11所述的装置,其特征在于:
所述管理单元,还用于将所述第一流数据存储在第一存储单元;
所述格式转换单元,还用于过滤所述第二流数据中的无效事务的流数据,将经过过滤的第二流数据存储到所述第二存储单元中,所述无效事务的流数据包括经过事务处理后回滚的数据和/或经过事务处理后终止的数据。
14.如权利要求12或13所述的装置,其特征在于,所述格式转换单元,还用于在将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据之前,确定所述第一流数据存储在所述第一存储单元中的时长已达到时长阈值。
15.如权利要求12-14任一项所述的装置,其特征在于,所述格式转换单元,还用于将所述第一存储单元中的所述第一流数据转换为采用列存储格式的第二流数据之前,确定所述第一存储单元中存储的流数据达到存储量阈值。
16.如权利要求15所述的装置,其特征在于,所述第一流数据为所述第一存储单元中不需要执行事务处理的主题所属的流数据。
17.如权利要求12-16任一项所述的装置,其特征在于,所述管理单元,还用于:
当所述第一存储单元中存储的数据达到存储量阈值且所述第一存储单元中包括未完成事务处理的主题所属的流数据时,触发降低属于设定的主题的流数据的接收速率。
18.如权利12-17任一项所述的装置,其特征在于:
所述管理单元,还用于接收客户端读取请求,所述读取请求携带需读取的数据所需满足的至少一个属性;
后台对象单元,用于从所述第二存储单元预读满足所述至少一个属性的第三流数据至预读缓存;将所述第三流数据转换为采用行存储格式的第四流数据;
预读服务单元,从所述预读缓存中读取流数据,并发送给所述管理单元;
所述管理单元,用于向所述客户端发送从预读缓存读取的流数据。
19.如权利要求18所述的装置,其特征在于,所述后台对象单元,具体用于:
根据第一元数据从所述第二存储单元中预读列属性与所述至少一个属性中任一属性匹配的列数据得到第三流数据,将所述第三流数据存储至预读缓存,所述第一元数据用于指示按列存储的流数据的每个列的列属性。
20.如权利要求19所述的装置,其特征在于,所述后台对象单元,具体用于:
在将所述第三流数据由列存储格式转换行存储格式的过程中,过滤掉每一列数据中不满足所述至少一个属性中任一属性的列数据所在行的行数据,得到所述第四流数据。
21.一种流数据存储装置,其特征在于,所述装置包括处理器以及存储器;
所述存储器,用于存储软件指令;
所述处理器,用于调用所述存储器存储的软件指令,以执行上述权利要求1至10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011017656.6A CN114328498A (zh) | 2020-09-24 | 2020-09-24 | 一种流数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011017656.6A CN114328498A (zh) | 2020-09-24 | 2020-09-24 | 一种流数据存储方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114328498A true CN114328498A (zh) | 2022-04-12 |
Family
ID=81010866
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011017656.6A Pending CN114328498A (zh) | 2020-09-24 | 2020-09-24 | 一种流数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114328498A (zh) |
-
2020
- 2020-09-24 CN CN202011017656.6A patent/CN114328498A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147398B (zh) | 一种数据处理方法、装置、介质和电子设备 | |
US10043220B2 (en) | Method, device and storage medium for data processing | |
CN109167840B (zh) | 一种任务推送方法、节点自治服务器及边缘缓存服务器 | |
CN108055302B (zh) | 一种图片缓存处理方法、***和服务器 | |
US20050055383A1 (en) | Capturing session activity as in-memory snapshots using a time-based sampling technique within a database for performance tuning and problem diagnosis | |
CN110413650B (zh) | 一种业务数据的处理方法、装置、设备和存储介质 | |
CN111258978B (zh) | 一种数据存储的方法 | |
CN110505495B (zh) | 多媒体资源抽帧方法、装置、服务器及存储介质 | |
WO2021244473A1 (zh) | 频率控制方法及装置 | |
CN107346270B (zh) | 基于实时计算的基数估计的方法和*** | |
CN108228322B (zh) | 一种分布式链路跟踪、分析方法及服务器、全局调度器 | |
CN111078651A (zh) | 统计对象存储的使用量的方法及装置 | |
CN112613271A (zh) | 数据分页方法、装置、计算机设备及存储介质 | |
CN114398520A (zh) | 数据检索方法、***、装置、电子设备及存储介质 | |
WO2021057515A1 (zh) | 日切数据卸载方法、装置、设备及介质 | |
CN111625600B (zh) | 数据存储的处理方法、***、计算机设备及存储介质 | |
CN114328498A (zh) | 一种流数据存储方法及装置 | |
CN115866331A (zh) | 视频抽帧分析方法、装置、设备及存储介质 | |
CN111061719B (zh) | 数据收集方法、装置、设备和存储介质 | |
CN109948098B (zh) | 数据过滤方法、缓存信息的记录方法及装置 | |
CN114218173A (zh) | 传帐类交易文件的批处理***、处理方法、介质和设备 | |
CN110019259B (zh) | 分布式索引服务引擎的数据更新方法、装置及存储介质 | |
WO2020049746A1 (ja) | データベース装置、プログラム、およびデータ処理方法 | |
CN111782588A (zh) | 一种文件读取方法、装置、设备和介质 | |
CN117390040B (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 |