我的编程空间,编程开发者的网络收藏夹
学习永远不晚

时序数据库 Apache-IoTDB 源码解析之文件数据块(四)

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

时序数据库 Apache-IoTDB 源码解析之文件数据块(四)

时序数据库 Apache-IoTDB 源码解析之文件数据块(四)

时序数据库 Apache-IoTDB 源码解析之文件格式简介(三)

打一波广告,欢迎大家访问IoTDB 仓库,求一波 Star 。欢迎关注头条号:列炮缓开局,欢迎关注OSCHINA博客

这一章主要想聊一聊:

  1. TsFile的文件概览
  2. TsFile的数据块

TsFile文件概览

文件概览

一个完整的 TsFile 是由图中的几大块组成,图中的数据块与索引块之间使用 1 个字节的分隔符 2 来进行分隔,对于分隔符不做过多解释,校验和保证数据有效性。

1. 识别符(Magic)

现在各种软件五花八门,很多软件都拥有自己的文件格式用来存储数据内容,但当硬盘上文件非常多的时候如何有效的识别是否为自己的文件,确认可以打开呢?经常用 windows 系统的朋友可能会想到用扩展名,但假如文件名丢失了,那我们如何知道这个文件是不是能被程序正确访问呢?

这时候通常会使用一个独有的字符填充在文件开头和结尾,这样程序只要访问 1 个固定长度的字符就知道这个文件是不是自己能正常访问的文件了,当然,TsFile 作为一个数据库文件,肯定需要在这个识别符上精心打造一番,它看起来是这样:

   (decimal)  84 115 70 105 108 101
   (hex)      54 73  46 69  6c  65
   (ASCII)    T  s   F  i   l   e

非常 cool 。

2.文件版本(Version)

再精妙的设计也难免产生一些问题,那么就需要升级,那么文件内容也一样,有时候当你的改动特别大了,就会出现完全不兼容的两个版本,这个很好理解不过多解释。TsFile 中采用了 6 个字节来保存文件版本信息,当前 0.9.x 版本看起来就是这样:

   (decimal)  48  48  48  48  48  50
   (hex)      30  30  30  30  30  32
   (ASCII)    0   0   0   0   0   2

3.数据块

数据块概览

3.1 ChunkGroup

文件的数据块中包含了多个 ChunkGroup ,其中 ChunkGroup 的概念已经在上一章聊过,它代表了设备(逻辑概念上的一个集合),在 IoTDB 中称为 Device。

在实际的文件中,ChunkGroup是由多个 Chunk 和一个 ChunkGroupFooter 组成。其中最后一个 Chunk 的结尾和 ChunkGroupFooter 之间使用 1 个字节的分隔符 0 来做区分,ChunkGroupFooter 没有什么具体作用,不做详细解释。

3.2 Chunk

一个 ChunkGroup 中包含了多个 Chunk,它代表了测点数据(逻辑概念上的某一类数据的集合,如体温数据),在 IoTDB 中称为 Measurement。

在实际文件中 Chunk 是由 ChunkHeader 和多个 Page 组成,并被 1 个字节的分隔符 1 包裹。ChunkHeader中主要保存了当前 Chunk 的数据类型、压缩方式、编码方式、包含的 Pages 占用的字节数等信息。

3.3 Page

一个 Chunk 中包含多个 Page,它是一个数据组织方式,数据大小被限制在 64K 左右。

在实际文件中由 PageHeader 和多个 PageData 组成。

3.4 PageData

一个 Page 中包含了多个 PageData,它包含了两个数组:时间数组和值数组,且这两个数组的下标是对齐的,也就是时间数组中的第一个对应值数组中的第一个。举个例子:

timeArray: [1,2,3,4]
valueArray: ["a", "b", "c", "d"]

在page中就是这样保存的数据,其中 1 代表了时间 1970-01-01 08:00:00 后的 1 毫秒,对应的值就是 "a"。

数据块展示

时间戳 人名 体温 心率
1580950800 王五 36.7 100
1580950911 王五 36.6 90
            POSITION|	CONTENT
            -------- 	-------
                   0|	[magic head] TsFile
                   6|	[version number] 000002
                  // 因为 6个字节的magic + 6个字节的 version 所以 chunkGroup 从 12 开始
|||||||||||||||||||||	[Chunk Group] of wangwu begins at pos 12, ends at pos 253, version:0, num of Chunks:2
                   // 这里展示的是 ChunkHeader 中保存的信息
                  12|	[Chunk] of xinlv, numOfPoints:1, time range:[1580950800,1580950800], tsDataType:INT32, 
                     	[minValue:100,maxValue:100,firstValue:100,lastValue:100,sumValue:100.0]
                    |		[marker] 1      //  chunk 的真正开始是从这个分隔符 1 开始的
                    |		[ChunkHeader]    // header 的数据在上面展示了
                    |		1 pages         //这里保存的具体数据
                    |		time:1580950800; value:100
                   // 下一个 chunk
                 121|	[Chunk] of tiwen, numOfPoints:1, time range:[1580950800,1580950800], tsDataType:FLOAT, 
                     	[minValue:36.7,maxValue:36.7,firstValue:36.7,lastValue:36.7,sumValue:36.70000076293945]
                    |		[marker] 1
                    |		[ChunkHeader]
                    |		1 pages
                    |		time:1580950800; value:36.7
                 230|	[Chunk Group Footer]
                    |		[marker] 0 // chunkFooter 和 chunk 使用 0 作为分隔
                    |		[deviceID] wangwu
                    |		[dataSize] 218
                    |		[num of chunks] 2
|||||||||||||||||||||	[Chunk Group] of wangwu ends

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

时序数据库 Apache-IoTDB 源码解析之文件数据块(四)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

时序数据库 Apache-IoTDB 源码解析之文件数据块(四)

时序数据库 Apache-IoTDB 源码解析之文件格式简介(三)打一波广告,欢迎大家访问IoTDB 仓库,求一波 Star 。欢迎关注头条号:列炮缓开局,欢迎关注OSCHINA博客这一章主要想聊一聊:TsFile的文件概览TsFile的数据块TsFile文件
时序数据库 Apache-IoTDB 源码解析之文件数据块(四)
2021-11-23

时序数据库 Apache-IoTDB 源码解析之文件索引块(五)

上一章聊到 TsFile 的文件组成,以及数据块的详细介绍。详情请见:时序数据库 Apache-IoTDB 源码解析之文件数据块(四)打一波广告,欢迎大家访问IoTDB 仓库,求一波 Star。这一章主要想聊聊:TsFile索引块的组成索引块的查询过程索引块目
时序数据库 Apache-IoTDB 源码解析之文件索引块(五)
2015-06-17

时序数据库 Apache-IoTDB 源码解析之文件格式简介(三)

时序数据库 Apache-IoTDB 源码解析之系统架构(二)打一波广告,欢迎大家访问IoTDB 仓库,求一波 Star 。欢迎关注头条号:列炮缓开局,欢迎关注 OSCHINA博客这一章主要想聊一聊:行式存储、列式存储的区别TsFile 的格式行式与列式存储的
时序数据库 Apache-IoTDB 源码解析之文件格式简介(三)
2020-07-08

时序数据库 Apache-IoTDB 源码解析之前言(一)

IoTDB 模块主要分为Client,JDBC,Server,TsFile,Grafana,Distribution 以及各种生态的连接器。整个系列的文章会从行业背景开始讲起,了解一个行业具体的使用场景,然后介绍 TsFile 是以什么样的格式来保存数据的,再
时序数据库 Apache-IoTDB 源码解析之前言(一)
2017-06-26

时序数据库 Apache-IoTDB 源码解析之系统架构(二)

时序数据库 Apache-IoTDB 源码解析之前言(一)这一章主要想聊一聊:物联网行业的基本系统架构,及使用数据库遇到的需求与挑战IoTDB 的功能特点及系统架构车联网因为本人是在做车联网行业,所以对这个行业的信息了解更深入一些,能够拿到一些更具体的数字来说
时序数据库 Apache-IoTDB 源码解析之系统架构(二)
2021-06-08

时序数据库 IoTDB 源码解析之前言(一)

IoTDB 模块主要分为Client,JDBC,Server,TsFile,Grafana,Distribution 以及各种生态的连接器。整个系列的文章会从行业背景开始讲起,了解一个行业具体的使用场景,然后介绍 TsFile 是以什么样的格式来保存数据的,再
时序数据库 IoTDB 源码解析之前言(一)
2015-01-06

时序数据库Influx-IOx源码学习四(Run命令的执行)

欢迎关注公众号: 上篇介绍到:InfluxDB-IOx的命令行及配置,详情见:https://my.oschina.net/u/3374539/blog/5017858 这章记录一下Run命令的执行过程。 //根据用户在命令行配置的num_threads
时序数据库Influx-IOx源码学习四(Run命令的执行)
2021-04-03

详解Android开发数据持久化之文件存储(附源码)

其实我们在社交网络上面所发出的任何信息, 都希望能够保留下来. 那么如何实现呢 数据持久化 数据持久化, 就是将内存中的瞬时数据保存在存储设备中, 保证即便关机之后, 数据仍然存在. 保存在内存中的数据是瞬时数据, 保存在存储设备中的数据就
2022-06-06

编程热搜

目录