搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
我家自动化
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Sqlserver表数据误删除后的恢复
2
Vision Pro开发实践(一)_vision pro 开发
3
Mysql、SqlServer、Oracle、DB2关系型数据库的区别_oracle mysql sqlserver db2 数据类型
4
Autodesk AutoCAD 2025 for Mac:强大的二维三维绘图与设计工具_solid works2025
5
Linux【多线程】之线程概念&线程特点&线程控制_linux下多线程的创建和控制
6
WPF_ComboBox的MVVM绑定(二)_wpfmvvm combox双向绑定
7
鼠标右键新建excel文件,打开失败。报错“Excel无法打开文件新建 XLSX 工作表.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配”_excel无法打开新建工作表,因为文件格式
8
【xilinx primitives 】01 IBUFDS and IBUFGDS_vivado ibufds和ibufgds
9
【Pytorch】Pytorch Dataloader加速_dataloader 怎么加速
10
Mallet:一款针对任意协议的安全拦截代理工具_mallet 协议解析
当前位置:
article
> 正文
IoTDB使用学习笔记(四)_iotdb inserttable
作者:我家自动化 | 2024-08-07 14:55:46
赞
踩
iotdb inserttable
本次笔记记录对TsFile的写入功能的学习,TsFile层面的类是TsFileWriter,用户通过该类提供的接口完成数据的写入
注册时序,录入元数据
在TsFileWriter中,每个设备device都对应一个MeasurementSchemaGroup,记录了该设备下每个传感器的时序元数据,用户在写入数据之前,需要先调用TsFileWriter的register_timeseries()函数将时间序列的设备名、传感器名、数据类型、编码类型、压缩类型保存到schema_中。
写入数据
数据的写入会主要用到TsFileWriter、ChunkWriter和PageWriter这三个类。
流程
TsFileWriter写入数据
写入方式
TsRecord方式:TsRecord指的是时间序列数据库中存储的时间序列数据记录。时间序列是一系列按时间顺序排列的数据点,通常用于表示随时间变化的指标或度量值,比如气温、股价、传感器数据等。TsRecord包含了时间戳和对应的数值,以及可能的其他附加信息,用于描述某一时刻或时间段内的具体数值。
调用do_check_schema()函数,检查要写入的TsRecord对象的元数据是否符合之前注册的元数据。(目前只是检查名字是否存在,而不检查数据类型是否正确。)不过它同时会对chunk_writer进行初始化。(每次write都会先check)
一个Record对象可能包含同一时间戳下的多个measurement,在do_check_schema()函数的执行过程中,还会为每个measurement创建各自的chunk_writer并初始化。
遍历每个measurement,使用对应的chunk_writer将时间戳和它的value写入(调用write_point()函数,内部又调用ChunkWriter的write()函数)。
measurement:在时间序列数据库中,测量是指对某个特定事物或现象进行观测或采集的数据。可以将测量理解为在一段时间内对某个特定指标或变量进行的连续观测所得到的数据序列。比如,气温、湿度、电流、压力等都可以是测量的对象,其对应的数据序列就是测量数据。在某些时间序列数据库中,测量还可以包括有关数据的元信息,比如测量的单位、描述等。
Tablet方式:Tablet是数据库系统中的一个概念,通常用于表示数据的逻辑组织单元。在一些数据库系统中,特别是分布式数据库或列式存储的数据库中,数据被组织成不同的Tablet,每个Tablet负责存储和处理一部分数据。Tablet可以看作是数据的分片,有助于提高数据库的并发处理能力和扩展性。
调用do_check_schema()函数,检查要写入的Tablet对象的元数据是否符合之前注册的元数据。不过它同时会对chunk_writer进行初始化。(每次write都会先check)
一个Tablet对象包含同一时间戳下的多个measurement,在do_check_schema()函数的执行过程中,还会为每个measurement创建各自的chunk_writer并初始化。
遍历每个measurement,使用对应的chunk_writer将该列物理量对应的时间戳数组和value数组写入(调用write_column()函数)
循环检测bitmap的每行是否为空,若不为空就使用ChunkWriter的write()函数写入一个point。
ChunkWriter写入k-v键值对
识别value的数据类型并检查是否与元数据一致。
调用PageWriter的write()函数将键值对写入。
检查当前Page是否写满了,如果是的,就执行d。
将当前PageWriter的statistic合并到ChunkWriter的statistic,然后调用PageWriter的write_to_chunk()函数,将这批数据先封装成一页PageData(同时进行压缩),依次把PageHeader、PageData写入Chunk里面。
PageWriter写入k-v键值对
识别value的数据类型并检查是否与元数据一致。
对timestamp编码,写入time_out_stream_;对value编码,写入value_out_stream_;然后更新statistic。
数据刷盘
目的:在写入过程中,TsFile的部分数据可能会暂存在内存中。当写入缓冲区已满或达到一定条件时,为了持久化数据,需要进行刷盘操作,将缓存中的数据写入磁盘。在计算机组成原理也曾学习过类似的概念。
数据的刷盘会主要用到TsFileWriter、TsFileIOWriter和write_file_这三个类。
数据刷盘并不是真的刷到磁盘,而是通过linux的write()系统调用,将数据刷到操作系统的缓存中。
TsFileWriter执行flush()
TsFileIOWriter执行start_file()
TsFileIOWriter执行start_flush_chunk_group()
TsFileWriter执行flush_chunk_group()
TsFileIOWriter执行end_flush_chunk_group()
结束写入
当所有的时间序列数据都被写入到Tsfile文件中后,需要进行结束写入操作。
结束写入主要用到TsFileWriter、TsFileIOWriter和write_file_这三个类。
根据内存中缓存的元数据,生成TsFileMetadata并追加到文件尾部,最后关闭文件。
建立索引
生成TsFileMetadata的过程中比较重要的一步是建立元数据索引 (MetadataIndex) 树。元数据索引采用树形结构进行设计的目的是在设备数或者传感器数量过大时,可以不用一次读取所有的TimeseriesIndex,只需要根据所读取的传感器定位对应的节点,从而减少 I/O,加快查询速度。
索引树的样子:索引树本身也是拆成两部分,每个device的所有measurement的chunk构成一个索引树,然后所有设备构成一个索引树,其中设备索引树的叶子节点指向该叶子对应的设备的measurement索引树的树根。
在前面写数据部分的时候,已经记录了每个chunk的基本信息,这个信息记录在chunk_group_meta_list_ 里面,它是两层Map(std::map,key有序),第一层是设备,第二层是该设备内的测点,大致的样子如图:
TSMIterator 这个类是用来迭代chunk_group_meta_list_的辅助类,如图中红色箭头所示,迭代会顺序遍历每一个chunk,然后将每个物理量的ChunkMeta收集到一起,整理成TimeseriesIndex。
心得体会
在学习完TsFile的文件结构之后,我清楚了chunk,page等概念,再学习写入就会相对轻松一些。这短时间的学习我了解到Tsfile是一种面向时序数据定义的一种文件格式,其提供了一套将时序数据转换为字节的规则,在减少磁盘占用的前提下,有效地提升了数据查询分析的效率,能够为上层应用提供良好的数据存储和查询支持。它的目标场景是管理一个或多个设备的时序数据,写入原理则是基于列式存储的设计思想,通过数据分段、压缩编码和索引等技术来提高存储效率和查询性能。
写入过程又涉及到了许多新的类和函数和一些新的数据库概念,特别是数据刷盘部分的流程细节我查阅了许多资料去试图理解,但还是没能成功,只好先简略记下流程。在天谋科技的实习期也临近结束了,如果之后还有机会与IoTDB打交道,希望能有机会进一步学习,十分荣幸能接触到清华大学的优秀同学们共同努力开发的前沿数据库技术。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/我家自动化/article/detail/943079
推荐阅读
article
IoTDB
入门教程
基础篇②
—
—
IoTDB
企业
版比
开源
版本
值
在
哪?...
IoTDB
入门教程
基础篇②
—
—
IoTDB
企业
版比
开源
版本
值
在
哪?
IoTDB
入门教程
基础篇②
—
—
IoTDB
企业
...
赞
踩
article
IoTDB
入门教程
基础篇⑪——
Data
导入
导出
工具...
IoTDB
入门教程
基础篇⑪——
Data
导入
导出
工具
IoTDB
入门教程
基础篇⑪——
Data
导入
导出
工具 ...
赞
踩
article
IoTDB
入门教程
基础篇⑧——
数据库
管理工具
|
IDEA
连接
IoTDB
_
iotdb
jbd...
IoTDB
入门教程
⑧——
数据库
管理工具
|
IDEA
连接
IoTDB
_
iotdb
jbdc
iotdb
jbdc
...
赞
踩
article
IoTDB
可
实现
的
基本
操作 :
数据
导入
、
基本
查询
、聚合
查询
| 小白教程文档(三)..._如何将...
前言上篇教程介绍了 Apache
IoTDB
的
基本
架构、可部署形态、安装启动方法及
数据
模型,了解了这些
IoTDB
的...
赞
踩
article
IoTDB
入门教程 基础篇④——
数据库
用户
管理
和
用户
权限
管理
_
iotdb
修改密码...
IoTDB
入门教程④——
数据库
用户
管理
和
用户
权限
管理
_
iotdb
修改密码
iotdb
修改密码 ...
赞
踩
article
IoTDB
入门教程
基础篇⑩——
CSV
导入
导出
工具_
iotdb
怎么
导入
数据
...
IoTDB
入门教程
基础篇⑩——
CSV
导入
导出
工具_
iotdb
怎么
导入
数据
iotdb
怎么
导入
数据
...
赞
踩
article
IoTDB
入门教程
基础篇⑤——
数据模型
和基础
概念
_
iotdb
数据类型
精度...
本文介绍了
IoTDB
的
数据模型
,包括关系型数据库MySQL、时序数据库TDengine和InfluxDB的对比,以及基础...
赞
踩
article
IoTDB
入门教程
基础篇⑨——
TsFile
导入
导出
工具_
iotdb
教程...
IoTDB
入门教程
基础篇⑨——
TsFile
导入
导出
工具_
iotdb
教程
iotdb
教程 ...
赞
踩
article
IoTDB
可
实现
的
基本操作
——
数据
写入、
删除
、
导出
、元
数据
管理、时区
设置
| 小白教程文档(四...
前言上篇教程介绍了 Apache
IoTDB
处理时序
数据
时,能够
实现
的部分具体功能和具体的操作命令,包括
数据
导入、基本...
赞
踩
article
Apache
-
iotdb
物联网
数据库
的
安装
及
使用
_
apache
iotdb
...
Apache
-
iotdb
物联网
数据库
的
安装
及
使用
_
apache
iotdb
apache
iotdb
...
赞
踩
article
时序
数据库
-3-[
IoTDB
]
的
安装
与
使用
_
iotdb
数据库
...
(1)关闭Hyper-v控制面板-> 程序 -> 启用或关闭Windows功能 -> 勾选Hyper-v。启用Hyper...
赞
踩
article
【
apache
iotDB
】
Apache
IoTDB
linux
安装
教程10分钟学会_
iotdb
l...
Apache
IoTDB
采用轻量式架构,具有高性能和丰富的功能,并与
Apache
Hadoop、Spark和Flink...
赞
踩
article
IoTDB
入门教程
基础篇③——基于
Linux
系统
快速
安装
启动
和上手_
iotdb
启动
...
IoTDB
入门教程
③——基于
Linux
系统
快速
安装
启动
和上手_
iotdb
启动
iotdb
启动
...
赞
踩
article
IoTDB
入门
教程
——导读_
iotdb
入门
...
本文档介绍了Apache
IoTDB
,一款用于处理物联网时序数据的软件系统。内容包括基础概念、安装教程、用户管理、SQL操...
赞
踩
article
IoTDB
入门教程 基础篇⑥——
数据
库
SQL
操作 |
数据
库
管理和
数据
读写_
iotdb
sql
...
本文介绍了
IoTDB
的基础
数据
库
管理操作,包括创建、查询、删除
数据
库
,以及
数据
的读写,如查询现有
数据
、插入新
数据
、更新和...
赞
踩
article
您有一份 2022
Apache
IoTDB
年终
总结
待查收!
_
iotdb
总结
...
IoTDB
时序数据库。
IoTDB
应用案例。
_
iotdb
总结
iotdb
总结
&...
赞
踩
article
Apache
IoTDB
2021
年度
总结:在持续
开源
的路上
勇往直前
...
Apache
IoTDB
2021
年度
总结1.版本演进在过去的
2021
年里,社区正式推出了 0.12 系列版本,并在 0....
赞
踩
article
物联网
数据
库
IoTDB
—— 从
协议
到
数据
...
首先,先允许我,祝各位读者小可爱们,节日快乐。在这个系列之前的文章里,我们介绍了Iotdb的LSM,以及Iot中的最佳实...
赞
踩
article
社区
新手小伙伴测评第二弹 | 使用
ChatGPT
可以帮助完成
IoTDB
的
写入和
查询
吗?......
作者介绍大家好,我是 Z 牛牛,目前是新加入
社区
、刚刚接触
IoTDB
的
小白一枚,学习阶段希望跟大家分享一些过程中
的
心...
赞
踩
article
2023
IoTDB
用户大会:天谋科技
Christofer
Dutz
《如何用
Apache
PLC...
12 月 3 日,2023
IoTDB
用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来
工业
...
赞
踩
相关标签
iotdb
IoTDB
时序数据库
TimechoDB
企业版本
开源版本
导入导出
同步
CSV
SQL
数据库
intellij-idea
驱动
python
apache
开发语言
权限管理
用户管理
root
导入
导出
备份