浅谈时序数据库(TSDB)

一、什么是时序数据库

时序数据库全称时间序列数据库,主要分为时间戳(timestamp)、标签(tag)、存档(filed)三大部分,按照时间顺序记录数据。

物联网时代的兴星,万物互联的的思想,利用物联网设备的传感器传输设备的实时数据到时序数据库,对设备的异常、IO等数据进行记录。

二、时序数据库特点

时序数据库包含:监控业务(哨兵),采集服务器的指标数据(IO指标、CPU指标、带宽内存指标等等)、业务相关数据(方法调用异常次数、响应延迟、JVM GC相关数据等等)、数据库相关数据(读取延迟、写入延迟等等)。

基本特点

1.便于存储持续产生的海量数据;(哨兵的监控系统会持续产生海量的数据,如监控1w台服务器的各项指标,每台服务器每秒采集100种metrics,每秒就会产生100w的TPS)

2.对插入有较高性能的体现,对更新、删除的性能较为底下(时效业务产生的数据很少会有更新、删除的操作,基于这个特性,在时效数据库的架构设计时能有很大的简化)

3.近期数据关注度更高,时间久远的数据甚至可以考虑丢弃;(哨兵系统种我们通常关系的都是最近一小时的数据,最多关注最近三天的数据,很少会去关注三天前甚至更久远的数据,可以根据具体业务考虑丢弃过于久远的数据,以达到节约存储资源的目的)

4.多维度聚合统计查询功能。(比如业务需要统计最近一小时广告主google发布的USA地区的广告点击率和总收入分别是多少,这里需要利用多维度聚合统计查询,这种需求虽然对于时效性要求不高,但是对查询聚合性能有比较高的要求,我们可以采用时序数据的多维度聚合统计查询功能)

核心特性

1、高吞吐量写入能力;(系统具有水平扩展性和单机LSM体系结构。水平扩展性是为了实现集群式的系统,而且容易加节点扩展,实现扩容的时候业务无感知;LSM体系结构是为了加快单机的高吞吐量写入)

2、数据分级存储/TTL;(针对时序数据的冷热性质定制的技术特性。近几小时级别的数据存入内存中,最近天级的数据存入SSD(固态硬盘),更久远的数据放到HDD(机械硬盘)或者直接使用TTL过期淘汰)

3、高压缩率;(一方面是为了节约成本,另一方面是压缩后能将更多的数据放入内存,降低查询开销)

4、多维度查询能力;(时序数据通常会有多个维度的标签来刻画一条数据)

5、高效聚合能力;(使用预聚合技术,就是在数据写进来的时候就完成基本的聚合操作)

6、未来技术点。(异常实时检测、未来预期等等)

三、补充知识

LSM树(LSM tree vs B tree)

将数据的修改增量保存在内存中,达到指定大小后将这些批修改写入到磁盘中。读取时合并磁盘的历史数据和内存中最近修改的操作。 规避了磁盘的随机写入,但是读取时可能会访问较多的磁盘文件。

B tree

主流关系型数据库均以B/B+ tree作为其构建索引的数据结构,这是因为B tree提供了理论上最高的查询效率O(log2n),但由于其对于查询性能的追求造成了B tree每次插入或删除一条数据时,均需要更新索引,从而造成一次磁盘IO。这一特性决定了B tree只适合需要频繁读较少写的场景。如果在频繁写的场景下,将造成大量的磁盘IO,从而导致性能骤减。这种应用场景在传统的关系型数据库中比较常见。

LSM tree

LSM tree避免了频繁写场景下的磁盘IO开销,尽管其查询效率无法达到理想的O(log2n),但是依旧非常快,可以接受。所以冲本质上来说,LSM tree相当于牺牲了部分查询性能,换取了可观的写入性能,这对于key-value型或日志型数据库是非常重要的。

总结

1.写数据时,首先将数据缓存到内存中的一个有序树结构中(称为memtable)。同时触发相关结构的更新,例如布隆过滤器(bloom filter)、稀疏索引(sparse index);
2.当memtable积累到足够大时,会一次性写入磁盘中,生成一个内部有序的segment文件。该过程为连续写,因此效率极高;
3.进行查询时,首先检查布隆过滤器。如果布隆过滤器报告数据不存在,则直接返回不存在。否则按照从新到老的顺序依次查询每个segment;
4.在查询每个segment时,首先使用二分搜索检索对应的稀疏索引,找到数据所在的offset范围。然后读取磁盘上该范围内的数据,再次进行二分查找并获得结果;
5.对于大量的segment文件,定期在后台执行compaction操作,将多个文件合并为更大的文件,以保证查询效率不衰减。

稀疏索引(sparse index)对应的是全量索引(dense index)。
稀疏索引是指将有序数据切分成(固定大小的)块,仅对各个块开头的一条数据做索引。
全量索引对全部数据进行编制索引,其中的任意一条数据发生增删均需要更新索引。
全量索引查询效率更高,达到了理论极限O(log2n),但写入和删除效率低,每次数据增删均需要更新索引而消耗一次IO操作。通常关系型数据库,如MySQL等,其内部采用B tree作为索引结构,即全量索引。

布隆过滤器内部依赖哈希算法,当检测到莫一条数据是否见过时,有一定概率出现假阳性(False Positive),但一定不会出现假阴性(False Negative)。简而言之,布隆过滤器认为一条数据出现过,那么该条数据很可能出现过;但如果布隆过滤器认为一条数据没有出现过,那么该条数据一定没有出现过。这种特性刚好与此处的需求相契合,即检验某条数据是否缺失。

四、常见的时序数据库

InfluxDB、Kdb+、Prometheus、Graphite、OpenTSDB…

参考:

时序数据库介绍.
时序数据库(TSDB).
LSM 算法的原理(通俗,详细).
排名前十的时序数据库.

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Flink大数据和时序数据库是两个不同的概念和技术。Flink是一个开源的流处理和批处理框架,用于处理大规模的实时和批量数据。它提供了强大的流处理功能,可以处理实时数据流,并支持事件时间和处理时间的窗口操作。Flink可以用于构建实时分析、实时监控和实时报警等应用。 时序数据库TSDB)是一种专门用于存储和处理时序数据的数据库时序数据是带有时间戳的数据,常见的应用场景包括监控数据、行驶轨迹、设备传感器等。时序数据库具有高效的数据存储和查询能力,可以支持大规模的时序数据的存储和分析。时序数据库通常采用特定的数据结构和索引方式,以提高时序数据的查询性能和存储效率。 在实际应用中,Flink大数据和时序数据库可以结合使用。Flink可以用于实时处理和分析数据流,而时序数据库可以用于存储和查询大规模的时序数据。通过将Flink与时序数据库集成,可以实现实时数据的处理和存储,并支持复杂的时序数据分析和查询操作。这种组合可以满足对大规模时序数据的实时处理和分析需求。 #### 引用[.reference_title] - *1* *2* *3* [时序数据库](https://blog.csdn.net/xinzhongtianxia/article/details/125607615)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值