(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202210484342.X
(22)申请日 2022.05.06
(71)申请人 山东浪潮科 学研究院有限公司
地址 250100 山东省济南市高新浪潮路
1036号S02号楼
(72)发明人 梁波 贾德星
(74)专利代理 机构 济南信达专利事务所有限公
司 37100
专利代理师 孙园园
(51)Int.Cl.
G06F 16/242(2019.01)
G06F 16/2455(2019.01)
G06F 16/172(2019.01)
G06F 16/2458(2019.01)
(54)发明名称
一种时序数据存 储和查询方法
(57)摘要
本发明公开了一种时序数据存储和查询方
法, 属于数据库技术领域, 本发明要解决的技术
问题为如何实现海量时序数据的高效存储和快
速入库, 同时提升查询操作的整体性能, 采用的
技术方案为: 该方法具体如下: 存储: 将 存储方式
分为内存存储和文件存储, 新写入的时序数据先
进入内存存储中暂存, 再落盘到文件存储中存
储; 查询: 将查询方式分为内存存储的数据查询
及文件存储的数据查询。
权利要求书4页 说明书10页 附图1页
CN 114896268 A
2022.08.12
CN 114896268 A
1.一种时序数据存 储和查询方法, 其特 征在于, 该 方法具体如下:
存储: 将存储方式分为内存存储和文件存储, 新写入的时序数据先进入内存存储中暂
存, 再落盘到文件 存储中存储;
查询: 将查询方式分为内存 存储的数据查询及文件 存储的数据查询。
2.根据权利要求1所述的时序数据存 储和查询方法, 其特 征在于, 存 储具体如下:
使用Meml ist数组和Fi lelist数组管理所有的时序数据;
当有新的时序数据插 入时, 先进入Meml ist数组中, 插 入操作完成;
有一个或多个后台线程将Memlist数组中已经规整完成的时序数据落盘形成文件, 落
盘后的时序数据由Fi lelist数组继续管理, Meml ist数组不再 管理。
3.根据权利要求2所述的时序数据存储和查询方法, 其特征在于, Memlist数组用于管
理在内存存储中的时序数据; Memlist数 组的空间容量在程序配置文件中定义; 在程序启动
时Memlist数组已经初始化完毕, 在程序执 行过程中, Meml ist数组的长度不会变;
Memlist数组存储的是MetricVector对 象的指针, MetricVector对 象存储特定数量的
时序数据, 数量阈值可配置; MetricVector对象中有一个Blocks数组, Blocks数组中存储
Block内存块的指针; Blocks数组中包含若干Block, 每个Block内存块中顺序存储插入的时
序数据Metric,每个时序数据Metr ic的结构为时间戳和具体的value值, 通过追加的方式将
时序数据Metric写入到Block内存块中, 读操作时通过时序数据Metric的固定长度特性解
析出追加的每条记录; 其中, Bl ock内存块的大小是 可配置;
Metric时序数据的结构还包括curOffset变量, curOffset变量用于计数正在插入的
Block内存块当前已经存 储的最新的时序数据的位置;
每当Block 内存块中的时序数据存满时, 程序向内存存储中重新申请一个新的Block 内
存块, 将curOffset变量指向新的Block内存块的第一个位置, 并且将新的Block内存块插入
数组Blocks中。
4.根据权利 要求2所述的时序数据存储和查询方法, 其特征在于, Filelist数组用于管
理已经落盘的时序数据; 按照文件生成 的时间顺序依次存储在Filelist数组中, Filelist
数组中存 储的文件 对象包括文件绝对路径、 文件的mi nTS、 maxTS及数据量;
将MetricVector对象中的时序数据按照时间顺序依次写入到文件存储中, 在文件的末
尾增加定长的footer信息, footer信息中包含minTS、 maxTS、 一个metric占用空间大小、
metric记录数量以及校验码。
5.根据权利要求1所述的时序 数据存储和查询方法, 其特征在于, 内存存储的数据查询
具体如下:
S1、 定位se ekTS所在的Met ricVector;
S2、 定位se ekTS在Met ricVector的Bl ock内存块;
S3、 定位se ekTS在Block内存块的位置;
S4、 返回位置: 返回Bl ock内存块中第i ndexOpt条记录的位置 。
6.根据权利要求5所述的时序数据存储和查询方法, 其特征在于, 定位seekTS所在的
MetricVector具体如下:
S101、 设Memlist数组长度为L,Memlist数组中存储的时序数据最小时间戳为minTS, 最
大时间戳为maxTS; 待查询的时间点为seekTS, 查询seekTS存在于Memlist数组中第几个权 利 要 求 书 1/4 页
2
CN 114896268 A
2MetricVector中, 使用如下公式:
S102、 计算出i ndex后, 判断i ndex是否等于 ‑1:
①、 若是, 则表示se ekTS的数据不在内存中;
②、 若否, 则执 行步骤S10 3;
S103、 判断seekTS是否在Memlist[index]这个MetricVector对象的minTS和maxTS区间
中:
①、 若是, 则跳转至步骤S10 5;
②、 若否, 则执 行步骤S104;
S104、 进行一次i ndex加一或减一的微调, 公式如下:
其中, minTS和maxTS指Memlist[index]这个MetricVector对象中时序数据的最小时间
戳和最大时间戳; i ndexOpt指微调后的i ndex;
S105、 确定继续定位的Met ricVector对象。
7.根据权利要求5所述的时序数据存储和查询方法, 其特征在于, 定位seekTS在
MetricVector的Bl ock内存块具体如下:
S201、 设MetricVector中数组Blocks长度为L,MetricVector中存储的时序数据最小时
间戳为minTS, 最大时间戳为maxTS; 待查询的时间点为seekTS, 查询seekTS 存在于Blocks中
第几个Bl ock中, 使用如下公式:
S202、 计算出index后, 判断seekTS是否在Blocks[index]这个Block的minTS和maxTS区
间中:
①、 若是, 则跳转至步骤S204;
②、 若否, 则执 行步骤S20 3、
S203、 进行一次i ndex加一或减一的微调, 微调公式如下:
其中, minTS和maxTS指Blocks[index]这个B lock中时序数据的最小时间戳和最大时间
戳, indexOpt指微调后的i ndex;
S204、 确定继续定位的Bl ock内存块;
定位seekTS在Block内存块的位置具体如下:
S301、 设Block内存块存储的时序数据的数据量为L,该Block内存块 中存储的时序数据
最小时间戳为minTS、 最大时间戳为maxTS; 待查询的时间点为seekTS, 查询seekTS是Block
中第几条记录, 公式如下:权 利 要 求 书 2/4 页
3
CN 114896268 A
3
专利 一种时序数据存储和查询方法
文档预览
中文文档
16 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共16页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 00:11:32上传分享