南山网站(建设深圳信科),服装市场网站建设,北京朝阳区邮编,南通网络公司网站一、时序数据库的特点 1、时序数据库用作打点#xff0c;用来做监控使用#xff0c;属于写多读少的场景#xff0c;而且由于时间不可逆#xff0c;几乎不可能出现更新的操作。而且监控数据一般只会查询最近几分钟数据#xff0c;冷热数据查询频率非常明显。因此非常贴合ES…一、时序数据库的特点 1、时序数据库用作打点用来做监控使用属于写多读少的场景而且由于时间不可逆几乎不可能出现更新的操作。而且监控数据一般只会查询最近几分钟数据冷热数据查询频率非常明显。因此非常贴合ES LSM-TREE这种准实时的特点。 2、ES和LSM-TREE 写入的时候都是顺序写入相比于mysql B树因为需要维持全局有序随机写。效率有很大提升。 3、而且ES和LSM-TREE都是批量写入都会先在内存攒一批数据ES是段写满或者达到兜底时间。LSM-TREE是内存里memoryTable写满后落入磁盘。写入效率相比于mysql高很多。 4、LSM-TREE分层SSTable类似多级缓存刚写入的数据在上层历史数据经过SSTable合并后会落入下一层级查询难度加大。也非常适合时序数据库这种冷热明显的场景 5、但是由于LSM-TREE顺序写入SSTable内部局部有序因此对于查询功能不如mysqlB树全局有序。 6、但是LSM-TREE为了加快查询效率每个SSTable有一个布隆过滤器能够快速发现数据在不在此SSTable。最坏的情况需要把所有SSTable的filter都判断一遍。 7、正是因为LAM-TREE局部有序。对于范围查询支持的不好。需要遍历所有SSTable查看范围SSTable内部可以二分查找。最终多个SSTable查询结果进行合并 因此市面上的时序数据库通常都是采用LSM-TREE或其变种
二、influxdb的原理 以及与LSM-TREE的结合 1、概念 database ------ 数据库 measurment ----- 表 tag ----- 索引 field ----- 数据内容 series ----- 是存储数据的基本单位。measurmenttag完全相同只有时间戳不同的数据会存到同一个series方便对于某种特定数据进行时间范围查询。相对的influxdb对于 tag数据内容多变的查询 支持的不好。 以序列的方式管理数据是时序数据库和传统关系型数据库最不同的地方。
2、双索引设计与高效查询思路(tag集合形成一个索引 时间戳是一个索引) influxdb 查询先根据tag索引 查找到 某一条序列 再根据时间索引进行 LSM-TREE查询
tag索引 是倒排索引 先根据倒排索引 查找序列定位某一个LSM-TREE 再根据时间 进行LSM-TREE查询
3、时序序列数据库致命问题时间线膨胀 如果同一个measurment的tag集合变化太多tag1x1,tag2y1,(tag1x2,tag2y2)…等等。 就会造成序列太多时序数据库的写入和读取性能通常都会有明显的下降。 因为序列太多每次写数据首先需要LSM-TREE查询写入哪条序列SSTable局部有序最坏情况需要遍历所有SSTable