浅谈时序数据库(TSDB)

  • 一、什么是时序数据库
  • 二、时序数据库特点
    • 基本特点
    • 核心特性
  • 三、补充知识
    • LSM树(LSM tree vs B tree)
      • B tree
      • LSM tree
      • 总结
  • 四、常见的时序数据库
  • 参考:

一、什么是时序数据库

时序数据库全称时间序列数据库,主要分为时间戳(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 算法的原理(通俗,详细).
排名前十的时序数据库.

浅谈时序数据库(TSDB)相关推荐

  1. DolphinDB智臾科技CEO周小华:《从反向控制的终极目标谈时序数据库的架构设计》

    2021年4月25-26日,由极客邦科技与InfoQ中国主办的2021ArchSummit全球架构师峰会在上海召开.本次大会聚焦业界强大的技术成果,秉承"实践第一.案例为主"的原则 ...

  2. 管理中计算机系统的应用论文,浅谈计算机数据库的管理与应用论文

    浅谈计算机数据库的管理与应用论文 摘要:随着社会经济的快速发展,信息化网络技术手段不断进步,信息技术在人们日常生活.工作及学习中的广泛渗透,不仅给人们生活带来了极大便利,还极大的提升了人们工作与学习效 ...

  3. 时序数据库TSDB按时间进行数量统计算法研究

    时序数据库(TSDB)存入的数据都是按时间进行排列的,那么如果数据是计数类型的,也就是随着时间的增长,这个数字会一直增加,那么就可以按时间对这个数据进行统计. 工厂生产产品的数量就是计数类型,下边以此 ...

  4. 【转载】运维角度浅谈MySQL数据库优化

     运维角度浅谈MySQL数据库优化 2015-06-02 14:22:02 标签:mysql优化   mysql分库分表分区 mysql读写分离 mysql主从复制 原创作品,允许转载,转载时请务必以 ...

  5. 浅谈计算机数据库技术的应用,浅谈计算机数据库技术的应用意义.doc

    浅谈计算机数据库技术的应用意义.doc 浅谈计算机数据库技术的应用意义 [摘 要]随着计算机技术与网络通信技术的发展,数据库技术已成为信息社会中对大量数据进行组织与管理的重要技术手段及软件技术,是网络 ...

  6. 为啥用 时序数据库 TSDB

    前言 其实我之前是不太了解时序数据库以及它相关的机制的,只是大概知晓它的用途.但因为公司的业务需求,我意外参与并主导了公司内部开源时序数据库influxdb的引擎改造,所以我也就顺理成章的成为时序数据 ...

  7. 浅谈Oracle 数据库之间数据同步方案

    随着信息技术的飞速发展,企业信息化建设的不断深入,使得企业业务系统数量不断增加.这时,各业务系统之间数据交互,各子业务系统与核心业务系统之间数据交互,诸如此类场景的应用需求不断出现.因此,IT部门应对 ...

  8. 时空时序数据库 TSDB的用法

    tsdb 时空时序数据库 中的 几个关键词 metric: metric 类似 关系型数据库 的一张 表名. fields 就是 其中 的字段 类似于 column 字段. tags : 是 能作为查 ...

  9. pymysq向mysql写数据 为什么本地无法查看_从运维角度浅谈MySQL数据库优化,中小企业DBA必会...

    原文:http://www.enmotech.com/web/detail/1/712/1.html(复制链接,打开浏览器即可查看原文) 作者:搬砖游击队 一个成熟的数据库架构并不是一开始设计就具备高 ...

最新文章

  1. 支持向量机(SVM)的约束和无约束优化、理论和实现
  2. axure怎样24位bmp输出_平衡(非平衡)输入输出的无源变压器前级放大器
  3. iOS--资源--优秀app发掘
  4. 微软宣布针对Azure Cosmos DB的多个更新
  5. 2018-2019 20165227《信息安全系统设计基础》第三周学习总结
  6. 聊聊flink Table的ScalarFunction
  7. vue devtools 插件安装
  8. python 调用mysql存储过程返回结果集
  9. ajax如何提交多表单的值_菜狗教程-03-如何解决快速提交两次重复提交表单的问题...
  10. 如何减少java里的分支_idea切换分支的时候,忽略一些无用的修改设置
  11. 小说阅读器未能连接服务器怎么办,小强小说阅读器无法加载小说章节的解决方法...
  12. python姓名转拼音_实用小技巧,Python一秒将全部中文姓名转为拼音!
  13. Windows 7 通用 CDC 串口驱动程序
  14. Maven2的相关知识[zt]
  15. ipa 上传卡在鉴权_上传app,一直卡在“正在通过 App Store 进行鉴定”
  16. payjs 源码_GitHub - wlijie/payjs_test: PAYJS 小程序支付框架与示例
  17. im即时通讯开发如何理解定位技术
  18. 程序员所说的「轮子」是什么东西?
  19. 转:解决“连接被重置”
  20. 根据车辆品牌获取品牌所属公司,车标logo,创建年份等基本信息

热门文章

  1. 微信的商业模式与创业机会 -转 舒迅
  2. 【Qt】深度解析QVector和QList
  3. linux文件系统-文件系统的安装与拆卸
  4. 移动端:H5判断浏览器类型
  5. 黑人电动牙刷研发新品打造个性化刷牙体验
  6. 【微信小程序】在页面跳转时如何进行页面导航
  7. ssm+vue前后端分离框架整合(附源码)
  8. MySQL高级-索引(BTree)结构
  9. 快用Python把你女友的图片批量处理,要多炫有多炫
  10. word在点击关闭后会弹出来一个提问框长安之星车长多少米,必须回答正确才能关闭