首页   快速返回

时间序列数据库要点整理     所属分类 bigdata
[timestamp],[d1],[d2]...[dn],[v1],[v2]...[vn]

d1  dn 维度,比如 ip, dpp 等
v1  vn 指标值,比如 load free-memory 等 

[timestamp],[metric],[value]

加上 TAG

timestamp],[metric],[tag=tagvalue,...],...[value]


按时间范围查询
按维度和指标筛选
服务端聚合
预计算
数据压缩
分布式 水平扩展能力

时序数据存储
基于文件的简单存储:RRD Tool,Graphite Whisper。
基于K/V数据库 opentsdb(基于hbase),influxdb,prometheus(基于leveldb),kairosDB(基于cassandra)
基于关系型数据库  mysql,postgresql 


原始数据查询
聚合  
入库时聚合 物化视图
查询时聚合 

检索:这是搜索引擎最擅长的领域。代表产品是Lucene。其核心技术是基于高效率数据结构和算法的倒排索引。
加载:这是分析型数据库最擅长的领域。代表产品是C-store和Monetdb。其核心技术是按列组织的磁盘存储结构。
分布式计算:这是大数据计算引擎最擅长的领域。代表产品是Hadoop和spark。其核心技术是sharding 和 map/reduce等等。

Lucene的inverted index可以比mysql的b-tree检索更快。
lucene可以使用AND或者OR组合使用索引进行检索。

ES支持nested document,可以把一批数据点打包,减少需要索引的文档数。
Mysql存储时间序列的最佳实践是不使用二级索引,只使用clustered index扫描主表。类似于Opentsdb。

Lucene 从 4.0 开始支持 DocValues,极大降低了内存的占用,减少了磁盘上的尺寸并且提高了加载数据到内存计算的吞吐能力。

term 
Posting list
term dictionary 
term index

压缩技术
Lucene Finite State Transducers
Term dictionary在磁盘上是以分block的方式保存的,一个block内部利用公共前缀压缩
 
联合使用两个索引两种方式

使用skip list数据结构。 同时遍历两个字段的 posting list
使用bitset数据结构   两个字段的bitset 

lucene bitset 数据结构 Roaring Bitmap

https://www.elastic.co/cn/blog/frame-of-reference-and-roaring-bitmaps


减少文档数  行变列
ES  Nested Document

主键/聚集索引 和  普通索引/次级索引
Opentsdb  Hbase 没有 普通索引 

Hbase rowkey

rowkey 设计

[metric_name][timestamp][tags]
获取一个metric在一个时间范围内的所有数据很快

ip做为tags,读取某个ip 的数据比较麻烦

DocValues  按列组织的存储格式

Lucene底层读取文件 基于memory mapped byte buffer   mmap。
由操作系统缓存文件到内存里。在内存足够的情况下,访问文件就相当于访问内存。
预读
普通磁盘每秒100MB

es index 分片 Shard
Segment  
Segment对应了一些列文件存储索引(倒排表等)和主存储(DocValues等),这些文件内部又分为小的Block进行压缩。

时间序列数据一般按照日期分成多个 Index来存储

Pipeline Aggregation  聚合之后再做聚合

上一篇     下一篇
LSM Tree 要点整理

java GC之 CMS 和 G1

统一运维监控平台相关资料整理

内核参数设置及优化

高可用架构简单介绍

prometheus概述