上一章聊到在车联网或物联网中对数据库的需求,以及 IoTDB 的整体架构,详情请见: 时序数据库 Apache-IoTDB 源码解析之系统架构(二) 打一波广告,欢迎大家访问IoTDB 仓库,求一波 Star 。欢迎关注头条号:列炮缓开局,欢迎关注 OSCHINA博客 这一章主要想聊一聊:
行式与列式存储的区别假如我们的逻辑上的数据表格式及数据为:
那么他出现在硬盘格式就是: 行式数据在我理解上,行式数据是把逻辑相关的数据在硬盘上放到一起,比如上面的例子,我们可以称之为体温表,所以在逻辑上:时间、人、体温,就成为了逻辑上紧密相关的数据。 所以把相关的数据的硬盘上的组织方式也变成连续的,假如我需要取 列式数据列式数据在我理解是将物理相关的数据放到一起,比如时间是一类( 1.1 取数据方式有一种叫法是只读投影列,避免查询无关列的读取。列式存储的优势在于查询的列数远小于总属性数量,就能少读很多数据。可能读起来非常绕口,举个例子:比如我需要查体温大于 36 度的体温值,sql : 1.2 数据编码和压缩因为物理相关的数据他们类型相同,可以使用多种多样的编码方式,比如 IoTDB 中就提供了 8 种编码方式,这个不具体聊,等后面章节再说。 我们继续拿时间列举例子,我们可以把时间列改造为差值存储: 比如 C1 文件块中先存储基础值 1580950800 那么他后面的数据值只需要存储 0 就可以,存储的数字小了,那么占用的存储空间肯定也就小了,当数字特别大且差值比较小的时候,这用编码方式就非常有意义。当然还有很多好玩儿的编码方式,欢迎持续关注。 TsFile 文件格式为什么叫 TsFile ?我听意思应该是作为 TimeSeriresFile 的缩写,也就是时序数据文件的意思。 这是一个数据被刷入磁盘后的缩减版 TsFile 格式,我们还拿上面的数据举例,用来直观的解释 TsFile 中出现的一些名词,假如我的数据为:
上面的数据刷新到磁盘上后会对应关系如下: 看到这里应该能理解每个英文名词的意思:
回想上面提到的 SQL : 介绍完了 Chunk 和 ChunkGroup 的概念,那么如果 Chunk 和 ChunkGroup 非常多的时候,TsFile 怎么来设计才能快速的定位并找到合适的 ChunkGroup 的呢?TsFile 怎样才能做到损坏时的检测或者保证传递过程的完整性呢?欢迎持续关注。。。 有兴趣的朋友可以查看:官方 Github 中的 TsFile 文档,了解更多详细信息。
|
|