CN116166715A - 时序数据存储引擎的乱序处理方法及系统 - Google Patents

时序数据存储引擎的乱序处理方法及系统 Download PDF

Info

Publication number
CN116166715A
CN116166715A CN202310096745.1A CN202310096745A CN116166715A CN 116166715 A CN116166715 A CN 116166715A CN 202310096745 A CN202310096745 A CN 202310096745A CN 116166715 A CN116166715 A CN 116166715A
Authority
CN
China
Prior art keywords
zblock
data
state
time sequence
memory block
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
CN202310096745.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.)
Shanghai Yunxi Technology Co ltd
Original Assignee
Shanghai Yunxi Technology Co ltd
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 Shanghai Yunxi Technology Co ltd filed Critical Shanghai Yunxi Technology Co ltd
Priority to CN202310096745.1A priority Critical patent/CN116166715A/zh
Publication of CN116166715A publication Critical patent/CN116166715A/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/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2474Sequence data queries, e.g. querying versioned data
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Probability & Statistics with Applications (AREA)
  • Mathematical Physics (AREA)
  • Fuzzy Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了时序数据存储引擎的乱序处理方法及系统,属于时序数据库技术领域,要解决的技术问题为如何在存储和使用乱序数据的同时、保证存储引擎的性能。包括如下步骤:在内存区中配置有多个不同ZdataPoint对象,每个ZdataPoint对象中包含有多个ZBlock;在内存区分配固定大小的连续内存区作为缓存,在缓存内划分有时序内存块和乱序内存块,并在时序内存块中预留顺序空间及乱序空间;申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块;对于处于已写满状态的ZBlock,通过落盘线程将时序数据落盘至磁盘区,落盘成功后,在文件索引部追加所述时序数据的信息记录。

Description

时序数据存储引擎的乱序处理方法及系统
技术领域
本发明涉及时序数据库技术领域,具体地说是时序数据存储引擎的乱序处理方法及系统。
背景技术
时序数据是指时间序列数据,是按时间顺序记录的数据列,在同一数据列中的各个数据必须是同口径的,要求具有可比性。时序数据可以是时期数,也可以时点数。时序数据通常具有写入速度快(写入需求大于读取需求)、写入容量大、近期数据关注度高等特点。
在实际时序数据产生的场景中,采集的数据会先被传送至解码处理程序,再被写入数据库。在这个过程中,因网络延迟等原因可能导致数据写入数据库的顺序与数据产生的顺序不一致。此外,时序数据可能出现数据出错而重传,也会产生时序数据乱序现象。
当前痛点问题有:
(1)乱序数据发生具有不确定性;
(2)通过后台任务重排时序数据的处理方式会影响性能;
(3)乱序数据丢弃会影响数据的准确性.
在时序数据存储引擎中,乱序数据的处理会降低存储引擎的性能,如何在存储和使用乱序数据的同时、保证存储引擎的性能,是需要解决的技术问题。
发明内容
本发明的技术任务是针对以上不足,提供一种时序数据存储引擎的乱序处理方法及系统,来解决如何在存储和使用乱序数据的同时、保证存储引擎的性能的技术问题。
第一方面,本发明一种时序数据存储引擎的乱序处理方法,所述存储引擎内包括内存区和磁盘区,所述时序数据包括顺序数据和乱序数据,所述方法包括如下步骤:
在内存区中配置有多个不同ZdataPoint对象,每个ZdataPoint对象中包含有多个ZBlock,每个ZBlock用于调控一段时间内时序数据的存储,ZBlock之间对应的时间段没有交叉;
在内存区分配固定大小的连续内存区作为缓存,在缓存内划分有用于存储时序数据的时序内存块和用于存储乱序数据的乱序内存块,所述时序内存块的内存空间大于所述乱序内存块的内存空间,并基于乱序数据概率、在时序内存块中预留用于存放顺序数据的顺序空间以及用于存放乱序数据的乱序空间;
对于采集点采集的时序数据,基于采集点来源将时序数据划分至对应的ZdataPoint对象中,申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块;
对于处于已写满状态的ZBlock,通过落盘线程将所述ZBlock对应时序内存块中的时序数据落盘至磁盘区,落盘成功后,在文件索引部追加所述时序数据的信息记录;
其中,申请一个ZBlock、通过ZBlock将时序数据写入时序内存块,遵循如下原则:
将顺序数据写入顺序内存块,将乱序数据写入乱序内存块;
如果当前乱序内存块已写满,新产生的乱序数据为当前ZBlock对应时间段内的,通过ZBlock申请一个乱序内存块,将新产生的乱序数据写入所述乱序内存块;
如果当前顺序内存块已写满,申请一个新的ZBlock、通过所述新的ZBlock将时序数据写入与所述新的ZBlock对应的新的时序内存块;
如果当前缓存已写满,基于预配置的缓存回收机制,回收预定数量的ZBlock,通过回收预定数量的ZBlock,删除所述ZBlock、并释放对应的时序内存块。
作为优选,在内存区中,ZBlock按照时间段的顺序依次排序,形成ZBlock数组。
作为优选,申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块时,所述ZBlock对应有八种状态,分别为:
初始状态:ZBlock刚创建时的状态;
正在写入状态:ZBlock对应的顺序内存空间尚未用完时;
不可写状态:ZBlock对应的顺序内存空间用尽时;
临时写状态:当ZBlock状态为不可写状态、但是存在乱序数据需要写入所述ZBlock对应的时序内存块时,先将所述ZBlock状态置为临时写状态,乱序数据写入完成后,ZBlock状态重新置为不可写状态;
正在落盘状态:落盘线程开始处理ZBlock时,先将ZBlock的状态置为正在落盘状态,等落盘线程处理完成后,将所述ZBlock的状态置为已落盘状态;
已落盘状态:落盘线程将ZBlock中的时序数据写入磁盘后,更新ZBlock的状态为已落盘状态;
待重新落盘状态:当ZBlock状态为已落盘,但是有乱序数据写入所述ZBlock对应的内存块时,将乱序数据写入ZBlock后,将ZBlock的状态置为待重新落盘状态;
结束状态:当缓存回收机制回收到ZBlock时,判断ZBlock的状态,如果是已落盘,就直接删除所述ZBlock;如果是待重新落盘状态,则将磁盘区中对应的Block数据块更新后,再删除所述ZBlock;
所述缓存回收机制为:当缓存中剩余空间不足以分配新的时序数据块时,触发缓存回收,基于时间段回收预定数量的古老的ZBlock,在回收ZBlock之前,判断ZBlock状态,对于处于不可写状态或者待重新落盘状态的ZBlock,将所述ZBlock对应时序内存块中时序数据落盘后,回收所述ZBlock。
作为优选,所述乱序数据包括:
内存乱序数据,所述内存乱序数据为乱序数据的时间戳对应的ZBlock还存在于内存区中;
磁盘乱序数据,所述磁盘乱序数据为乱序数据的时间戳对应的ZBlock已经不在内存区中,而是存在于对应磁盘区的某个Block块;
对于内存乱序数据,执行如下:
分析其时间戳对应的ZBlock状态;
当ZBlock的状态为正在写入时,直接将乱序数据写入到预留的乱序空间中;
当ZBlock的状态为不可写时,先将ZBlock的状态置为临时写,再将乱序数据写入到预留的乱序空间中,最后将ZBlock的状态置为不可写;
当ZBlock的状态为已落盘时,将乱序数据写入到预留的乱序空间中,将ZBlock的状态置为待重新落盘状态;
对磁盘乱序数据,直接丢提所述磁盘乱序数据。
作为优选,所述时序内存块为64K,所述乱序内存块为1K,每个ZBlock分配有一个对应的时序内存块;
时序内存块可以存放的时序记录数量blockRows为:
Figure BDA0004071902180000051
时序内存块中预留n个空间乱序空间,其中
Figure BDA0004071902180000052
时序内存块中顺序空间用于存放顺序数据,顺序数据指插入ZBlock时时序数据的时间戳大于ZBlock已存储的所有时序数据的时间戳,顺序数据的预留空间为:
blockRows-n
基于自适应方法计算乱序数据概率,包括如下步骤:
在缓存回收ZBlock时,提取出当前ZBlock含有的乱序数据的比例,如果ZBlock中乱序数据个数为0,则与下一个ZBlock一起统计比例;设定提取出的比例顺序为R1、R2、R3……Rn,根据乱序数据的采集数值重新计算乱序数据概率的数值;
第i次计算出的disorderRatio的值为Di:
Figure BDA0004071902180000053
其中,乱序数据的比例=乱序数据个数/ZBlock存储的数据总量。
第二方面,本发明一种时序数据存储引擎的乱序处理系统,所述存储引擎内包括内存区和磁盘区,所述时序数据包括顺序数据和乱序数据,所述系统用于执行如第一方面任一项所述的时序数据存储引擎的乱序处理方法,所述系统包括配置模块和写入模块;
所述配置模块用于执行如下:
在内存区中配置有多个不同ZdataPoint对象,每个ZdataPoint对象中包含有多个ZBlock,每个ZBlock用于调控一段时间内时序数据的存储,ZBlock之间对应的时间段没有交叉;
在内存区分配固定大小的连续内存区作为缓存,在缓存内划分有用于存储时序数据的时序内存块和用于存储乱序数据的乱序内存块,所述时序内存块的内存空间大于所述乱序内存块的内存空间,并基于乱序数据概率、在时序内存块中预留用于存放顺序数据的顺序空间以及用于存放乱序数据的乱序空间;
所述写入模块用于执行如下:
对于采集点采集的时序数据,基于采集点来源将时序数据划分至对应的ZdataPoint对象中,申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块;
对于处于已写满状态的ZBlock,通过落盘线程将所述ZBlock对应时序内存块中的时序数据落盘至磁盘区,落盘成功后,在文件索引部追加所述时序数据的信息记录;
其中,所述写入模块遵循如下原则:
将顺序数据写入顺序内存块,将乱序数据写入乱序内存块;
如果当前乱序内存块已写满,新产生的乱序数据为当前ZBlock对应时间段内的,通过ZBlock申请一个乱序内存块,将新产生的乱序数据写入所述乱序内存块;
如果当前顺序内存块已写满,申请一个新的ZBlock、通过所述新的ZBlock将时序数据写入与所述新的ZBlock对应的新的时序内存块;
如果当前缓存已写满,基于预配置的缓存回收机制,回收预定数量的ZBlock,通过回收预定数量的ZBlock,删除所述ZBlock、并释放对应的时序内存块。
作为优选,在内存区中,ZBlock按照时间段的顺序依次排序,形成ZBlock数组。
作为优选,所述ZBlock对应有八种状态,分别为:
初始状态:ZBlock刚创建时的状态;
正在写入状态:ZBlock对应的顺序内存空间尚未用完时;
不可写状态:ZBlock对应的顺序内存空间用尽时;
临时写状态:当ZBlock状态为不可写状态、但是存在乱序数据需要写入所述ZBlock对应的时序内存块时,先将所述ZBlock状态置为临时写状态,乱序数据写入完成后,ZBlock状态重新置为不可写状态;
正在落盘状态:落盘线程开始处理ZBlock时,先将ZBlock的状态置为正在落盘状态,等落盘线程处理完成后,将所述ZBlock的状态置为已落盘状态;
已落盘状态:落盘线程将ZBlock中的时序数据写入磁盘后,更新ZBlock的状态为已落盘状态;
待重新落盘状态:当ZBlock状态为已落盘,但是有乱序数据写入所述ZBlock对应的内存块时,将乱序数据写入ZBlock后,将ZBlock的状态置为待重新落盘状态;
结束状态:当缓存回收机制回收到ZBlock时,判断ZBlock的状态,如果是已落盘,就直接删除所述ZBlock;如果是待重新落盘状态,则将磁盘区中对应的Block数据块更新后,再删除所述ZBlock;
所述缓存回收机制为:当缓存中剩余空间不足以分配新的时序数据块时,触发缓存回收,基于时间段回收预定数量的古老的ZBlock,在回收ZBlock之前,判断ZBlock状态,对于处于不可写状态或者待重新落盘状态的ZBlock,将所述ZBlock对应时序内存块中时序数据落盘后,回收所述ZBlock。
作为优选,所述乱序数据包括:
内存乱序数据,所述内存乱序数据为乱序数据的时间戳对应的ZBlock还存在于内存区中;
磁盘乱序数据,所述磁盘乱序数据为乱序数据的时间戳对应的ZBlock已经不在内存区中,而是存在于对应磁盘区的某个Block块;
对于内存乱序数据,所述写入模块用于执行如下:
分析其时间戳对应的ZBlock状态;
当ZBlock的状态为正在写入时,直接将乱序数据写入到预留的乱序空间中;
当ZBlock的状态为不可写时,先将ZBlock的状态置为临时写,再将乱序数据写入到预留的乱序空间中,最后将ZBlock的状态置为不可写;
当ZBlock的状态为已落盘时,将乱序数据写入到预留的乱序空间中,将ZBlock的状态置为待重新落盘状态;
对磁盘乱序数据,所述写入模块用于执行如下:直接丢提所述磁盘乱序数据。
作为优选,所述时序内存块为64K,所述乱序内存块为1K,每个ZBlock分配有一个对应的时序内存块;
时序内存块可以存放的时序记录数量blockRows为:
Figure BDA0004071902180000091
时序内存块中预留n个空间乱序空间,其中
Figure BDA0004071902180000092
时序内存块中顺序空间用于存放顺序数据,顺序数据指插入ZBlock时时序数据的时间戳大于ZBlock已存储的所有时序数据的时间戳,顺序数据的预留空间为:
blockRows-n
所述配置模块用于基于自适应方法计算乱序数据概率,包括如下步骤:
在缓存回收ZBlock时,提取出当前ZBlock含有的乱序数据的比例,如果ZBlock中乱序数据个数为0,则与下一个ZBlock一起统计比例;设定提取出的比例顺序为R1、R2、R3……Rn,根据乱序数据的采集数值重新计算乱序数据概率的数值;
第i次计算出的disorderRatio的值为Di:
Figure BDA0004071902180000101
其中,乱序数据的比例=乱序数据个数/ZBlock存储的数据总量。
本发明的时序数据存储引擎的乱序处理方法及系统具有以下优点:
1、通过使用固定大小内存块的缓存机制以及自适应乱序数据概率算法,降低了内存管理的消耗并且提升了内存利用率;
2、使得在时序数据存储引擎中能够存储乱序数据,扩展了存储引擎的功能,并且对存储引擎的性能影响较小。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
下面结合附图对本发明进一步说明。
图1为实施例1时序数据存储引擎的乱序处理方法的流程框图;
图2为实施例1时序数据存储引擎的乱序处理方法中时序数据存储引擎的整体结构图;
图3为实施例1时序数据存储引擎的乱序处理方法中ZBlock的结构图;
图4为实施例1时序数据存储引擎的乱序处理方法中ZBlock的状态图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
本发明实施例提供时序数据存储引擎的乱序处理方法及系统,用于解决如何在存储和使用乱序数据的同时、保证存储引擎的性能的技术问题的技术问题。
实施例1:
本发明一种时序数据存储引擎的乱序处理方法,存储引擎内包括内存区和磁盘区,时序数据包括顺序数据和乱序数据。如图1所示,该方法包括如下步骤:
S100、在内存区中配置有多个不同ZdataPoint对象,每个ZdataPoint对象中包含有多个ZBlock,每个ZBlock用于调控一段时间内时序数据的存储,ZBlock之间对应的时间段没有交叉;
在内存区分配固定大小的连续内存区作为缓存,在缓存内划分有用于存储时序数据的时序内存块和用于存储乱序数据的乱序内存块,所述时序内存块的内存空间大于所述乱序内存块的内存空间,并基于乱序数据概率、在时序内存块中预留用于存放顺序数据的顺序空间以及用于存放乱序数据的乱序空间;
S200、对于采集点采集的时序数据,基于采集点来源将时序数据划分至对应的ZdataPoint对象中,申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块;
对于处于已写满状态的ZBlock,通过落盘线程将所述ZBlock对应时序内存块中的时序数据落盘至磁盘区,落盘成功后,在文件索引部追加所述时序数据的信息记录。
本实施例中存储引擎的结构如图2所示,时序数据存储引擎存储很多的采集点(datapoint)采集过来的时序数据。采集的时序数据依据不同的采集点来源划分到不同的ZdataPoint对象中。ZdataPoint对象中包含很多的ZBlock,ZBlock的结构如图3所示。每个ZBlock存储一段时间内的时序数据,ZBlock之间时间段都没有交叉。每个ZBlock有64K固定大小的内存空间,当写满后,需要申请新的ZBlock对象,用来存储新的时序数据。ZBlock按照时间段的顺序依次排序,形成ZBlock数组。
后台的落盘线程将已经写满的ZBlock中的时序数据落盘到磁盘中,落盘成功后在文件索引部追加这个时序数据块的信息记录。
缓存是内存中分配出来的固定大小的连续内存区域,只用于存放时序数据记录。本实施例中将缓存划分64K的时序内存块和1K固定大小的乱序内存块。每个ZBlock对象分配一个64K固定大小的时序内存块。
假设一条时序数据记录占用的字节数为rowLength,假设乱序数据产生的概率为disorderRatio,初始时设置为0.001。
时序内存块可以存放的时序记录数量blockRows为:
Figure BDA0004071902180000121
64K内存块中预留n个空间存放乱序数据空间,
Figure BDA0004071902180000122
时序内存块中顺序空间orderedtsdata用于存放顺序数据,顺序数据是指插入ZBlock时时序数据的时间戳大于ZBlock已存储的所有时序数据的时间戳。这种时序数据的预留空间为:
blockRows-n
当预留的n个乱序数据空间用尽,但是还有新的乱序数据需要存储时,ZBlock申请1K大小的乱序空间DisOrdered用于存放这些新的乱序数据。
ZBlock的状态如图4所示,共有八种状态分别为:
初始状态:ZBlock刚创建时的状态;
正在写入状态:ZBlock对应的顺序内存空间尚未用完时;
不可写状态:ZBlock对应的顺序内存空间用尽时;
临时写状态:当ZBlock状态为不可写状态、但是存在乱序数据需要写入所述ZBlock对应的时序内存块时,先将所述ZBlock状态置为临时写状态,乱序数据写入完成后,ZBlock状态重新置为不可写状态;
正在落盘状态:落盘线程开始处理ZBlock时,先将ZBlock的状态置为正在落盘状态,等落盘线程处理完成后,将所述ZBlock的状态置为已落盘状态;
已落盘状态:落盘线程将ZBlock中的时序数据写入磁盘后,更新ZBlock的状态为已落盘状态;
待重新落盘状态:当ZBlock状态为已落盘,但是有乱序数据写入所述ZBlock对应的内存块时,将乱序数据写入ZBlock后,将ZBlock的状态置为待重新落盘状态;
结束状态:当缓存回收机制回收到ZBlock时,判断ZBlock的状态,如果是已落盘,就直接删除所述ZBlock;如果是待重新落盘状态,则将磁盘区中对应的Block数据块更新后,再删除所述ZBlock。
本实施例中,基于自适应方法计算乱序数据概率disorderRatio,在缓存回收ZBlock时,提取出当前ZBlock含有的乱序数据的比例(乱序数据个数除以ZBlock存储的数据总量)。如果ZBlock中乱序数据个数为0,则与下一个ZBlock一起统计比例。假设提取出的比例顺序为R1、R2、R3……Rn。本实施例会根据乱序数据的采集数值重新计算disorderRatio的数值。
比例数组只存放最近的100条乱序数据比例数值。只有最近的100条比例数值参与运算。
假设第i次计算出的disorderRatio的值为Di:
Figure BDA0004071902180000141
本实施例步骤S200申请一个ZBlock、通过ZBlock将时序数据写入时序内存块,遵循如下原则:
(1)将顺序数据写入顺序内存块,将乱序数据写入乱序内存块;
(2)如果当前乱序内存块已写满,新产生的乱序数据为当前ZBlock对应时间段内的,通过ZBlock申请一个乱序内存块,将新产生的乱序数据写入所述乱序内存块;
(3)如果当前顺序内存块已写满,申请一个新的ZBlock、通过所述新的ZBlock将时序数据写入与所述新的ZBlock对应的新的时序内存块;
(4)如果当前缓存已写满,基于预配置的缓存回收机制,回收预定数量的ZBlock,通过回收预定数量的ZBlock,删除所述ZBlock、并释放对应的时序内存块。
本实施例中,缓存大小是程序启动时确定好的,固定值,当缓存不能分配新的64k数据块时,需要释放一些比较古老的ZBlock对象。
缓存回收的触发条件是:向缓存中申请新的数据块,报缓存空间不足时。缓存回收的算法是:将最古老的十个ZBlock回收掉,在回收之前判断该ZBlock状态,如果为不可写状态或待重新落盘状态,则需要将这个ZBblock对象中的时序数据落盘后,再回收。
本实施例中,乱序数据分为两类,内存乱序和磁盘乱序。内存乱序数据指乱序数据的时间戳对应的ZBlock对象还存在于内存中;磁盘乱序数据指乱序数据的时间戳对应的ZBlock已经不在内存中,而是对应磁盘的某个Block块。
对于内存乱序的时序数据,本实施例执行如下:分析其时间戳对应的ZBlock状态。当ZBlock的状态为正在写入时,直接将乱序数据写入到乱序数据预留的空间中;当ZBlock的状态为不可写时,先将ZBlock的状态置为临时写,再将乱序数据写入到ZBlock的乱序空间中,最后将ZBlock的状态置为不可写;当ZBlock的状态为已落盘时,将乱序数据写入到ZBlock的乱序空间后,将ZBlock的状态置为待重新落盘状态。
对于磁盘乱序的时序数据,本实施例中直接丢弃。
本实施例针对时序数据真实的乱序场景进行分析,提出一种丢弃时间较久的乱序数据以减轻处理消耗的方法。使得在时序数据存储引擎中能够存储乱序数据,扩展了存储引擎的功能,并且对存储引擎的性能影响较小。通过使用固定大小内存块的缓存机制以及自适应乱序数据概率算法,降低了内存管理的消耗并且提升了内存利用率。
实施例2:
本发明一种时序数据存储引擎的乱序处理系统,存储引擎内包括内存区和磁盘区,时序数据包括顺序数据和乱序数据,该系统包括配置模块和写入模块,该系统用于执行实施例1公开的方法,实现存储引擎中对乱序数据进行处理。
配置模块用于执行如下:
(1)在内存区中配置有多个不同ZdataPoint对象,每个ZdataPoint对象中包含有多个ZBlock,每个ZBlock用于调控一段时间内时序数据的存储,ZBlock之间对应的时间段没有交叉;
(2)在内存区分配固定大小的连续内存区作为缓存,在缓存内划分有用于存储时序数据的时序内存块和用于存储乱序数据的乱序内存块,所述时序内存块的内存空间大于所述乱序内存块的内存空间,并基于乱序数据概率、在时序内存块中预留用于存放顺序数据的顺序空间以及用于存放乱序数据的乱序空间。
本实施例中,存储引擎的结构如图2所示,时序数据存储引擎存储很多的采集点(datapoint)采集过来的时序数据。采集的时序数据依据不同的采集点来源划分到不同的ZdataPoint对象中。ZdataPoint对象中包含很多的ZBlock,ZBlock的结构如图3所示。每个ZBlock存储一段时间内的时序数据,ZBlock之间时间段都没有交叉。每个ZBlock有64K固定大小的内存空间,当写满后,需要申请新的ZBlock对象,用来存储新的时序数据。ZBlock按照时间段的顺序依次排序,形成ZBlock数组。
后台的落盘线程将已经写满的ZBlock中的时序数据落盘到磁盘中,落盘成功后在文件索引部追加这个时序数据块的信息记录。
缓存是内存中分配出来的固定大小的连续内存区域,只用于存放时序数据记录。本实施例中将缓存划分64K的时序内存块和1K固定大小的乱序内存块。每个ZBlock对象分配一个64K固定大小的时序内存块。
假设一条时序数据记录占用的字节数为rowLength,假设乱序数据产生的概率为disorderRatio,初始时设置为0.001。
时序内存块可以存放的时序记录数量blockRows为:
Figure BDA0004071902180000161
64K内存块中预留n个空间存放乱序数据空间,
Figure BDA0004071902180000171
时序内存块中顺序空间orderedtsdata用于存放顺序数据,顺序数据是指插入ZBlock时时序数据的时间戳大于ZBlock已存储的所有时序数据的时间戳。这种时序数据的预留空间为:
blockRows-n
当预留的n个乱序数据空间用尽,但是还有新的乱序数据需要存储时,ZBlock申请1K大小的乱序空间DisOrdered用于存放这些新的乱序数据。
ZBlock的状态如图4所示,共有八种状态分别为:
初始状态:ZBlock刚创建时的状态;
正在写入状态:ZBlock对应的顺序内存空间尚未用完时;
不可写状态:ZBlock对应的顺序内存空间用尽时;
临时写状态:当ZBlock状态为不可写状态、但是存在乱序数据需要写入所述ZBlock对应的时序内存块时,先将所述ZBlock状态置为临时写状态,乱序数据写入完成后,ZBlock状态重新置为不可写状态;
正在落盘状态:落盘线程开始处理ZBlock时,先将ZBlock的状态置为正在落盘状态,等落盘线程处理完成后,将所述ZBlock的状态置为已落盘状态;
已落盘状态:落盘线程将ZBlock中的时序数据写入磁盘后,更新ZBlock的状态为已落盘状态;
待重新落盘状态:当ZBlock状态为已落盘,但是有乱序数据写入所述ZBlock对应的内存块时,将乱序数据写入ZBlock后,将ZBlock的状态置为待重新落盘状态;
结束状态:当缓存回收机制回收到ZBlock时,判断ZBlock的状态,如果是已落盘,就直接删除所述ZBlock;如果是待重新落盘状态,则将磁盘区中对应的Block数据块更新后,再删除所述ZBlock。
本实施例中,基于自适应方法计算乱序数据概率disorderRatio,在缓存回收ZBlock时,提取出当前ZBlock含有的乱序数据的比例(乱序数据个数除以ZBlock存储的数据总量)。如果ZBlock中乱序数据个数为0,则与下一个ZBlock一起统计比例。假设提取出的比例顺序为R1,R2,R3,,,,,Rn。本实施例会根据乱序数据的采集数值重新计算disorderRatio的数值。
比例数组只存放最近的100条乱序数据比例数值。只有最近的100条比例数值参与运算。
假设第i次计算出的disorderRatio的值为Di:
Figure BDA0004071902180000181
写入模块用于执行如下:
(1)对于采集点采集的时序数据,基于采集点来源将时序数据划分至对应的ZdataPoint对象中,申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块;
(2)对于处于已写满状态的ZBlock,通过落盘线程将所述ZBlock对应时序内存块中的时序数据落盘至磁盘区,落盘成功后,在文件索引部追加所述时序数据的信息记录。
本实施例中,写入模块遵循如下原则:
(1)将顺序数据写入顺序内存块,将乱序数据写入乱序内存块;
(2)如果当前乱序内存块已写满,新产生的乱序数据为当前ZBlock对应时间段内的,通过ZBlock申请一个乱序内存块,将新产生的乱序数据写入所述乱序内存块;
(3)如果当前顺序内存块已写满,申请一个新的ZBlock、通过所述新的ZBlock将时序数据写入与所述新的ZBlock对应的新的时序内存块;
(4)如果当前缓存已写满,基于预配置的缓存回收机制,回收预定数量的ZBlock,通过回收预定数量的ZBlock,删除所述ZBlock、并释放对应的时序内存块。
本实施例中,缓存大小是程序启动时确定好的,固定值,当缓存不能分配新的64k数据块时,需要释放一些比较古老的ZBlock对象。
缓存回收的触发条件是:向缓存中申请新的数据块,报缓存空间不足时。缓存回收的算法是:将最古老的十个ZBlock回收掉,在回收之前判断该ZBlock状态,如果为不可写状态或待重新落盘状态,则需要将这个ZBblock对象中的时序数据落盘后,再回收。
本实施例中,乱序数据分为两类,分别为内存乱序和磁盘乱序。内存乱序数据指乱序数据的时间戳对应的ZBlock对象还存在于内存中;磁盘乱序数据指乱序数据的时间戳对应的ZBlock已经不在内存中,而是对应磁盘的某个Block块。
对于内存乱序的时序数据,本实施例写入模块用于执行如下:分析其时间戳对应的ZBlock状态。当ZBlock的状态为正在写入时,直接将乱序数据写入到乱序数据预留的空间中;当ZBlock的状态为不可写时,先将ZBlock的状态置为临时写,再将乱序数据写入到ZBlock的乱序空间中,最后将ZBlock的状态置为不可写;当ZBlock的状态为已落盘时,将乱序数据写入到ZBlock的乱序空间后,将ZBlock的状态置为待重新落盘状态。
对于磁盘乱序的时序数据,本实施例写入模块用于直接丢弃磁盘乱序数据。
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。

Claims (10)

1.一种时序数据存储引擎的乱序处理方法,其特征在于,所述存储引擎内包括内存区和磁盘区,所述时序数据包括顺序数据和乱序数据,所述方法包括如下步骤:
在内存区中配置有多个不同ZdataPoint对象,每个ZdataPoint对象中包含有多个ZBlock,每个ZBlock用于调控一段时间内时序数据的存储,ZBlock之间对应的时间段没有交叉;
在内存区分配固定大小的连续内存区作为缓存,在缓存内划分有用于存储时序数据的时序内存块和用于存储乱序数据的乱序内存块,所述时序内存块的内存空间大于所述乱序内存块的内存空间,并基于乱序数据概率、在时序内存块中预留用于存放顺序数据的顺序空间以及用于存放乱序数据的乱序空间;
对于采集点采集的时序数据,基于采集点来源将时序数据划分至对应的ZdataPoint对象中,申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块;
对于处于已写满状态的ZBlock,通过落盘线程将所述ZBlock对应时序内存块中的时序数据落盘至磁盘区,落盘成功后,在文件索引部追加所述时序数据的信息记录;
其中,申请一个ZBlock、通过ZBlock将时序数据写入时序内存块,遵循如下原则:
将顺序数据写入顺序内存块,将乱序数据写入乱序内存块;
如果当前乱序内存块已写满,新产生的乱序数据为当前ZBlock对应时间段内的,通过ZBlock申请一个乱序内存块,将新产生的乱序数据写入所述乱序内存块;
如果当前顺序内存块已写满,申请一个新的ZBlock、通过所述新的ZBlock将时序数据写入与所述新的ZBlock对应的新的时序内存块;
如果当前缓存已写满,基于预配置的缓存回收机制,回收预定数量的ZBlock,通过回收预定数量的ZBlock,删除所述ZBlock、并释放对应的时序内存块。
2.根据权利要求1所述的时序数据存储引擎的乱序处理方法,其特征在于,在内存区中,ZBlock按照时间段的顺序依次排序,形成ZBlock数组。
3.根据权利要求1或我2所述的时序数据存储引擎的乱序处理方法,其特征在于,申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块时,所述ZBlock对应有八种状态,分别为:
初始状态:ZBlock刚创建时的状态;
正在写入状态:ZBlock对应的顺序内存空间尚未用完时;
不可写状态:ZBlock对应的顺序内存空间用尽时;
临时写状态:当ZBlock状态为不可写状态、但是存在乱序数据需要写入所述ZBlock对应的时序内存块时,先将所述ZBlock状态置为临时写状态,乱序数据写入完成后,ZBlock状态重新置为不可写状态;
正在落盘状态:落盘线程开始处理ZBlock时,先将ZBlock的状态置为正在落盘状态,等落盘线程处理完成后,将所述ZBlock的状态置为已落盘状态;
已落盘状态:落盘线程将ZBlock中的时序数据写入磁盘后,更新ZBlock的状态为已落盘状态;
待重新落盘状态:当ZBlock状态为已落盘,但是有乱序数据写入所述ZBlock对应的内存块时,将乱序数据写入ZBlock后,将ZBlock的状态置为待重新落盘状态;
结束状态:当缓存回收机制回收到ZBlock时,判断ZBlock的状态,如果是已落盘,就直接删除所述ZBlock;如果是待重新落盘状态,则将磁盘区中对应的Block数据块更新后,再删除所述ZBlock;
所述缓存回收机制为:当缓存中剩余空间不足以分配新的时序数据块时,触发缓存回收,基于时间段回收预定数量的古老的ZBlock,在回收ZBlock之前,判断ZBlock状态,对于处于不可写状态或者待重新落盘状态的ZBlock,将所述ZBlock对应时序内存块中时序数据落盘后,回收所述ZBlock。
4.根据权利要求3所述的时序数据存储引擎的乱序处理方法,其特征在于,所述乱序数据包括:
内存乱序数据,所述内存乱序数据为乱序数据的时间戳对应的ZBlock还存在于内存区中;
磁盘乱序数据,所述磁盘乱序数据为乱序数据的时间戳对应的ZBlock已经不在内存区中,而是存在于对应磁盘区的某个Block块;
对于内存乱序数据,执行如下:
分析其时间戳对应的ZBlock状态;
当ZBlock的状态为正在写入时,直接将乱序数据写入到预留的乱序空间中;
当ZBlock的状态为不可写时,先将ZBlock的状态置为临时写,再将乱序数据写入到预留的乱序空间中,最后将ZBlock的状态置为不可写;
当ZBlock的状态为已落盘时,将乱序数据写入到预留的乱序空间中,将ZBlock的状态置为待重新落盘状态;
对磁盘乱序数据,直接丢提所述磁盘乱序数据。
5.根据权利要求3所述的时序数据存储引擎的乱序处理方法,其特征在于,所述时序内存块为64K,所述乱序内存块为1K,每个ZBlock分配有一个对应的时序内存块;
时序内存块可以存放的时序记录数量blockRows为:
Figure FDA0004071902160000041
时序内存块中预留n个空间乱序空间,其中
Figure FDA0004071902160000042
时序内存块中顺序空间用于存放顺序数据,顺序数据指插入ZBlock时时序数据的时间戳大于ZBlock已存储的所有时序数据的时间戳,顺序数据的预留空间为:
blockRows-n
基于自适应方法计算乱序数据概率,包括如下步骤:
在缓存回收ZBlock时,提取出当前ZBlock含有的乱序数据的比例,如果ZBlock中乱序数据个数为0,则与下一个ZBlock一起统计比例;设定提取出的比例顺序为R1、R2、R3……Rn,根据乱序数据的采集数值重新计算乱序数据概率的数值;
第i次计算出的disorderRatio的值为Di:
Figure FDA0004071902160000051
其中,乱序数据的比例=乱序数据个数/ZBlock存储的数据总量。
6.一种时序数据存储引擎的乱序处理系统,其特征在于,所述存储引擎内包括内存区和磁盘区,所述时序数据包括顺序数据和乱序数据,所述系统用于执行如权利要求1-5任一项所述的时序数据存储引擎的乱序处理方法,所述系统包括配置模块和写入模块;
所述配置模块用于执行如下:
在内存区中配置有多个不同ZdataPoint对象,每个ZdataPoint对象中包含有多个ZBlock,每个ZBlock用于调控一段时间内时序数据的存储,ZBlock之间对应的时间段没有交叉;
在内存区分配固定大小的连续内存区作为缓存,在缓存内划分有用于存储时序数据的时序内存块和用于存储乱序数据的乱序内存块,所述时序内存块的内存空间大于所述乱序内存块的内存空间,并基于乱序数据概率、在时序内存块中预留用于存放顺序数据的顺序空间以及用于存放乱序数据的乱序空间;
所述写入模块用于执行如下:
对于采集点采集的时序数据,基于采集点来源将时序数据划分至对应的ZdataPoint对象中,申请一个ZBlock、通过所述ZBlock将时序数据写入与所述ZBlock对应的时序内存块;
对于处于已写满状态的ZBlock,通过落盘线程将所述ZBlock对应时序内存块中的时序数据落盘至磁盘区,落盘成功后,在文件索引部追加所述时序数据的信息记录;
其中,所述写入模块遵循如下原则:
将顺序数据写入顺序内存块,将乱序数据写入乱序内存块;
如果当前乱序内存块已写满,新产生的乱序数据为当前ZBlock对应时间段内的,通过ZBlock申请一个乱序内存块,将新产生的乱序数据写入所述乱序内存块;
如果当前顺序内存块已写满,申请一个新的ZBlock、通过所述新的ZBlock将时序数据写入与所述新的ZBlock对应的新的时序内存块;
如果当前缓存已写满,基于预配置的缓存回收机制,回收预定数量的ZBlock,通过回收预定数量的ZBlock,删除所述ZBlock、并释放对应的时序内存块。
7.根据权利要求6所述的时序数据存储引擎的乱序处理系统,其特征在于,在内存区中,ZBlock按照时间段的顺序依次排序,形成ZBlock数组。
8.根据权利要求6所述的时序数据存储引擎的乱序处理系统,其特征在于,所述ZBlock对应有八种状态,分别为:
初始状态:ZBlock刚创建时的状态;
正在写入状态:ZBlock对应的顺序内存空间尚未用完时;
不可写状态:ZBlock对应的顺序内存空间用尽时;
临时写状态:当ZBlock状态为不可写状态、但是存在乱序数据需要写入所述ZBlock对应的时序内存块时,先将所述ZBlock状态置为临时写状态,乱序数据写入完成后,ZBlock状态重新置为不可写状态;
正在落盘状态:落盘线程开始处理ZBlock时,先将ZBlock的状态置为正在落盘状态,等落盘线程处理完成后,将所述ZBlock的状态置为已落盘状态;
已落盘状态:落盘线程将ZBlock中的时序数据写入磁盘后,更新ZBlock的状态为已落盘状态;
待重新落盘状态:当ZBlock状态为已落盘,但是有乱序数据写入所述ZBlock对应的内存块时,将乱序数据写入ZBlock后,将ZBlock的状态置为待重新落盘状态;
结束状态:当缓存回收机制回收到ZBlock时,判断ZBlock的状态,如果是已落盘,就直接删除所述ZBlock;如果是待重新落盘状态,则将磁盘区中对应的Block数据块更新后,再删除所述ZBlock;
所述缓存回收机制为:当缓存中剩余空间不足以分配新的时序数据块时,触发缓存回收,基于时间段回收预定数量的古老的ZBlock,在回收ZBlock之前,判断ZBlock状态,对于处于不可写状态或者待重新落盘状态的ZBlock,将所述ZBlock对应时序内存块中时序数据落盘后,回收所述ZBlock。
9.根据权利要求8所述的时序数据存储引擎的乱序处理系统,其特征在于,所述乱序数据包括:
内存乱序数据,所述内存乱序数据为乱序数据的时间戳对应的ZBlock还存在于内存区中;
磁盘乱序数据,所述磁盘乱序数据为乱序数据的时间戳对应的ZBlock已经不在内存区中,而是存在于对应磁盘区的某个Block块;
对于内存乱序数据,所述写入模块用于执行如下:
分析其时间戳对应的ZBlock状态;
当ZBlock的状态为正在写入时,直接将乱序数据写入到预留的乱序空间中;
当ZBlock的状态为不可写时,先将ZBlock的状态置为临时写,再将乱序数据写入到预留的乱序空间中,最后将ZBlock的状态置为不可写;
当ZBlock的状态为已落盘时,将乱序数据写入到预留的乱序空间中,将ZBlock的状态置为待重新落盘状态;
对磁盘乱序数据,所述写入模块用于执行如下:直接丢提所述磁盘乱序数据。
10.根据权利要求8所述的时序数据存储引擎的乱序处理系统,其特征在于,所述时序内存块为64K,所述乱序内存块为1K,每个ZBlock分配有一个对应的时序内存块;
时序内存块可以存放的时序记录数量blockRows为:
Figure FDA0004071902160000081
时序内存块中预留n个空间乱序空间,其中
Figure FDA0004071902160000082
时序内存块中顺序空间用于存放顺序数据,顺序数据指插入ZBlock时时序数据的时间戳大于ZBlock已存储的所有时序数据的时间戳,顺序数据的预留空间为:
blockRows-n
所述配置模块用于基于自适应方法计算乱序数据概率,包括如下步骤:
在缓存回收ZBlock时,提取出当前ZBlock含有的乱序数据的比例,如果ZBlock中乱序数据个数为0,则与下一个ZBlock一起统计比例;设定提取出的比例顺序为R1、R2、R3……Rn,根据乱序数据的采集数值重新计算乱序数据概率的数值;
第i次计算出的disorderRatio的值为Di:
Figure FDA0004071902160000091
其中,乱序数据的比例=乱序数据个数/ZBlock存储的数据总量。
CN202310096745.1A 2023-02-07 2023-02-07 时序数据存储引擎的乱序处理方法及系统 Pending CN116166715A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310096745.1A CN116166715A (zh) 2023-02-07 2023-02-07 时序数据存储引擎的乱序处理方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310096745.1A CN116166715A (zh) 2023-02-07 2023-02-07 时序数据存储引擎的乱序处理方法及系统

Publications (1)

Publication Number Publication Date
CN116166715A true CN116166715A (zh) 2023-05-26

Family

ID=86412758

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310096745.1A Pending CN116166715A (zh) 2023-02-07 2023-02-07 时序数据存储引擎的乱序处理方法及系统

Country Status (1)

Country Link
CN (1) CN116166715A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117149081A (zh) * 2023-09-07 2023-12-01 武汉麓谷科技有限公司 一种基于zns固态硬盘的时序数据库存储引擎构建方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117149081A (zh) * 2023-09-07 2023-12-01 武汉麓谷科技有限公司 一种基于zns固态硬盘的时序数据库存储引擎构建方法
CN117149081B (zh) * 2023-09-07 2024-02-06 武汉麓谷科技有限公司 一种基于zns固态硬盘的时序数据库存储引擎构建方法

Similar Documents

Publication Publication Date Title
CN109164980B (zh) 一种时序数据的聚合优化处理方法
CN110806986B (zh) 提高网络芯片报文存储效率的方法、设备及存储介质
US6449625B1 (en) Use of a two-way stack approach to optimize flash memory management for embedded database systems
US7047386B1 (en) Dynamic partitioning of a reusable resource
KR100781515B1 (ko) 트랜잭션 처리를 위한 로그 정보 관리 시스템 및 방법
CN106383666B (zh) 一种数据存储方法及装置
CN104699422A (zh) 缓存数据的确定方法及装置
CN116166715A (zh) 时序数据存储引擎的乱序处理方法及系统
CN105204783B (zh) 一种基于数据生存期的固态盘垃圾回收方法
US20230394307A1 (en) Data caching method and apparatus for multiple concurrent deep learning training tasks
CN111930301A (zh) 垃圾回收优化方法、装置、存储介质及电子设备
CN113377292A (zh) 一种单机存储引擎
CN115408149A (zh) 一种时序存储引擎内存设计及分配方法及装置
CN104778100A (zh) 一种安全备份数据的方法
CN102073690A (zh) 一种支持历史Key信息的内存数据库
CN102169464B (zh) 一种用于非易失性存储器的缓存方法、装置及智能卡
CN106503084A (zh) 一种面向云数据库的非结构化数据的存储与管理方法
EP4174675A1 (en) On-board data storage method and system
US11789639B1 (en) Method and apparatus for screening TB-scale incremental data
CN113360551B (zh) 一种靶场中时序数据的存储与快速统计方法及系统
EP3866021B1 (en) Method for performance optimization of object grouping schema in a network key-value storage device using adaptive regression, and non-transitory computer readable medium and system using the same
CN112181973B (zh) 一种时序数据的存储方法
US10503651B2 (en) Media cache band cleaning
CN114556283A (zh) 一种数据写入、一致性检查和读取的方法及装置
CN117312267B (zh) 一种基于peloton数据库的行级垃圾回收机制

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