CN114722092A - 时序数据处理方法、***、存储介质和电子设备 - Google Patents
时序数据处理方法、***、存储介质和电子设备 Download PDFInfo
- Publication number
- CN114722092A CN114722092A CN202210240693.6A CN202210240693A CN114722092A CN 114722092 A CN114722092 A CN 114722092A CN 202210240693 A CN202210240693 A CN 202210240693A CN 114722092 A CN114722092 A CN 114722092A
- Authority
- CN
- China
- Prior art keywords
- data
- fragmentation
- message queue
- time sequence
- time
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1734—Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种时序数据处理方法、***、存储介质和电子设备。其中,该方法包括:响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;将从消息队列中读取到的分片结果写入至内存。本发明解决了数据存储的效率低的技术问题。
Description
技术领域
本发明涉及分布式计算、数据处理领域,具体而言,涉及一种时序数据处理方法、***、存储介质和电子设备。
背景技术
目前,在对时序数据进行存储时,日志存储和数据存储紧耦合在同一个数据节点上,当需要对数据节点进行水平扩容或者提高数据的副本数时,会使得日志的副本数也会提高,从而导致数据存储的效率低的问题。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种时序数据处理方法、***、存储介质和电子设备,以至少解决数据存储的效率低的技术问题。
根据本发明实施例的一个方面,提供了一种时序数据处理方法,包括:响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;将从消息队列中读取到的分片结果写入至内存。
可选地,该方法包括:对时序数据进行分片处理,得到分片结果。
可选地,对时序数据进行分片处理,得到分片结果,包括:确定时序数据的时间戳所匹配到的第一分片信息,其中,第一分片信息用于表征第一时段与第一分片信息中的分片之间的映射关系,第一时段包括时序数据的时间戳;基于第一分片信息对时序数据进行分片处理,得到分片结果。
可选地,基于第一分片信息对时序数据进行分片处理,得到分片结果,包括:基于第一分片信息中的分片的数量和时序数据对应的键,确定时序数据对应的目标分片,得到分片结果。
可选地,确定时序数据的时间戳所匹配到的第一分片信息,该方法包括:基于存储节点的数量确定第一分片信息;其中,将从消息队列中读取到的时序数据写入至内存,包括:基于存储节点将从消息队列中读取到的时序数据写入至内存。
可选地,基于存储节点的数量确定第一分片信息,该方法包括:基于第一分片信息在消息队列中至少创建第一分片;在存储节点上创建和消息队列中第一分片的数量相同的第二分片,其中,第二分片和第一分片一一对应。
可选地,该方法还包括:向消息队列中增加与新增存储节点的数量对应的第三分片;基于第三分片的数量、新增存储节点对应的时间戳和消息队列中的第一分片的数量确定第三分片信息,其中,第三分片信息用于表征第三时段与由第一分片和第三分片得到的分片集之间的映射关系,第三时段与新增存储节点对应的时间戳相关联。
可选地,将从消息队列中读取到的分片结果写入至内存,包括:分别在多个存储节点中,从消息队列中读取到分片结果,且将读取到的分片结果写入至内存;或者分别在多个存储节点中,从消息队列中读取相同主题下的多个分片结果,且将读取到的多个分片结果写入至内存。
可选地,获取待处理的时序数据,包括:如果第一集群中的数据代理节点处于正常工作状态,则基于第一集群中的数据代理节点获取待处理的时序数据;如果第一集群中的数据代理节点处于异常工作状态,则基于第二集群中的数据代理节点获取待处理的时序数据。
可选地,该方法还包括:基于数据订阅消息确定目标组件,其中,数据订阅消息用于表征待进行数据订阅的任务;将从所述消息队列中读取到的时序数据写入至目标组件中。
根据本发明实施例的另一方面,提供了一种时序数据处理装置,包括:响应单元,用于响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;存储单元,用于在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;写入单元,用于将从消息队列中读取到的分片结果写入至内存。
根据本发明实施例的另一方面,提供了一种时序数据处理***,包括:数据代理组件,用于响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;消息队列组件,用于在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;数据存储组件,用于将从消息队列中读取到的分片结果写入至内存。
本发明实施例还提供了一种计算机可读存储介质。该计算机可读存储介质包括存储的程序,其中,在程序被处理器运行时控制计算机可读存储介质所在设备执行本发明实施例的时序数据处理的方法。
本发明实施例还提供了一种处理器。该处理器用于运行程序,其中,程序运行时执行本发明实施例的时序数据处理方法。
本发明实施例还提供了一种电子设备,包括:处理器;存储器,与处理器相连接,用于为处理器提供处理以下处理步骤的指令:响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;将从消息队列中读取到的分片结果写入至内存。
在本发明实施例中,通过使用消息队列将日志和数据存储分开,实现了日志存储和数据存储松耦合,这样可以有效降低了存储节点的数据复制(高可用)、水平扩展实现的复杂度等,从而达到了提高数据存储的效率的技术效果,进而解决了数据存储的效率低的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种用于实现时序数据处理方法的计算机终端(或移动设备)的硬件结构框图;
图2是根据本发明实施例的一种时序数据处理方法的流程图;
图3是现有技术中的一种LSM-Tree引擎的示意图;
图4是现有技术中的一种分布式集群架构的示意图;
图5是现有技术中的一种TDengine分布式架构的逻辑结构的示意图;
图6是现有技术中的一种Master Vnode的写入流程的示意图;
图7是现有技术中的一种slave vnode的写入流程的示意图;
图8是根据本发明实施例的一种基于消息队列的松耦合的时序数据存储的整体架构的示意图;
图9是根据本发明实施例的一种时间分片的流程的示意图;
图10是根据本发明实施例的一种存储映射的示意图;
图11是根据本发明实施例的一种创建数据库的流程的示意图;
图12是根据本发明实施例的一种扩容一个存储节点时集群前后变化的示意图;
图13是根据本发明实施例的一种分片数据复制的示意图;
图14是根据本发明实施例的一种数据库数据复制的示意图;
图15是根据本发明实施例的一种集群数据复制的示意图;
图16是根据本发明实施例的一种数据订阅的示意图;
图17是根据本发明实施例的一种时序数据处理装置的示意图;
图18是根据本发明实施例的一种时序数据处理***的示意图;
图19是根据本发明实施例的一种计算机终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
时序数据库,用于提供一系列特有的数据访问操作,包括聚合(Aggregation)、降采样(Downsample)、插值(Interpolation)等,同时还提供数据生命周期(数据时效)的管理机制;
聚合(Aggregation),对同一时间线、或不同时间线上的数据点进行分组、求和、计数等计算操作;
降采样(Downsample),查询时间区间跨度较长,且原始数据采样频率较高时,可通过降采样降低数据的查询展现精度,比如按秒采集的数据,查询时按小时级别采样,减少结果集的数据点数;
插值(Interpolation),时间线中间缺失部分数据点时,可通过插值算法进行数据点自动填充;
数据时效(TTL),数据时效是指数据保存有效期,超过有效期的数据会被自动清理,默认数据有效期为永久保存;
度量(Metric),为类似关系型数据库里的表(Table),代表一系列同类时序数据的集合,例如为空气质量传感器建立一个Table,存储所有传感器的监测数据;
标签(Tag),用于描述数据源的特征,通常不随时间变化,例如传感器设备,包含设备标识(DeviceID)、设备所在的区域(Region)等Tag信息,数据库内部会自动为Tag建立索引,支持根据Tag来进行多维检索查询,Tag由标签键(Tag Key)、标签值(Tag Value)组成,两者均为字符串(String)类型;
时间戳(Timestamp),代表数据产生的时间点,可以写入时指定,也可由***自动生成;
量测值(Field),用于描述数据源的量测指标,通常随着时间不断变化,比如,传感器设备包含温度(Temperature)、湿度(Humidity)等Field,Field列无需提前创建固定的图式(Schema),可以在运行过程中动态增减,Field由字段键(Field Key)、字段值(FieldValue)组成,Field Key为String类型,Field Value支持布尔型(Boolean)、整数(Int)、双精度浮点(Double)、String、字节(Byte)等类型;
数据点(Data Point),数据源在某个时间产生的某个量测指标值(Field Value)称为一个数据点,数据库查询、写入时按数据点数来作为统计指标;
时间线(Time Series),数据源的某一个指标随时间变化,形成时间线,Metric+Tags+Field组合确定一条时间线,针对时序数据的计算包括降采样、聚合(sum、count、max、min等)、插值等都基于时间线维度进行;数据库在存储数据时,会将同一条时间线的数据尽量聚类存储,提升时间线数据访问效率,同时更好的支持时序数据压缩。
实施例1
根据本发明实施例,还提供了一种时序数据处理的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现时序数据处理方法的计算机终端(或移动设备)的硬件结构框图。如图1所示,计算机终端10(或移动设备10)可以包括一个或多个(图中采用102a、102b,……,102n来示出)处理器(处理器可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为BUS总线的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端10(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的时序数据处理方法对应的程序指令/数据存储装置,处理器通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的时序数据处理方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10(或移动设备)的用户界面进行交互。
在上述运行环境下,本申请提供了如图2所示的一种数据处理的方法。
图2是根据本发明实施例的一种时序数据处理方法的流程图。如图2所示,该时序数据处理方法可以包括以下步骤:
步骤S202,响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中。
在本发明上述步骤S202提供的技术方案中,时序数据可以是用户新写入的数据,可以提供一系列特有的数据访问操作,包括聚合(Aggregation)、降采样(Downsample)、插值(Interpolation)等,同时还提供数据生命周期(数据时效)的管理机制,时序数据写入特点是写入量较大。
在该实施例中,数据源可以是物联网、应用监测、工业互联网等典型的时序场景的数据源,时序数据可以由数据源按照时间周期产生,并存储在时序数据库中,比如,数据源(Data Source)通常按一定的周期持续产生时序数据,一条时序数据由度量(Metric)、标签(Tags)、时间戳(Timestamp)、量测值(Fields)等元素共同来描述。
在该实施例中,可以响应客户端请求,从时序数据库中获取待处理的时序数据,比如,客户端发起请求,产生表示该请求的信号,响应该信号,从时序数据库中获取待处理的时序数据。
在该实施例中,可以通过数据代理(TSProxy)来接收客户端的请求。
步骤S204,在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件。
在本发明上述步骤S704提供的技术方案中,可以在消息队列中存储时序数据对应的分片结果,比如,数据代理根据分片策略进行分片,并将分片后的结果写入消息队列(Message Queue)中。
在该实施例中,在消息队列中存储时序数据对应的分片结果之前,可以根据数据分片策略进行数据分片。
举例而言,消息队列作为日志***,存储用户写入的数据,保证数据的持久性,需要说明的是,这里的消息队列指的是支持“发布-订阅"模型的分布式消息***,比如,Kafka、RocketMQ、Pulsar等分布式消息***,支持“发布-订阅”模型的分布式消息***,一般支持创建主题(Topic),并且主题下面可以创建多个分区(Partition)。
需要说明的是,上述保证数据的持久性,指的是消息队列组件内部会保证数据的持久性,这个是消息队列的基本功能,比如,kafka、RocketMQ、Pulsar等都会将接收到的消息写入到磁盘中。
步骤S206,将从消息队列中读取到的分片结果写入至内存。
在本发明上述步骤S206提供的技术方案中,可以将从消息队列中读取到的分片结果写入至内存,比如,先从消息队列拉取消息,并写入至内存中,待内存中数据到达一定阈值后,将内存中的数据刷盘至文件中,并向消息队列提交已经刷盘的数据的最大消息偏移(offset)。
需要说明的是,上述消息指的是时序数据点,该时序数据点包括metric、tags、timestamp,fields等内容;上述最大消息漂移可以是当客户端向消息队列提交一条消息后,消息队列会返回一个消息的偏移(offset)给客户端,客户端可以根据这个offset向消息队列组件精确对这个消息进行操作,比如读取、删除等,另外,offset可以是单调递增的,因此,可以求出最大的offset,当客户端消费一条消息后,需要向消息队列提交一个已经消费的消息的offset,消息队列会将小于这个offset的消息标记为已经消费了,下次消费时就不会在重复消费这条消息了。
通过本申请上述步骤S202至步骤S206,响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;将从消息队列中读取到的分片结果写入至内存,也就是说,在本申请中,使用消息队列将日志和数据存储分开,实现了日志存储和数据存储松耦合,这样可以有效降低了存储节点的数据复制(高可用)、水平扩展实现的复杂度等,解决了数据存储的效率低的技术问题,达到了提高数据存储的效率的技术效果。
下面对该实施例的上述方法进行进一步地介绍。
作为一种可选的实施方式,该方法还包括:对时序数据进行分片处理,得到分片结果。
在该实施例中,可以对时序数据进行分片处理,得到分片结果,比如,可以根据数据分片策略进行数据分片,比如,对于云原生数据库服务数据代理库(Lindorm TSDB)而言,整体上是哈希(hash)分片,分片策略可以包括:度量哈希分片(hash by metric),标签哈希分片(hash by tags),度量和标签哈希分片(hash by metric+tags)等。
在该实施例中,对时序数据进行分片处理可以是先采用时间分片,然后再进行哈希分片,其中,时间分片可以通过执行以下步骤来实现:确定时序数据的时间戳所匹配到的第一分片信息,其中,第一分片信息用于表征第一时段与第一分片信息中的分片之间的映射关系,第一时段包括时序数据的时间戳;基于第一分片信息对时序数据进行分片处理,得到分片结果,哈希分片可以通过执行以下步骤来实现:基于第一分片信息中的分片的数量和时序数据对应的键,确定时序数据对应的目标分片,得到分片结果。
作为一种可选的实施方式,对时序数据进行分片处理,得到分片结果,包括:确定时序数据的时间戳所匹配到的第一分片信息,其中,第一分片信息用于表征第一时段与第一分片信息中的分片之间的映射关系,第一时段包括时序数据的时间戳;基于第一分片信息对时序数据进行分片处理,得到分片结果。
在该实施例中,时间戳可以是用户新写入的数据时间戳,第一分片信息可以是与不同时间段对应的路由表。
在该实施例中,时序数据相对于其他类型的数据记录而言,每条数据都会带有一个时间戳,这个时间戳可以随时间而增长。
在该实施例中,时间分片可以是确定时序数据的时间戳所匹配到的与不同时间段对应的路由表,进而基于该路由表对时序数据进行分片处理,得到分片结果。
举例而言,假设集群初始时有3个分片,***初始化时,则创建一个路由表:(0-max)={P1,P2,P3};当增加一个节点时,则增加一个分片P4,同时创建一个新的路由表:(t1-max)={P1,P2,P3,P4},同时将原来的路由表修改为(0-t1)={P1,P2,P3},其中,t1是***进行扩容时的时间戳,这样***扩容后就有两个路由表(0-t1)和(t1,max),假设这时用户新写入的数据时间戳为timestamp,当0≤timestamp<t1时,则使用(0-t1)这个路由表来写入数据,否则使用(t1,max)这个路由表来写入数据,当***需要继续扩容一个节点时,且扩容时的时间戳为t2,则***的路由表***为3个,如下:
(0-t1)=P1,P2,P3,(t1,t2)=P1,P2,P3,P4,(t2,max)=P1,P2,P3,P4,P5
需要说明的是,因为时序数据写入的记录的时间戳通常是随时间增长的,使用时间分片的好处在于,当***扩容时,不需要进行数据的迁移,继续保留在原先的节点上即可。
作为一种可选的实施方式,基于第一分片信息对时序数据进行分片处理,得到分片结果,包括:基于第一分片信息中的分片的数量和时序数据对应的键,确定时序数据对应的目标分片,得到分片结果。
在该实施例中,时序数据对应的键可以是数据点的键。
在该实施例中,可以是基于第一分片信息中的分片的数量和时序数据对应的键,确定时序数据对应的目标分片,得到分片结果,比如,哈希分片,在写入数据时,根据数据的时间戳先查找到对应的路由表后,然后使用计算数据点的键(key)的哈希值(hashCode),最后完成确定数据所处的分片。
作为一种可选的实施方式,基于第一分片信息对时序数据进行分片处理,得到分片结果,该方法还包括:基于新增分片、新增分片对应的时间戳和第一分片信息生成第二分片信息,其中,第二分片信息用于表征第二时段与由第一分片信息中的分片和新增分片得到的分片集之间的映射关系,第二时段与新增分片对应的时间戳相关联。
在该实施例中,新增分片可以是扩容节点时增加的分片,新增分片对应的时间戳可以是扩容时的时间戳。
在该实施例中,可以基于扩容节点时增加的分片、扩容时的时间戳和与不同时间段对应的路由表生成第二分片信息。
举例而言,假设集群初始时有3个分片,***初始化时,则创建一个路由表:(0-max)={P1,P2,P3};当增加一个节点时,则增加一个分片P4,同时创建一个新的路由表:(t1-max)={P1,P2,P3,P4},同时将原来的路由表修改为(0-t1)={P1,P2,P3},其中,t1是***进行扩容时的时间戳。
作为一种可选的实施方式,确定时序数据的时间戳所匹配到的第一分片信息,该方法包括:基于存储节点的数量确定第一分片信息;其中,将从消息队列中读取到的时序数据写入至内存,包括:基于存储节点将从消息队列中读取到的时序数据写入至内存。
在该实施例中,可以基于存储节点的数量确定第一分片信息,比如,根据用户参数和存储节点数创建路由表,其中,对于云原生数据库服务数据代理库(Lindorm TSDB)而言,用户参数可以包括数据库名,数据保留周期,分片策略,预降精度规则等。
在该实施例中,可以基于存储节点将从消息队列中读取到的时序数据写入至内存,比如,根据节点数创建一个大小为节点数的数组(routeTable),数组的内容为节点的网络互联协议(Internet Protocol,简称为IP)地址,从而将读取到的时序数据写入至内存。
作为一种可选的实施方式,基于存储节点将从消息队列中读取到的时序数据写入至内存,该方法包括:基于第一分片信息在消息队列中至少创建第一分片;在存储节点上创建和消息队列中第一分片的数量相同的第二分片,其中,第二分片和第一分片一一对应。
在该实施例中,可以基于第一分片信息在消息队列中至少创建第一分片,比如,根据路由表在消息队列中创建主题和分片。
在该实施例中,可以在存储节点上创建和消息队列中第一分片的数量相同的第二分片,比如,在数据代理节点创建消息队列的生产者,在数据存储节点上创建和消息队列中相同分片数的分片,并创建消费者消费对应的消息队列的分片数据。
需要说明的是,在本申请中,数据代理节点(TSProxy)是消息队列的消息的生产者,即写消息,数据存储节点(TSCore)是消息队列的消费者,即读消息。
在该实施例中,第二分片和第一分片一一对应,比如,存储节点的分片和消息队列中的主题下的分片一一映射。
作为一种可选的实施方式,该方法还包括:向消息队列中增加与新增存储节点的数量对应的第三分片;基于第三分片的数量、新增存储节点对应的时间戳和消息队列中的第一分片的数量确定第三分片信息,其中,第三分片信息用于表征第三时段与由第一分片和第三分片得到的分片集之间的映射关系,第三时段与新增存储节点对应的时间戳相关联。
在该实施例中,可以向消息队列中增加与新增存储节点的数量对应的第三分片,比如,根据扩容条件扩容对应的存储节点,在消息队列中对应的主题下新增和存储节点对应的主题分片数。
需要说明的是,上述扩容条件是指要扩容的节点数,比如,原来的存储节点数为3,扩容条件是新增2个存储节点,整体上就变成5个存储节点。
在该实施例中,第三分片可以是新增和存储节点对应的主题分片。
在该实施例中,可以基于第三分片的数量、新增存储节点对应的时间戳和消息队列中的第一分片的数量确定第三分片信息,比如,根据消息队列中的分片数变化和扩容时的时间戳,创建一个新的路由表,并修改原来的路由表。
举例而言,在扩容一个存储节点时,需要在增加了一个存储节点时,需要在消息队列的主题下新增两个分片,扩容后,原先的消息队列中的分片和存储节点中的分片的映射关系没有发生变化,因此扩容时,无需进行数据的迁移和再平衡,同时也不会影响原先的数据写入和查询过程。
作为一种可选的实施方式,步骤S206,将从消息队列中读取到的分片结果写入至内存,该方法包括:分别在多个存储节点中,从消息队列中读取到分片结果,且将读取到的分片结果写入至内存;或者分别在多个存储节点中,从消息队列中读取相同主题下的多个分片结果,且将读取到的多个分片结果写入至内存。
在该实施例中,在分布式集群中,每个存储节点一般只负责存储整个集群中的部分数据,当出现部分节点宕机等情况时,会导致***中的部分数据无法访问和读取,因此为了保证数据的高可用,通常会将数据通过网络复制到其他节点上,对同一份数据形成多个副本。
在该实施例中,可以分别在多个存储节点中,从消息队列中读取到分片结果,且将读取到的分片结果写入至内存,比如,分片数据复制:对于数据的某个分片通过在多个存储节点上消费同一个消息队列中的分片,从而对同一份数据分片在存储节点上形成多个副本,通过在多个存储节点上消费同一个消息队列中的分片,保证数据的高可用。
在该实施例中,可以分别在多个存储节点中,从消息队列中读取相同主题下的多个分片结果,且将读取到的多个分片结果写入至内存,比如,数据库数据复制:将整个数据库(Date Basic,简称为DB)的数据进行复制,在集群中生成多个副本,也即,消息队列中主题下的所有分片都由多个消费者进行消费。
作为一种可选的实施方式,步骤S202,获取待处理的时序数据,该方法包括:如果第一集群中的数据代理节点处于正常工作状态,则基于第一集群中的数据代理节点获取待处理的时序数据;如果第一集群中的数据代理节点处于异常工作状态,则基于第二集群中的数据代理节点获取待处理的时序数据。
在该实施例中,第一集群可以是主集群(cluster1),异常状态可以是主集群(cluster1)的数据代理点处于宕机等不可用的状态,第二集群可以是与主集群不同的集群(cluster2)。
举例而言,集群数据复制是指将数据复制到多个不同的集群中,形成主备集群,进一步提高数据的可用性,如图15,其中,图15是根据本发明实施例的一种集群数据复制的示意图,初始时cluster1为主集群,由cluster1中的数据代理(TSProxy)负责向消息队列写数据,cluster1和cluster2中的数据存储节点(TSCore)都从消息队列中消费数据,当cluster1出现宕机等不可用情况时,则由clutser2的数据代理(TSProxy)负责向消息队列中写数据。
作为一种可选的实施方式,该方法还包括:基于数据订阅消息确定目标组件,其中,数据订阅消息用于表征待进行数据订阅的任务;将从所述消息队列中读取到的时序数据写入至目标组件中。
在该实施例中,可以基于数据订阅消息确定目标组件,将从所述消息队列中读取到的时序数据写入至目标组件中,比如,采用消息队列作为日志***,而消息队列天然支持“发布-订阅”模型,因此对于有数据订阅的需求的任务,比如,流计算、异常检测等任务,可以直接通过增加消息队列的消费者的方式实现数据订阅。
在该实施例中,数据订阅本质上是新增消息队列的消费者重消息队列中读消息,比如,原先只有TSCore在消费数据,那么可以增加一个或者多个消费者,将消息队列中的数据读取到其他组件中,比如,分布式流数据流引擎(Apache Flink)等组件。
在该实施例中,数据订阅的任务可以是流计算、异常检测等任务。
在本发明实施例中,通过对时序数据进行分片处理,得到分片结果;分别在多个存储节点中,从消息队列中读取到分片结果,且将读取到的分片结果写入至内存;分别在多个存储节点中,从消息队列中读取相同主题下的多个分片结果,且将读取到的多个分片结果写入至内存;如果第一集群中的数据代理节点处于正常工作状态,则基于第一集群中的数据代理节点获取待处理的时序数据;如果第一集群中的数据代理节点处于异常工作状态,则基于第二集群中的数据代理节点获取待处理的时序数据;基于数据订阅消息确定目标组件,其中,数据订阅消息用于表征待进行数据订阅的任务;将从所述消息队列中读取到的时序数据写入至目标组件中,解决了数据存储的效率低的技术问题,达到了提高数据存储的效率的技术效果。
实施例2
下面对该实施例的上述方法的优选实施方式进行进一步介绍。
在现有技术中,物联网、应用监测、工业互联网等典型的时序场景下,数据源(DataSource,表示数据由谁产生的)通常按一定的周期持续产生时序数据,一条时序数据由度量(Metric)、标签(Tags)、时间戳(Timestamp)、量测值(Fields)等元素共同来描述,时序数据写入特点是持续高并发高吞吐写入,且写多读少,非常适合使用对数结构的合并树(Log-Structured Merged-Tree,简称为LSM-Tree)结构来写入数据,LSM-Tree是一种分层、有序、面向磁盘的数据结构,其充分利用了磁盘批量的顺序写要远比随机写性能高出很多的特点。
图3是现有技术中的一种LSM-Tree引擎的示意图。如图3所示,该LSM-Tree引擎包括预写日志(Write Ahead Log,简称为WAL)、内存(Memtable)、文件(File)、合并(Compaction)等四个部分。其中,日志WAL是LSM-Tree引擎写入数据的非常重要的一环,起着数据持久性和数据更新原子性等作用,而且日志的写入吞吐在很大程度上决定了LSM-Tree的写入吞吐。
通常为了保证***的高可用和可扩展性,我们会构建一个分布式集群,在集群中每个机器节点存储数据的分片和副本。
图4是现有技术中的一种分布式集群架构的示意图。如图4所示,一共4个节点,数据分片为4个,分别为P1,P2,P3,P4,其中每个分片的副本数为3个,因此每个节点实际存储了3个分片的数据。其中,对每个节点来说,都是一个LSM-Tree引擎,每个节点都有独立的本地WAL日志。数据的副本可通过管理日志算法(Raft)等分布式一致性协议复制WAL的方式实现。
然而,基于这种分布式架构实现,存在以下问题:
首先,数据订阅难,具体表现为:日志WAL分布在多个节点上,没有一个统一的日志存储,导致基于日志WAL的数据订阅或者复制的实现难度和运维成本较高;
其次,数据紧耦合,具体表现为:日志WAL跟数据耦合在同一个节点上,当提高数据的副本数时,会导致日志的副本数也会提高,从而导致存储成本变高的问题;
最后,数据重分布,具体表现为:在***进行扩缩容时,因数据存储节点的变化会造成数据分片方式的变化,因此通常会导致在数据在节点之间进行迁移。
图5是现有技术中的一种TDengine分布式架构的逻辑结构的示意图。如图5所示,一个完整的时序空间大数据引擎(TDengine)***是运行在一到多个物理节点上的,逻辑上,它包含数据节点(dnode)、TDengine应用驱动(taosc)以及应用(Application,简称为APP)。***中存在一到多个数据节点,这些数据节点组成一个集群(cluster)。应用通过taosc的应用程序接口(API)与TDengine集群进行互动。
图6是现有技术中的一种Master Vnode的写入流程的示意图。如图6所示,该流程包括如下步骤:
步骤S61,虚拟节点管理器(Master vnode)收到应用的数据***请求,如果验证成功,则进入下一步;
步骤S62,如果***配置参数(walLevel)大于0,虚拟节点(vnode)将把该请求的原始数据包写入数据库日志文件(WAL)。如果walLevel设置为2,而且网络文件同步(fsync)设置为0,TDengine还将WAL数据立即落盘,以保证即使宕机,也能从数据库日志文件中恢复数据,避免数据的丢失;
步骤S63,如果有多个副本,vnode将把数据包转发给同一虚拟节点组内从属节点(slave vnodes),该转发包带有数据的版本号(version);
步骤S64,写入内存,并将记录加入到skip list;
步骤S65,Master vnode返回确认信息给应用,表示写入成功;
需要说明的是,如果步骤二、三、四中任何一步失败,将直接返回错误给应用。
图7是现有技术中的一种slave vnode的写入流程的示意图。如图7所示,该流程包括如下步骤:
步骤S71,Slave vnode收到Master vnode转发了的数据***请求;
步骤S72,如果***配置参数(walLevel)大于0,vnode将把该请求的原始数据包写入数据库日志文件WAL,如果walLevel设置为2,而且fsync设置为0,TDengine还将WAL数据立即落盘,以保证即使宕机,也能从数据库日志文件中恢复数据,避免数据的丢失;
步骤S73,写入内存,更新内存中的跳转表(skip list)。
在TDEngine的架构,日志和数据耦合在一起,基于这种分布式架构实现,存在以下问题:
(1)数据订阅难:日志WAL分布在多个节点上,没有一个统一的日志存储,导致基于日志WAL的数据订阅或者复制的实现难度和运维成本较高;
(2)数据紧耦合:日志WAL跟数据耦合在同一个节点上,当需要节点进行水平扩容或者提高数据的副本数时,会导致日志的副本数也会提高,从而导致存储成本变高的问题;
(3)数据重分布:在***进行扩缩容时,因数据存储节点的变化会造成数据分片方式的变化,因此通常会导致在数据在节点之前进行迁移。
针对上述现有技术中的问题,本申请提出了一种基于消息队列的时序数据松耦合存储方案。
本申请提出了一种基于消息队列的松耦合的时序数据存储方案,主要包含整体架构、数据分片、数据复制、数据订阅等四个部分。本申请基于日志即数据,使用消息队列作为日志***,可以友好支持数据订阅等功能,同时有效解决了时序数据存储的高可用、弹性伸缩等问题。
下面对该实施例的整体架构的进行介绍:
图8是根据本发明实施例的一种基于消息队列的松耦合的时序数据存储的整体架构的示意图。如图8所示,该架构包括数据代理(TSProxy)组件、消息队列(Message Queue)组件、数据存储(TSCore)组件。
数据代理(TSProxy)组件,负责接收客户端的请求,并根据数据分片策略进行数据分片,并将分片后的结果写入消息队列Message Queue中;
消息队列(Message Queue)组件,作为日志***,存储用户写入的数据,保证数据的持久性,需要注意的是,这里的消息队列指的是支持“发布-订阅"模型的分布式消息***,比如Kafka、RocketMQ、Pulsar等分布式消息***,支持“发布-订阅”模型的分布式消息***,一般支持创建主题(Topic),并且主题下面可以创建多个分区(Partition),比如,图8中的主题Topic1下面包含P1,P2,P3,P4等四个分区。
数据存储(TSCore)组件,负责数据的存储,先从消息队列拉取消息,并写入至内存中,待内存中数据到达一定阈值后,将内存中的数据刷盘至文件中,并向消息队列提交已经刷盘的数据的最大消息偏移(offset)。
其中,数据代理(TSProxy)和消息队列(Message Queue)以及数据存储(TSCore)之间通过网络连接,彼此独立,因此可以各自进行水平扩展。
下面对该实施例的数据分片进行介绍。
通常数据库***会支持创建和使用多个库(Database),本文的方案也不例外。因此本文的方案提到的数据分片是针对单个DB进行分片的,多个DB可以采用相同的或者不同的分片策略,即不同的DB可以生成不同的路由表,其中,本申请中的数据分片可以是先采用时间分片,然后再进行哈希分片。
下面对该实施例的时间分片进行介绍。
时序数据相对于其他类型的数据记录而言,每条数据都会带有一个时间戳,而且一般而言,这个时间戳随时间而增长。
图9是根据本发明实施例的一种时间分片的流程的示意图。如图9所示,假设集群初始时有三个分片,***初始化时,则创建一个路由表:(0-max)={P1,P2,P3};当增加一个节点时,则增加一个分片P4,同时创建一个新的路由表:(t1-max)={P1,P2,P3,P4},同时将原来的路由表修改为(0-t1)={P1,P2,P3},其中,t1是***进行扩容时的时间戳。
这样***扩容后就有两个路由表(0-t1)和(t1,max),假设这时用户新写入的数据时间戳为timestamp,当0≤timestamp<t1时,则使用(0-t1)这个路由表来写入数据,否则使用(t1,max)这个路由表来写入数据。
当***需要继续扩容一个节点时,且扩容时的时间戳为t2,则***的路由表***为3个,如下:
(0-t1)=P1,P2,P3,(t1,t2)=P1,P2,P3,P4,(t2,max)=P1,P2,P3,P4,P5
因为时序数据写入的记录的时间戳通常是随时间增长的,使用时间分片的好处在于,当***扩容时,不需要进行数据的迁移,继续保留在原先的节点上即可。
下面对该实施例的哈希分片进行介绍。
写入数据时,根据数据的时间戳先查找到对应的路由表后,然后使用计算数据点的键(key)的哈希值(hashCode),最后即可完成使用如下公式确定数据所处的分片:
partitionIdx=hasj(key)%numPartitions
其中,hash是哈希函数,如murmur哈希函数,key是数据点的键,numPatititions是根据写入数据点时间戳匹配的路由表的分片数,比如,如下路由表分片数为3:
(0-t1)={P1,P2,P3}
下面对该实施例的存储映射进行介绍。
存储映射,是指路由表中的分片映射到消息队列中的主题(Topic)和分片(Partition),以及存储节点(TSCore)映射到消费消息队列中的主题和分片。
图10是根据本发明实施例的一种存储映射的示意图。如图10所示,数据库DB一一映射到消息队列的主题(Topic),数据库的分片(Partition)一一映射到消息队列的分片(Partition);存储节点(TSCore)的分片(bucket)一一映射到消息队列的分片(Partition),在如图10的示例中,共计有两个DB,每个DB有四个分片,这四个分片分别映射到一个消息***中的四个分片上,同时消息***的四个分片,一一和存储节点上分片绑定。
图11是根据本发明实施例的一种创建数据库的流程的示意图。如图11所示,该流程可以包括如下步骤:
步骤S1101,根据用户参数和存储节点数创建路由表;
步骤S1102,根据路由表在消息队列中创建主题和分片;
步骤S1103,在数据代理节点创建消息队列的生产者;
步骤S1104,在数据存储节点上创建和消息队列中相同分片数的分片,并创建消费者消费对应的消息队列的分片数据。
在本申请中,通过以下步骤来实现节点扩容:
步骤一,根据扩容条件扩容对应的存储节点;
步骤二,在消息队列中对应的主题下新增和存储节点对应的主题分片数;
步骤三,根据消息队列中的分片数变化和扩容时的时间戳,创建一个新的路由表,并修改原来的路由表。
图12是根据本发明实施例的一种扩容一个存储节点时集群前后变化的示意图。如图12所示,其中每个存储节点两个分片,因此在扩容一个存储节点时,需要在增加了一个存储节点时,需要在消息队列的主题下新增两个分片。同时注意到,扩容后,原先的消息队列中的分片(P1~P4)和存储节点中的分片的映射关系没有发生变化,因此扩容时,无需进行数据的迁移和再平衡,同时也不会影响原先的数据写入和查询过程。
下面对该实施例的数据复制进行介绍。
在分布式集群中,每个存储节点一般只负责存储整个集群中的部分数据,当出现部分节点宕机等情况时,会导致***中的部分数据无法访问和读取,因此为了保证数据的高可用,通常会将数据通过网络复制到其他节点上,对同一份数据形成多个副本。
采用消息队列作为日志***,一般而言消息队列本身就具备多副本机制可保证数据的高可用,因此这里的数据复制是存储节点(TSCore)的副本生成。
在本申请中,将存储节点的分片和消息队列中的主题下的分片一一映射,消息消费时可直接消费指定的消费队列的单个分片,且将DB映射到消息队列的主题,同时消息队列天然支持多个消费者同时各自独立消费同一份数据,因此,可以实现分片数据复制、数据库数据复制以及集群数据复制等三个粒度的数据复制。
下面对该实施例的分片数据复制进行介绍。
分片数据复制,是指对于数据的某个分片通过在多个存储节点上消费同一个消息队列中的分片,从而对同一份数据分片在存储节点上形成多个副本。
图13是根据本发明实施例的一种分片数据复制的示意图。如图13所示,消息队列中分片P2的数据被三个存储节点同时消费,从而对同一份数据生成三个副本。
下面对该实施例的数据库数据复制进行介绍。
图14是根据本发明实施例的一种数据库数据复制的示意图。如图14所示,数据库的数据复制是指将整个DB的数据进行复制,在集群中生成多个副本,在本申请中,消息队列中主题下的所有分片都有多个消费者进行消费。
下面对该实施例的集群数据复制进行介绍。
集群数据复制,是指将数据复制到多个不同的集群中,形成主备集群,进一步提高数据的可用性。
图15是根据本发明实施例的一种集群数据复制的示意图。如图15所示,初始时cluster1为主集群,由cluster1中的数据代理(TSProxy)负责向消息队列写数据,cluster1和cluster2中的数据存储节点(TSCore)都从消息队列中消费数据,当cluster1出现宕机等不可用情况时,则由clutser2的数据代理(TSProxy)负责向消息队列中写数据。
下面对该实施例的数据订阅进行介绍。
图16是根据本发明实施例的一种数据订阅的示意图。如图16所示,采用消息队列作为日志***,而消息队列天然支持“发布-订阅”模型,因此,对于有数据订阅的需求的任务,比如流计算、异常检测等任务,可以直接通过增加消息队列的消费者的方式实现数据订阅。
在本发明的上述实施例中,使用分布式消息队列作为日志存储,提供了一个统一的数据订阅接口,基于消息队列的“发布-订阅”模型可友好支持数据订阅需求,使用消息队列将日志和数据存储分开,使用时间分片和哈希分片两层分片的方式,实现了可友好支持数据订阅需求,消息队列和数据存储节点可以各自独立水平扩展,而不会相互影响,日志和数据存储的松耦合,解决在集群扩容后无需进行数据迁移等重分布操作的目的,进而解决了数据存储的效率低的技术问题,达到了提高数据存储的效率的技术效果。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例3
根据本发明实施例,还提供了一种用于实施上述图2所示的时序数据处理方法的时序数据处理装置。
图17是根据本发明实施例的一种时序数据处理装置的示意图。如图17所示,该时序数据处理装置170可以包括:响应单元1701、存储单元1702和写入单元1703。
响应单元1701,用于响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;
存储单元1702,用于在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;
写入单元1703,用于将从消息队列中读取到的分片结果写入至内存。
可选地,该***还包括:分片单元,其中,分片单元可以包括:确定模块和分片模块。其中,分片单元,用于对时序数据进行分片处理,得到分片结果;确定模块,用于确定时序数据的时间戳所匹配到的第一分片信息,其中,第一分片信息用于表征第一时段与第一分片信息中的分片之间的映射关系,第一时段包括时序数据的时间戳;分片模块,用于基于第一分片信息对时序数据进行分片处理,得到分片结果。
其中,分片模块通过以下步骤来实现基于第一分片信息对时序数据进行分片处理,得到分片结果:基于第一分片信息中的分片的数量和时序数据对应的键,确定时序数据对应的目标分片,得到分片结果。
其中,该装置还用于执行以下步骤:基于新增分片、新增分片对应的时间戳和第一分片信息生成第二分片信息,其中,第二分片信息用于表征第二时段与由第一分片信息中的分片和新增分片得到的分片集之间的映射关系,第二时段与新增分片对应的时间戳相关联。
其中,该装置还用于执行以下步骤:基于存储节点的数量确定第一分片信息;其中,将从消息队列中读取到的时序数据写入至内存,包括:基于存储节点将从消息队列中读取到的时序数据写入至内存。
其中,该装置还用于执行以下步骤:基于第一分片信息在消息队列中至少创建第一分片;在存储节点上创建和消息队列中第一分片的数量相同的第二分片,其中,第二分片和第一分片一一对应。
其中,该装置还用于执行以下步骤:向消息队列中增加与新增存储节点的数量对应的第三分片;基于第三分片的数量、新增存储节点对应的时间戳和消息队列中的第一分片的数量确定第三分片信息,其中,第三分片信息用于表征第三时段与由第一分片和第三分片得到的分片集之间的映射关系,第三时段与新增存储节点对应的时间戳相关联。
可选地,写入单元1703包括:第一写入模块和第二写入模块。其中,第一写入模块,用于分别在多个存储节点中,从消息队列中读取到分片结果,且将读取到的分片结果写入至内存;第二写入模块,用于分别在多个存储节点中,从消息队列中读取相同主题下的多个分片结果,且将读取到的多个分片结果写入至内存。
可选地,响应单元1701包括:获取模块。其中,获取模块,用于通过执行以下步骤来获取待处理的时序数据:如果第一集群中的数据代理节点处于正常工作状态,则基于第一集群中的数据代理节点获取待处理的时序数据;如果第一集群中的数据代理节点处于异常工作状态,则基于第二集群中的数据代理节点获取待处理的时序数据。
可选地,该装置还包括:确定单元和第三写入模块。其中,确定单元,用于基于数据订阅消息确定目标组件,其中,数据订阅消息用于表征待进行数据订阅的任务;第三写入单元,用于将从所述消息队列中读取到的时序数据写入至目标组件中。
在本发明实施例中,通过响应单元1701,用于响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;存储单元1702,用于在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;写入单元1703,用于将从消息队列中读取到的分片结果写入至内存,从而达到了提高数据存储的效率的目的,进而解决了数据存储的效率低的技术问题,达到了提高数据存储的效率的技术效果。
此处需要说明的是,上述响应单元1701、存储单元1702和写入单元1703对应于实施例1中的步骤S202至步骤S206,三个单元与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
实施例4
根据本发明实施例,还提供了一种用于实施上述图2所示的时序数据处理方法的时序数据处理***。
图18是根据本发明实施例的一种时序数据处理***的示意图。如图18所示,该时序数据处理***180可以包括:数据代理组件1801、消息队列组件1802和数据存储组件1803。
数据代理组件1801,用于响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;
消息队列组件1802,用于在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;
数据存储组件1803,用于将从消息队列中读取到的分片结果写入至内存。
在本发明实施例中,通过数据代理组件1801,响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;消息队列组件1802,在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;数据存储组件1803,将从消息队列中读取到的分片结果写入至内存,从而达到了提高数据存储的效率的目的,进而解决了数据存储的效率低的技术问题,达到了提高数据存储的效率的技术效果。
此处需要说明的是,上述数据代理组件1801、消息队列组件1802和数据存储组件1803对应于实施例1中的步骤S202至步骤S206,三个组件与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
实施例5
本发明的实施例可以提供一种电子设备,该电子设备可以包括:处理器;存储器,与处理器相连接,用于为处理器提供处理以下处理步骤的指令:响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;将从消息队列中读取到的分片结果写入至内存。
可选地,该实施例的电子设备可以包括计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行本发明实施例的时序数据处理方法中以下步骤的程序代码:响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;将从消息队列中读取到的分片结果写入至内存。
可选地,图19是根据本发明实施例的一种计算机终端的结构框图。如图19所示,该计算机终端A可以包括:一个或多个(图中仅示出一个)处理器1902、存储器1904、以及传输装置1906。
其中,存储器可用于存储软件程序以及模块,如本发明实施例中的时序数据处理方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的时序数据处理方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;将从消息队列中读取到的分片结果写入至内存。
可选的,上述处理器还可以执行如下步骤的程序代码:对时序数据进行分片处理,得到分片结果。
可选的,上述处理器还可以执行如下步骤的程序代码:确定时序数据的时间戳所匹配到的第一分片信息,其中,第一分片信息用于表征第一时段与第一分片信息中的分片之间的映射关系,第一时段包括时序数据的时间戳;基于第一分片信息对时序数据进行分片处理,得到分片结果。
可选的,上述处理器还可以执行如下步骤的程序代码:基于第一分片信息中的分片的数量和时序数据对应的键,确定时序数据对应的目标分片,得到分片结果。
可选的,上述处理器还可以执行如下步骤的程序代码:基于新增分片、新增分片对应的时间戳和第一分片信息生成第二分片信息,其中,第二分片信息用于表征第二时段与由第一分片信息中的分片和新增分片得到的分片集之间的映射关系,第二时段与新增分片对应的时间戳相关联。
可选的,上述处理器还可以执行如下步骤的程序代码:基于存储节点的数量确定第一分片信息;其中,将从消息队列中读取到的时序数据写入至内存,包括:基于存储节点将从消息队列中读取到的时序数据写入至内存。
可选的,上述处理器还可以执行如下步骤的程序代码:基于第一分片信息在消息队列中至少创建第一分片;在存储节点上创建和消息队列中第一分片的数量相同的第二分片,其中,第二分片和第一分片一一对应。
可选的,上述处理器还可以执行如下步骤的程序代码:向消息队列中增加与新增存储节点的数量对应的第三分片;基于第三分片的数量、新增存储节点对应的时间戳和消息队列中的第一分片的数量确定第三分片信息,其中,第三分片信息用于表征第三时段与由第一分片和第三分片得到的分片集之间的映射关系,第三时段与新增存储节点对应的时间戳相关联。
可选的,上述处理器还可以执行如下步骤的程序代码:分别在多个存储节点中,从消息队列中读取到分片结果,且将读取到的分片结果写入至内存。
可选的,上述处理器还可以执行如下步骤的程序代码:分别在多个存储节点中,从消息队列中读取相同主题下的多个分片结果,且将读取到的多个分片结果写入至内存。
可选的,上述处理器还可以执行如下步骤的程序代码:如果第一集群中的数据代理节点处于正常工作状态,则基于第一集群中的数据代理节点获取待处理的时序数据;如果第一集群中的数据代理节点处于异常工作状态,则基于第二集群中的数据代理节点获取待处理的时序数据。
可选的,上述处理器还可以执行如下步骤的程序代码:基于数据订阅消息确定目标组件,其中,数据订阅消息用于表征待进行数据订阅的任务;将从所述消息队列中读取到的时序数据写入至目标组件中。
采用本发明实施例,提供了一种基于消息队列的时序数据松耦合存储的方案。通过采用一种使用消息队列将日志和数据存储分开的方式,实现了日志存储和数据存储松耦合,这样可以有效降低了存储节点的数据复制(高可用)、水平扩展实现的复杂度等,提高了数据存储的效率,解决了数据存储的效率低的技术问题,达到了提高数据存储的效率的技术效果。
本领域普通技术人员可以理解,图19所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图19其并不对上述电子装置的结构造成限定。例如,计算机终端19还可包括比图19中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图19所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的时序数据处理方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:响应客户端请求,从时序数据库中获取待处理的时序数据,其中,时序数据为由数据源按照时间周期产生,并存储在时序数据库中;在消息队列中存储时序数据对应的分片结果,其中,分片结果用于使消息队列存储对应的日志文件;将从消息队列中读取到的分片结果写入至内存。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:对时序数据进行分片处理,得到分片结果。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:确定时序数据的时间戳所匹配到的第一分片信息,其中,第一分片信息用于表征第一时段与第一分片信息中的分片之间的映射关系,第一时段包括时序数据的时间戳;基于第一分片信息对时序数据进行分片处理,得到分片结果。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:基于第一分片信息中的分片的数量和时序数据对应的键,确定时序数据对应的目标分片,得到分片结果。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:基于新增分片、新增分片对应的时间戳和第一分片信息生成第二分片信息,其中,第二分片信息用于表征第二时段与由第一分片信息中的分片和新增分片得到的分片集之间的映射关系,第二时段与新增分片对应的时间戳相关联。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:基于存储节点的数量确定第一分片信息;其中,将从消息队列中读取到的时序数据写入至内存,包括:基于存储节点将从消息队列中读取到的时序数据写入至内存。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:基于第一分片信息在消息队列中至少创建第一分片;在存储节点上创建和消息队列中第一分片的数量相同的第二分片,其中,第二分片和第一分片一一对应。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:向消息队列中增加与新增存储节点的数量对应的第三分片;基于第三分片的数量、新增存储节点对应的时间戳和消息队列中的第一分片的数量确定第三分片信息,其中,第三分片信息用于表征第三时段与由第一分片和第三分片得到的分片集之间的映射关系,第三时段与新增存储节点对应的时间戳相关联。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:分别在多个存储节点中,从消息队列中读取到分片结果,且将读取到的分片结果写入至内存。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:分别在多个存储节点中,从消息队列中读取相同主题下的多个分片结果,且将读取到的多个分片结果写入至内存。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:如果第一集群中的数据代理节点处于正常工作状态,则基于第一集群中的数据代理节点获取待处理的时序数据;如果第一集群中的数据代理节点处于异常工作状态,则基于第二集群中的数据代理节点获取待处理的时序数据。
可选地,计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:基于数据订阅消息确定目标组件,其中,数据订阅消息用于表征待进行数据订阅的任务;将从所述消息队列中读取到的时序数据写入至目标组件中。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (14)
1.一种时序数据处理方法,其特征在于,包括:
响应客户端请求,从时序数据库中获取待处理的时序数据,其中,所述时序数据为由数据源按照时间周期产生,并存储在所述时序数据库中;
在消息队列中存储所述时序数据对应的分片结果,其中,所述分片结果用于使所述消息队列存储对应的日志文件;
将从所述消息队列中读取到的所述分片结果写入至内存。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所述时序数据进行分片处理,得到所述分片结果。
3.根据权利要求2所述的方法,其特征在于,对所述时序数据进行分片处理,得到所述分片结果,包括:
确定所述时序数据的时间戳所匹配到的第一分片信息,其中,所述第一分片信息用于表征第一时段与所述第一分片信息中的分片之间的映射关系,所述第一时段包括所述时序数据的时间戳;
基于所述第一分片信息对所述时序数据进行分片处理,得到所述分片结果。
4.根据权利要求3所述的方法,其特征在于,基于所述第一分片信息对所述时序数据进行分片处理,得到所述分片结果,包括:
基于所述第一分片信息中的分片的数量和所述时序数据对应的键,确定所述时序数据对应的目标分片,得到所述分片结果。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
基于新增分片、所述新增分片对应的时间戳和所述第一分片信息生成第二分片信息,其中,所述第二分片信息用于表征第二时段与由所述第一分片信息中的分片和所述新增分片得到的分片集之间的映射关系,所述第二时段与所述新增分片对应的时间戳相关联。
6.根据权利要求3所述的方法,其特征在于,所述方法还包括:
基于存储节点的数量确定所述第一分片信息;
其中,将从所述消息队列中读取到的所述时序数据写入至内存,包括:基于所述存储节点将从所述消息队列中读取到的所述时序数据写入至内存。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
基于所述第一分片信息在所述消息队列中至少创建第一分片;
在所述存储节点上创建和所述消息队列中所述第一分片的数量相同的第二分片,其中,所述第二分片和所述第一分片一一对应。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
向所述消息队列中增加与新增存储节点的数量对应的第三分片;
基于所述第三分片的数量、所述新增存储节点对应的时间戳和所述消息队列中的所述第一分片的数量确定第三分片信息,其中,所述第三分片信息用于表征第三时段与由所述第一分片和所述第三分片得到的分片集之间的映射关系,所述第三时段与所述新增存储节点对应的时间戳相关联。
9.根据权利要求1所述的方法,其特征在于,将从所述消息队列中读取到的所述分片结果写入至内存,包括:
分别在多个存储节点中,从所述消息队列中读取到所述分片结果,且将读取到的所述分片结果写入至所述内存;或者
分别在多个存储节点中,从所述消息队列中读取相同主题下的多个所述分片结果,且将读取到的多个所述分片结果写入至所述内存。
10.根据权利要求1所述的方法,其特征在于,获取待处理的时序数据,包括:
如果第一集群中的数据代理节点处于正常工作状态,则基于所述第一集群中的数据代理节点获取待处理的所述时序数据;
如果所述第一集群中的数据代理节点处于异常工作状态,则基于第二集群中的数据代理节点获取待处理的所述时序数据。
11.根据权利要求1至10中任意一项所述的方法,其特征在于,所述方法还包括:
基于数据订阅消息确定目标组件,其中,所述数据订阅消息用于表征待进行数据订阅的任务;
将从所述消息队列中读取到的所述时序数据写入至所述目标组件中。
12.一种时序数据处理***,其特征在于,包括:
数据代理组件,用于响应客户端请求,从时序数据库中获取待处理的时序数据,其中,所述时序数据为由数据源按照时间周期产生,并存储在所述时序数据库中;
消息队列组件,用于在消息队列中存储所述时序数据对应的分片结果,其中,所述分片结果用于使所述消息队列存储对应的日志文件;
数据存储组件,用于将从所述消息队列中读取到的所述分片结果写入至内存。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的程序,其中,在所述程序被处理器运行时控制所述计算机可读存储介质所在设备执行权利要求1至11中任意一项所述的方法。
14.一种电子设备,其特征在于,包括:
处理器;
存储器,与所述处理器相连接,用于为所述处理器提供处理以下处理步骤的指令:响应客户端请求,从时序数据库中获取待处理的时序数据,其中,所述时序数据为由数据源按照时间周期产生,并存储在所述时序数据库中;在消息队列中存储所述时序数据对应的分片结果,其中,所述分片结果用于使所述消息队列存储对应的日志文件;将从所述消息队列中读取到的所述分片结果写入至内存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210240693.6A CN114722092A (zh) | 2022-03-10 | 2022-03-10 | 时序数据处理方法、***、存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210240693.6A CN114722092A (zh) | 2022-03-10 | 2022-03-10 | 时序数据处理方法、***、存储介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114722092A true CN114722092A (zh) | 2022-07-08 |
Family
ID=82237853
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210240693.6A Pending CN114722092A (zh) | 2022-03-10 | 2022-03-10 | 时序数据处理方法、***、存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114722092A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149905A (zh) * | 2023-08-16 | 2023-12-01 | 上海沄熹科技有限公司 | 一种时序数据复制方法及装置 |
CN117194080A (zh) * | 2023-11-08 | 2023-12-08 | 恒生电子股份有限公司 | 消息处理方法及装置 |
CN117194732A (zh) * | 2023-11-07 | 2023-12-08 | 山东青鸟工业互联网有限公司 | 一种工业互联网可信数据通信方法和*** |
-
2022
- 2022-03-10 CN CN202210240693.6A patent/CN114722092A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149905A (zh) * | 2023-08-16 | 2023-12-01 | 上海沄熹科技有限公司 | 一种时序数据复制方法及装置 |
CN117149905B (zh) * | 2023-08-16 | 2024-05-24 | 上海沄熹科技有限公司 | 一种时序数据复制方法及装置 |
CN117194732A (zh) * | 2023-11-07 | 2023-12-08 | 山东青鸟工业互联网有限公司 | 一种工业互联网可信数据通信方法和*** |
CN117194732B (zh) * | 2023-11-07 | 2024-02-02 | 山东青鸟工业互联网有限公司 | 一种工业互联网可信数据通信方法和*** |
CN117194080A (zh) * | 2023-11-08 | 2023-12-08 | 恒生电子股份有限公司 | 消息处理方法及装置 |
CN117194080B (zh) * | 2023-11-08 | 2024-02-06 | 恒生电子股份有限公司 | 消息处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111723160B (zh) | 一种多源异构增量数据同步方法及*** | |
CN114722092A (zh) | 时序数据处理方法、***、存储介质和电子设备 | |
CN109918349B (zh) | 日志处理方法、装置、存储介质和电子装置 | |
US10019452B2 (en) | Topology aware distributed storage system | |
US10824372B2 (en) | Data recovery method and device, and cloud storage system | |
CN111258978B (zh) | 一种数据存储的方法 | |
CN111782134B (zh) | 数据处理方法、装置、***和计算机可读存储介质 | |
JP2016508638A (ja) | 階層データ構造のノードにおいて再帰的イベントリスナを用いる方法およびシステム | |
CN106855834B (zh) | 一种数据备份方法、装置和*** | |
US20170277439A1 (en) | Techniques for Path Optimization in Storage Networks | |
CN111552701B (zh) | 确定分布式集群中数据一致性的方法及分布式数据*** | |
CN110048896A (zh) | 一种集群数据获取方法、装置及设备 | |
WO2014087287A1 (en) | Replication control using eventually consistent meta-data | |
CN104917798A (zh) | 一种数据更新的方法和*** | |
CN113792008A (zh) | 网络拓扑结构的获取方法、装置、电子设备及存储介质 | |
US10241716B2 (en) | Global occupancy aggregator for global garbage collection scheduling | |
WO2021257263A1 (en) | Techniques for generating a consistent view of an eventually consistent database | |
CN113051102A (zh) | 文件备份方法、装置、***、存储介质和计算机设备 | |
CN114925075B (zh) | 一种多源时空监测信息实时动态融合方法 | |
CN116842244A (zh) | 搜索引擎数据同步方法、***、设备和存储介质 | |
CN115525603A (zh) | 存储统计方法、装置、计算机可读存储介质与ai设备 | |
CN114969083A (zh) | 一种实时数据分析方法及*** | |
CN117390078B (zh) | 数据处理方法、装置、存储介质和计算机设备 | |
CN114676166B (zh) | 数据处理方法及装置 | |
CN103856359A (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 |