一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种时序存储引擎内存设计及分配方法及装置与流程

2022-11-30 10:13:33 来源:中国专利 TAG:
1.本发明涉及数据库管理
技术领域
:,具体提供一种时序存储引擎内存设计及分配方法及装置。
背景技术
::2.时序数据是随时间不断产生的一系列数据,简单来说,就是带时间戳的数据。时序数据库(timeseriesdatabase,tsdb)是优化用于摄取、处理和存储时间戳数据的数据库,专门用于存储和处理时间序列数据。时序数据的主要特点是写多读少,要求支持秒级和毫秒级甚至纳秒级的高频写入,查询通常是多维聚合查询,对查询的延迟要求比较高。3.时序数据可能包括来自服务器和应用程序的指标、来自物联网传感器的读数、网站或应用程序上的用户交互或金融市场上的交易活动。来自同一设备的时序数据的类型是一致的。4.目前主流的时序数据库,存储数据的内存块大小都是固定的,由于时序数据的采集频率和数据类型都不一致,固定的内存块大小无法满足时序数据的特点。技术实现要素:5.本发明是针对上述现有技术的不足,提供一种实用性强的时序存储引擎内存设计及分配方法。6.本发明进一步的技术任务是提供一种设计合理,安全适用的时序存储引擎内存设计及分配装置。7.本发明解决其技术问题所采用的技术方案是:8.一种时序存储引擎内存设计及分配方法,时序数据库存储引擎对外提供的存储数据的最小单元是objecttable,一个所述obejcttable在内存中有多个block用于存储一个时间段内的时序数据,当一个所述block写满或者时间跨度超过设定阈值时,需要改变当前block的状态为不可写,然后创建新的block;9.创建所述block时,需要根据计算得到的block大小申请对应的内存,每次所述block需要写入数据时,从申请的内存中申请固定大小的buffer,当所述block刷盘完成后申请的内存放到回收队列中等待回收。10.进一步的,对于写入的时序数据,使用存储内部的编解码策略,保持每条数据长度固定,每条数据的头部增加bitmap记录值为空的列;11.一条数据由多个列或属性组成,在时序数据场景中,第一个属性为时间戳,第二个属性是一个bitmap,记录值为空的列,之后的属性都是value。12.进一步的,所述block的创建是在数据写入时,首先计算得到一条数据的长度valuelength,根据所述valuelength计算出所述block存储数据需要的大小,并在block创建时申请对应的内存空间,其中一条数据的计算方式为:13.valuelength=timestamp.size() bitmap.size() columnvalue.size()。14.进一步的,根据元数据中的时间跨度阈值及写入数据的时间间隔,估算得到block中需要存储的数据条数,根据需要存储的数据条数和数据大小,计算得到block需要分配的内存大小。15.进一步的,校验所述内存大小是否在设置的内存阈值之间,超出时,需要将申请的内存大小置为最大或者最小内存阈值,申请连续内存空间的内存。16.进一步的,当申请的内存大小与需要的内存大小不一致时,根据写入数据的长度,重新计算所述block可以存储的数据量。17.进一步的,申请的内存放入链表中进行管理,写入数据时,每次从申请的内存中分配一定大小的buffer,并记录当前数据写入的偏移量,当前buffer存满后,将从申请的内存中分配一个新的buffer。18.进一步的,buffer中只用来存储顺序数据,对于乱序数据,当需要向所述block中插入乱序数据时,每次申请一个最小的page页,这个空间不算入block空间中;19.当一个block写满或者需要使用新的时间段时,转为immutableblock,此时所述block不能写入数据,放到刷盘队列中等待落盘;20.当数据持久化完成后,block申请的内存可以回收,将所述block申请的内存放入回收队列中等待回收,在回收队列中的数据在block中依然可以读取。21.一种时序存储引擎内存设计及分配装置,包括:至少一个存储器和至少一个处理器;22.所述至少一个存储器,用于存储机器可读程序;23.所述至少一个处理器,用于调用所述机器可读程序,执行一种时序存储引擎内存设计及分配方法。24.本发明的一种时序存储引擎内存设计及分配方法及装置和现有技术相比,具有以下突出的有益效果:25.本发明提升了时序数据库内存的利用率,方便数据的写入和查询,防止出现数据写入异常的场景出现,使得计算资源、存储资源可以根据业务场景进行有效的规划。附图说明26.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。27.附图1是一种时序存储引擎内存设计及分配方法中objecttable示意图;28.附图2是一种时序存储引擎内存设计及分配方法中valuelength的示意图。具体实施方式29.为了使本
技术领域
:的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。30.下面给出一个最佳实施例:31.如图1所示,本实施例中的一种时序存储引擎内存设计及分配方法,其特征在于,时序数据库存储引擎对外提供的存储数据的最小单元是objecttable,一个所述obejcttable在内存中有多个block用于存储一个时间段内的时序数据,当一个所述block写满或者时间跨度超过设定阈值时,需要改变当前block的状态为不可写,然后创建新的block;32.创建所述block时,需要根据计算得到的block大小申请对应的内存,每次所述block需要写入数据时,从申请的内存中申请固定大小的buffer,当所述block刷盘完成后申请的内存放到回收队列中等待回收。33.对于写入的时序数据,使用存储内部的编解码策略,保持每条数据长度固定,每条数据的头部增加bitmap记录值为空的列;34.如图2所示,一条数据由多个列或属性组成,在时序数据场景中,第一个属性为时间戳,第二个属性是一个bitmap,记录值为空的列,之后的属性都是value。35.block的创建是在数据写入时,首先计算得到一条数据的长度valuelength,根据所述valuelength计算出所述block存储数据需要的大小,并在block创建时申请对应的内存空间,其中一条数据的计算方式为:36.valuelength=timestamp.size() bitmap.size() columnvalue.size()。37.根据元数据中的时间跨度阈值及写入数据的时间间隔,估算得到block中需要存储的数据条数,根据需要存储的数据条数和数据大小,计算得到block需要分配的内存大小。38.校验所述内存大小是否在设置的内存阈值之间,超出时,需要将申请的内存大小置为最大或者最小内存阈值,申请连续内存空间的内存。39.当申请的内存大小与需要的内存大小不一致时,根据写入数据的长度,重新计算所述block可以存储的数据量。40.申请的内存放入链表中进行管理,写入数据时,每次从申请的内存中分配一定大小的buffer,并记录当前数据写入的偏移量,当前buffer存满后,将从申请的内存中分配一个新的buffer。41.buffer中只用来存储顺序数据,对于乱序数据,当需要向所述block中插入乱序数据时,每次申请一个最小的page页,这个空间不算入block空间中;42.当一个block写满或者需要使用新的时间段时,转为immutableblock,此时所述block不能写入数据,放到刷盘队列中等待落盘;43.当数据持久化完成后,block申请的内存可以回收,将所述block申请的内存放入回收队列中等待回收,在回收队列中的数据在block中依然可以读取。44.例如:45.当向新的obejcttable写入一条数据时,需要创建一个新的block用于存储数据,首先计算该数据的长度valuelength,即值前缀所占扩建与所有列值所占空间的和:46.valuelength=timestamp.size() bitmap.size() columnvalue.size()47.然后根据设定的block的时间跨度阈值及数据采集的时间跨度,计算得到该block中需要存储的数据量valuenum。则需要申请的内存大小为:48.blocksize=valuelength*valuenum49.blocksize不能小于可以申请的最小内存阈值,默认为8kb,不能大于最大可以申请的最大内存阈值,默认为96mb,否则将blocksize设置为对应阈值的大小。然后申请blocksize大小的一段连续的内存空间,由于存在内存不足的情况,申请的内存大小allocatesize可能小于blocksize,当不一致时,需要根据实际分配的内存大小allocatesize重新计算当前block能够写入的数据量valuenum。50.将分配好的内存大小划分为默认8kb大小的buffer,由链表进行管理,当block内存不足时,每次分配一个bufferr大小的内存块,并记录当前内存块的偏移量。51.buffer只用来存储顺序数据(时间戳递增的数据),对于乱序数据,block中有专门的对象存储,当需要向block中插入乱序数据时,每次申请一个最小的page页,这个空间不算入block空间中。52.读取数据时,如果查询的是乱序数据,需要加锁,对乱序数据进行排序。53.当该block已满或者存储的value的最大时间戳已超过时间跨度阈值,则将block状态置为不可写状态,等待刷盘,当落盘以后,将该block申请的内存放入回收队列中等待回收,在回收队列中的数据在block中依然可以读取的。54.基于上述方法,本实施例中的一种时序存储引擎内存设计及分配装置,包括:至少一个存储器和至少一个处理器;55.所述至少一个存储器,用于存储机器可读程序;56.所述至少一个处理器,用于调用所述机器可读程序,执行一种时序存储引擎内存设计及分配方法。57.上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种时序存储引擎内存设计及分配方法及装置权利要求书的且任何所述
技术领域
:普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。58.尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献