首页  

Influxdb概念及原理简介     所属分类 influxdb 浏览量 1106
Influxdb 开源时序数据库,GO语言开发  
DB-Engines 时序数据库类别里排名第一
TSM 存储引擎,基于 LSM 思想,高写入性能 高压缩比
对Tags索引
InfluxQL  SQL-Like查询语言
Continuous Queries ,支持auto-rollup和pre-aggregation,对常见的查询操作可以通过CQ来预计算加速查询。

TSM    Time-Structured Merge Tree
LSM    Log Structured Merge Tree
项目存储引擎  从 LevelDB 到 BlotDB,再到自研 TSM

LevelDB 作为时序数据库的 缺点 
不支持热备 , 安全备份必须关闭后才能进行,LevelDB的RocksDB和HyperLevelDB变体可以解决此问题
时序数据过期数据删除,levelDB删除代价过高(通过添加墓碑的方式, 段合并时物理删除)


TSM
按不同的时间范围划分为不同的分区(Shard)
物理删除简单,直接删除分区即可

最初 采用每个shard 一个独立的数据库实例,LevelDB底层采用level compaction策略,每个存储引擎会打开多个的文件,shard增多,文件句柄占用过多
使用 BoltD B替换 LevelDB ,BoltDB底层数据结构是mmap B+树,由于B+ 树会产生大量的随机写,写入性能较差。
最终自研TSM ,基于时序数据库的特性作出一些优化,包含Cache、WAL以及Data File等各个组件,也会有flush、compaction等操作


database
Retention Policy(RP) 数据保留策略, 数据过期时间
Shard Group   逻辑概念
Shard   真正存储数据 提供读写服务

Shard  WAL CACHE TSM-files


写入 类似 LSM,
先写cache,  异步flush 到TSM文件 ,同时写 WAL(Write Ahead Log) 预防数据丢失


Influxdb 数据模型 Measurement 类 mysql 表名 tag key 类似mysql 加了索引的列 indexed fields Field key 类似mysql 没加索引的列 non-indexed fields Point 类似一行记录 record Timestamp tag 只支持字符串类型 field 类型无限制 Series 时间线 Series = Measurement + tags SeriesKey=measurement+datasource(tags) 时序数据在内存中表示为一个Map < Key, List< Timestamp|Value>> Key = seriesKey + fieldKey Map执行flush形成TSM文件
TSM文件 Series Data Section Series Index Section Series Index Section 存储文件级别B+树索引Block,用于在文件中快速查询时间序列数据块 同一个Key对应的时序数据构建成多个连续的Block Series Index Block由Index Block Meta以及一系列Index Entry构成 Index Block Meta最核心的字段是Key,表示这个索引Block内所有IndexEntry所索引的时序数据块都是该Key对应的时序数据。 Index Entry 指向对应的Series Data Block。 指向的Data Block由Offset唯一确定,Offset表示该Data Block在文件中的偏移量, Size表示指向的Data Block大小 Min Time和Max Time表示指向的Data Block中时序数据集合的最小时间以及最大时间 根据时间范围查找时可以根据这两个字段进行过滤 TSM 索引部分加载到内存,数据部分因为太大并不会直接加载到内存 查询可以分为三步 根据Key找到对应的SeriesIndex Block,Key有序,使用二分查找 找到SeriesIndex Block之后再根据查找的时间范围,使用[MinTime, MaxTime]索引定位到可能的Series Data Block列表 将满足条件的Series Data Block加载到内存中解压进一步使用二分查找根据timestamp查找 多维查询之倒排索引 TimeSeries Index TSI 1.3版本之前仅支持 Memory-Based Index 1.3之后支持 Disk-Based Index
常用InfluxQL show databases; use database_name; show measurements; select * from measurement_name limit 10; -- 数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式 precision rfc3339; -- 可在连接数据库指定该参数 influx -precision rfc3339 -- 查看一个measurement中所有的tag key show tag keys -- 查看一个measurement中所有的field key show field keys -- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default) show retention policies;
LSM Tree 要点整理 leveldb简介 leveldb要点 常用时序数据库比较

上一篇     下一篇
elasticsearch分片分配机制简介

elasticsearch的几个特色功能

常用时序数据库比较

influxdb使用简介

influxdb 连续查询

influxDB HTTP API使用