IoTDB使用学习笔记(二)

  • 上一期笔记记录了通过天谋官网教程快速上手使用IoTDB的过程,这期记录一下我对IoTDB时序数据库存储结构的底层原理的学习理解
  • 前置知识
    • 首先回顾一下大学内数据结构曾学习过的一些基础知识,对理解数据库的存储结构有所帮助
    • 数据结构3要素
      • 逻辑结构
      • 存储结构
      • 数据运算
    • 存储结构4类型
      • 顺序存储
      • 链式存储
      • 索隐存储
      • 散列存储(哈希存储)
  • 关系型数据库存储结构
    • 索引:对记录按照多个字段进行排序的一种方式。为了提高数据的查询速度,相当于给数据进行编号,在查找数据的时候就可以通过编号快速找到对应的数据。
      • 数据存储的内部结构类似链表,通过指针关联不同的数据
      • 这种结构处理大量数据会很慢
  • 时序数据库存储结构
    • LSM(Log-Structured MergeTree)树的诞生背景
      • 传统关系型数据库使用B树或一些变体作为存储结构,能高效进行查找。但保存在磁盘中时它也有一个明显的缺陷,那就是逻辑上相离很近但物理却可能相隔很远,这就可能造成大量的磁盘随机读写。随机读写比顺序读写慢很多,为了提升IO性能,我们需要一种能将随机操作变为顺序操作的机制,于是便有了LSM树。LSM树能让我们进行顺序写磁盘,从而大幅提升写操作,作为代价的是牺牲了一些读性能。
    • LSM树简介
      • LSM树核心思想的核心就是放弃小部分读能力,换取写入的最大化能力,利用顺序写来提高写性能。LSM Tree ,这个概念就是结构化合并树的意思,它的核心思路其实非常简单,就是假定内存足够大,因此不需要每次有数据更新就必须将数据写入到磁盘中,而可以先将最新的数据驻留在内存中,等到积累到足够多之后,再使用归并排序的方式将内存内的数据合并追加到磁盘队尾(因为所有待排序的树都是有序的,可以通过合并排序的方式快速合并到一起)。因此LSM树至少需要由两棵树组成,一棵是存储在内存中较小的C0树,另一课时存储在磁盘中较大的C1树。
      • 日志结构的合并树(LSM-tree)是一种基于硬盘的数据结构,与B+tree相比,能显著地减少硬盘磁盘臂的开销,并能在较长的时间提供对文件的高速插入(删除)。然而LSM-tree在某些情况下,特别是在查询需要快速响应时性能不佳。通常LSM-tree适用于索引插入比检索更频繁的应用系统。
    • B+树与LSM树对比
      • B+树的不足
        • 高度平衡的要求:B+树要求保持高度平衡,导致在数据写入过程中需要频繁地进行节点的分裂和合并操作。这在时序数据库中可能会导致额外的维护开销,尤其是当数据以连续的时间序列进行插入时,可能引起频繁的节点分裂,影响写入性能。
        • 随机写入效率低下:由于B+树的平衡性质,对于随机写入操作(即非按照索引顺序进行的写入),需要频繁地更新索引节点,这会导致大量的磁盘随机访问,降低了写入性能。
        • 磁盘空间利用不高:B+树节点的大小通常是固定的,而且为了保持平衡,每个节点并不会被充分利用。在时序数据库中,特别是处理大量追加式写入的场景下,这种空间利用不高可能会导致磁盘空间浪费。
        • 范围查询效率较低:对于B+树来说,范围查询需要进行多次磁盘访问,从而导致查询效率较低,尤其是在时序数据库中经常需要进行的时间范围查询。
        • 维护开销较大:在时序数据库中,数据的不断写入和删除会导致B+树的频繁调整,包括节点的分裂、合并和数据的重新平衡等操作,这些维护操作会带来额外的开销。
      • LSM树的优势
        • 高效的写入操作:由于IoT设备产生的时序数据通常是连续不断地写入,LSM树的追加写性能非常出色。新的数据首先被追加到一个内存中的结构(比如memtable),当memtable 达到一定大小之后,会被刷写到磁盘上,并触发后续的合并操作,保证数据的有序性和压缩存储。
        • 快速的查询操作:虽然LSM树在写入方面表现优异,但是对于查询操作也有较好的性能。由于LSM树的数据是有序存储的,结合索引的机制,可以通过较少的磁盘访问就能够快速定位所需数据,因此适用于时序数据频繁的查询场景。
        • 数据合并和压缩:LSM树通过后台的数据合并和压缩操作,可以有效地管理磁盘空间,并且提高查询性能。合并操作将多个较小的数据文件合并成一个更大的文件,同时进行压缩,减少磁盘占用和提高数据读取效率。
  • 心得体会
    • 我在大三学计算机408学科数据结构时曾简要学习过B+树的特点,知道了时序数据库之后,第一次对LSM树的概念有所触及。了解LSM的特点后,我明白了它适合作为时序数据库存储结构的原因。LSM树的设计思想很朴实,它将对数据修改的增量保持在了内存之中,达到了大小限制之后再将修改操作批量写入磁盘,读取的时候需合并磁盘历史记录与内存中的最近修改操作。因此其写入性能提升巨大,在读取时需查看能否先命中内存,否则需要访问较多磁盘文件。简而言之,其拿读取性能换来了极高的写入性能。
    • IoTDB所采用正是WAL(预写日志)+ LSM Tree 方案,其适用于写多读少,海量数据的场景,写入的原理为:远离磁盘,层级合并。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

管哥_kr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值