influxdb知识总结(1)---背景知识

最近,需要参与influxdb的优化工作,因此需要学习一下相关知识。

LSM 算法

LSM(log structed merge tree)
LSM的实现逻辑就是已经写好的文件不再修改,更新操作只会写入新的文件中(计算机硬盘或SSD顺序写很快,而随机写则很慢)。写入的每个文件是内部有序的(如SSTable),因此查找也相对比较快。同时定期对文件进行合并,减少文件的数量。

LSM优化了数据库写性能,而因此弱化了数据库的读性能。在某些应用场景下,对写性能要求较高,而对读性能要求不高。此外,可以通过优化缓存的方式来提高数据库的读性能,并且硬件上内存的提升很容易带来读性能的提高。

LSM是日志与传统单索引文件(B+tree, Hash index)的中立,它管理的是一组文件索引(通过索引找到文件,而非直接找到目标信息存储位置)。代价就是读操作需要处理大量的索引文件,而文件合并操作会消耗一些I/O。
参考:
LSM原理

SSTable

Table(SSTable)–是存储,处理和交换数据集的最流行的输出之一,支持顺序高速写入,一旦写入磁盘,就不可以修改。随机读取也相对具有较高性能,不支持随机写入。

sstable有一系列block(默认大小为64kb)组成,存储的是一系列key-value信息序列,相当于一个巨大数据,因此不会修改已经写入的内容。sstable利用文件末尾的块索引(块索引记录一系列key在sstable中的位置)来定位key-value的位置。查找数据的时候,利用二分查找在索引中找到对应key-value的index, 然后一次IO就可以查找到对应数据信息。

MemTable

为了避免对SSTable I/O操作过于频繁,memtable应运而生,memtable相当于sstable的内存形式。memtable内部实现采用跳表形式实现。在写入数据的时候,先向memtable中写入,当写入积累到一定数量时,再生成一个sstable文件,最后把memtable中的内容写入其中。

InfluxDB

influxDB比较突出的特点是抽象出了series这个概念,seriesKey = measurement + Tagkey , 内存中存储的形式:
[seriesKey + fieldKey, List<timestamp, Value>] , 下面详细介绍一下这几个概念。
measurement: 测量指标名,例如: cpu_usag表示cpu的使用率,相当于关系数据库中的表
TagKey : 纬度列,属性值,例如测量北京在一段时间内的温度,这里北京就相当于一个TagKey, 而温度就是fieldKey, 测量的实时数据就是北京这个属性对应的一系列不同的温度值。
fieldKey : 数值列
influxdb在内存中的存储形式如下所示。
在这里插入图片描述
内存中的数据同一个seriesKey+fleld值的数据会被写入同一个block中,这样做主要有这几个层面的好处:
1 tag, seriesKey等数据不需要冗余存储,每个block中只需要存储一份;
2 时间序列与value值在同一个block内可以分开存储,进行有针对性的压缩;
3 block内数据按时间线进行存储,方便时间范围条件的查找;

influxDB采用LSM架构, 采用顺序写来提高性能;
influxdb在写入文件的时候先写入内存,待内存达到一定阈值后,flush到文件中;
同样类似于LSM的文件索引,influxdb的索引建立了serieskey(measurement + 一系列series key / series value ) 与数据的映射关,来优化数据的查询;

参考: LSM原理介绍
时序数据库技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值