时序数据库(TSDB)

article/2025/9/2 21:03:06

时序数据库(TSDB)是一种特定类型的数据库,主要用来存储时序数据。随着5G技术的不断成熟,物联网技术将会使得万物互联。物联网时代之前只有手机、电脑可以联网,以后所有设备都会联网,这些设备每时每刻都会吐出大量的按照时间组织的数据,需要存储下来进行查询、统计和分析。时序数据和普通的业务数据在各个方面都有很大的不同,本文将会试图带大家进入TSDB的世界。

TSDB应用场景:哪些场景会用到TSDB?

TSDB目前最大的应用场景是监控业务(哨兵),以哨兵为例,哨兵会在业务服务器上部署各种脚本客户端用来采集服务器指标数据(IO指标、CPU指标、带宽内存指标等等),业务相关数据(方法调用异常次数、响应延迟、JVM GC相关数据等等)、数据库相关数据(读取延迟、写入延迟等等),很显然,这些数据都是时间序列相关的,客户端采集之后会发送给哨兵服务器,哨兵服务器会将这些数据进行存储,并提供页面给用户进行查询。如下图所示,用户可以登录哨兵系统查看某台服务器的负载,负载曲线就是按照时间进行绘制的,带有明显的时序特征:

实际上,TSDB的潜力还没有爆发,至少在现在还没有。在可预知的未来3~5年,随着物联网以及工业4.0的到来,所有设备都会携带传感器并联网,传感器收集的时序数据将严重依赖TSDB的实时分析能力、存储能力以及查询统计能力。

上图是一个智慧工厂示意图,工厂中所有设备都会携带传感设备,这些传感设备会实时采集设备温度、压力等基本信息,并发送给服务器端进行实时分析、存储以及后期的查询统计。除此之外,比如现在比较流行的各种穿戴设备,以后都可以联网,穿戴设备上采集的心跳信息、血流信息、体感信息等等也都会实时传输给服务器进行实时分析、存储以及查询统计。

TSDB数据示例:什么是时序数据?

介绍了TSDB的主要应用场景,再来看看时序数据到底是什么样的数据。下图是一份典型的时序数据:

整个图表征广告业务实时行为数据,包括广告实时浏览量、实时点击量以及实时利润收入等。图中分了三个区域,表示时序数据由3个部分构成,分别为维度列、数值列以及时间列。维度列是最左边的部分,表征广告的基本信息,类似于物体标签,比如广告平台、广告主、广告面向对象以及广告面向国家等。数值列是中间的部分,表示采集的数值有广告浏览量(impressions)、点击量(clicks)以及利润(revenue)。时间列就是一系列的时间点信息。将上图翻译成表结构等价于:

TSDB基本特点:时序业务有哪些特点?

时序业务和普通业务在很多方面都有巨大的区别,归纳起来主要有如下几个方面:

  1. 持续产生海量数据,没有波峰波谷。举几个简单的例子,比如类似哨兵的监控系统,假如现在系统监控1w台服务器的各类指标,每台服务器每秒采集100种metrics,这样每秒钟将会有100w的TPS。再比如说,现在比较流行的运动手环,假如当前有100w人佩戴,每个手环一秒只采集3种metrcis(心跳、脉搏、步数),这样每秒钟也会产生300w的TPS。
  2. 数据都是插入操作,基本没有更新删除操作。时序业务产生的数据很少有更新删除的操作,基于这样的事实,在时序数据库架构设计上会有很大的简化。
  3. 近期数据关注度更高,未来会更关注流式处理这个环节,时间久远的数据极少被访问,甚至可以丢弃。这个很容易理解,哨兵系统我们通常最关心最近一小时的数据,最多看看最近3天的数据,很少去看3天以前的数据。随着流式计算的到来,时序数据在以后的发展中必然会更关注即时数据的价值,这部分数据的价值毫无疑问也是最大的。数据产生之后就可以根据某些规则进行报警是一个非常常见并重要的场景,报警时效性越高,对业务越有利。
  4. 数据存在多个维度的标签,往往需要多维度联合查询以及统计查询。时序数据另一个非常重要的功能是多维度聚合统计查询,比如业务需要统计最近一小时广告主google发布在USA地区的广告点击率和总收入分别是多少,这是一个典型的多维度聚合统计查询需求。这个需求通常对实效性要求不高,但对查询聚合性能有比较高的要求。

TSDB市场发展:现在都有哪些TSDB产品?

在最近的一年时间里,随着物联网技术的不断成熟,很多创业者都希望能借助这个风口得到更多创业机会。试想当年移动互联网刚兴起的时候,也是诞生了一批规模庞大的创业者,而现在,要想在移动互联网创业,难度已经非常之大,基本可以认为现在移动互联网创业都是在玩资本、拼干爹。而物联网这个市场的竞争力还是非常之小,非常纯洁,创业的机会也非常之多。看清楚这样的事实,很多厂商尤其是公有云提供商都不约而同的将目光投到这个领域,他们的目标就是笼络这些小的创业公司。下图是最近一年各个云厂商在TSDB的动作,搞个大动作是可以预见的了:

TSDB核心特性:TSDB关注的核心技术点在哪里?

说了这么多,是应该看看TSDB到底在技术层面关注哪些核心点了,基于时序业务的基本特点,总结起来TSDB需要关注的技术点主要有这么几个:

  1. 高吞吐量写入能力。这是针对时序业务持续产生海量数据这么一个特点量身定做的,当前要实现系统高吞吐量写入,必须要满足两个基本技术点要求:系统具有水平扩展性和单机LSM体系结构。系统具有水平扩展性很容易理解,单机肯定是扛不住的,系统必须是集群式的,而且要容易加节点扩展,说到底,就是扩容的时候对业务无感知,目前Hadoop生态系统基本上都可以做到这一点;而LSM体系结构是用来保证单台机器的高吞吐量写入,LSM结构下数据写入只需要写入内存以及追加写入日志,这样就不再需要随机将数据写入磁盘,HBase、Kudu以及Druid等对写入性能有要求的系统目前都采用的这种结构。
  2. 数据分级存储/TTL。这是针对时序数据冷热性质定制的技术特性。数据分级存储要求能够将最近小时级别的数据放到内存中,将最近天级别的数据放到SSD,更久远的数据放到更加廉价的HDD或者直接使用TTL过期淘汰掉。
  3. 高压缩率。提供高压缩率有两个方面的考虑,一方面是节省成本,这很容易理解,将1T数据压缩到100G就可以减少900G的硬盘开销,这对业务来说是有很大的诱惑的。另一个方面是压缩后的数据可以更容易保证存储到内存中,比如最近3小时的数据是1T,我现在只有100G的内存,如果不压缩,就会有900G的数据被迫放到硬盘上,这样的话查询开销会非常之大,而使用压缩会将这1T数据都放入内存,查询性能会非常之好。
  4. 多维度查询能力。时序数据通常会有多个维度的标签来刻画一条数据,就是上文中提到的维度列。如何根据随机几个维度进行高效查询就是必须要解决的一个问题,这个问题通常需要考虑位图索引或者倒排索引技术。
  5. 高效聚合能力。时序业务一个通用的需求是聚合统计报表查询,比如哨兵系统中需要查看最近一天某个接口出现异常的总次数,或者某个接口执行的最大耗时时间。这样的聚合实际上就是简单的count以及max,问题是如何能高效的在那么大的数据量的基础上将满足条件的原始数据查询出来并聚合,要知道统计的原始值可能因为时间比较久远而不在内存中哈,因此这可能是一个非常耗时的操作。目前业界比较成熟的方案是使用预聚合,就是在数据写进来的时候就完成基本的聚合操作。
  6. 未来技术点:异常实时检测、未来预测等等。

TSDB总结

TSDB将是未来一个非常具有市场性、挑战性的数据库,现在虽然已经有这样那样的服务,但大多都有这样那样的问题,现在很难谈得上成熟。为了在物联网时代、工业4.0时代中占有一定地位,TSDB是必须要拓展的技术。本文从时序场景、时序业务特点、TSDB市场以及TSDB核心技术点这几个方面对TSDB进行了介绍,希望看官能基本了解TSDB。后续笔者将会推出针对TSDB的系列专题文章,深入分析TSDB本身所要面对的各种技术问题以及解决方案。


http://chatgpt.dhexx.cn/article/ogtD7Ki1.shtml

相关文章

TSDB数据库

目录 为什么需要时序数据库: 时间序列数据库的特点: 常见的时间序列数据库: 时间序列数据库存储: 时间序列数据库问题: 参考资料: 内容是在我球的docs上直接复制过来的,懒得写两份&#x…

关于时许数据库的相关名词解释

1 时序数据库TSDB 英文全称为 Time Series Database,提供高效存取时序数据和统计分析功能的数据管理系统。 2 时序数据(Time Series Data) 基于稳定频率持续产生的一系列指标监测数据。例如,监测某城市的空气质量时&#xff0c…

物联网平台搭建的全过程介绍(六)——物联网TSDB之基本知识及读写代码介绍

目录 一、TSDB基本知识 二、物联网平台数据流通架构 三、TSDB数据结构 1、TSDB数据包的组成 2、TSDB的另外两个相关概念 四、阿里云物联网平台实例内TSDB功能介绍 1、数据写入 (1)需要添加的依赖 (2)写入数据代码 2、数据…

ES6—简介

目录 一、概述 二、扩展:Babel转码器 三、拓展:编译打包 一、概述 概念 ES6全称ECMAScript 6.0,是Javascript语言的下一代标准,2015年6月正式发布。 注意,ES6既是一个历史名词,也是一个泛指,…

深入浅出ES6(一):ES6是什么

深入浅出ES6(一):ES6是什么 作者 Jason Orendorff ,译者 刘振涛 发布于 2015年6月5日 | http://www.infoq.com/cn/articles/es6-in-depth-an-introduction 我的阅读清单 编者按:ECMAScript 6离我们越来越近了&#…

[ 前端开发 ] 为什么要学习ES6?

ECMAScript 6 概念 ECMAScript 6 简称 ES6 为什么要学习ES6? ES6 是 JavaScript 的下一个版本标准,诞生于2015年6月份。ES6 的主要目的是为了解决 ES5 的先天不足。ES6 的终极目标是为了使 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业…

前端基础之ES6

ES6 ES6简介 ES6实际上是一个泛指,泛指ES2015及后续版本 为什么使用ES6? 每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。 变量提升特性增加了程序运行时的不可预测性语法过于松散&#x…

第一节:ES是什么?ES6是什么?

系列文章目录 第一节:ES是什么?ES6是什么? 文章目录 系列文章目录前言一、ES是什么?二、ES6是什么? 前言 学习一下ES,都是自己学习的总结和理解,大家有什么问题都可以提出,一起讨论…

1.什么是ES6,为什么使用它

1.什么是ES6? ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。Mozilla公司将在这个标准的基础上,推出JavaScript 2.0。ES6主要是为了解决ES5的先天不足,比如JavaScri…

ES6是什么

ES6是什么 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。 它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 现在大部分的编…

ES6是什么?通俗理解

1.了解一门语言,首先要搞明白它到底是什么? ECMA (Eurupean Compuler Manuluclurers Assuxiation)中文名为欧洲计算机制造商协会,这个组织的日常是评估、开发和认可电信和计算机标准。19919 年后该组织改名为ECMA国际。 ES6是门脚本语言&…

list集合转换成string字符串

集合转换成字符串 闲来无事&#xff0c;总结了几种list转换成string的方法 第一种 <jdk8新特性&#xff0c;string集合、integer集合均可随意转换成string> 个人觉得这个方法应该属于jdk8的新特性 ArrayList<String> arrayList new ArrayList<String>(){{…

python set转为list_python 怎么把set转成list

今天小就为大家分享一篇python-list,set间的转换实例&#xff0c;具有很好的参考价值&#xff0c;推荐手册&#xff1a;Python 基础入门教程 其实python中&#xff0c;set转list的非常的简单&#xff0c;直接将set的值放入list()的括号中即可&#xff0c;相反&#xff0c;list转…

Java list转set;JDK8 下list 集合转Set 集合

List 集合转Set 集合 1. List 集合和Set 集合的区别 在说如何List集合转Set 集合之前我们先回顾一下 List 集合和Set 集合的区别, 细致上说List 集合和Set 集合的区别还是有蛮多的有兴趣的同学可以去看一下源码&#xff0c;粗糙地讲List 集合和Set 集合的区别主要有那么几点 …

Java中的List与Set转换

一、List列表与Set列表的区别 List列表是有序、可以重复、线程不安全的列表,Set是无序、不能重复、线程不安全的列表。但List和Set可以通过方法来转换为线程安全的&#xff0c;加互斥锁。 Set<Long> setnew HashSet<>();// 转换为线程安全的集合Collections.sy…

BigDecimal中divide方法与setScale方法详解

BigDecimal中divide方法详解 1、首先说一下用法&#xff0c;BigDecimal中的divide主要就是用来做除法的运算。其中有这么一个方法. public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode)第一个参数是除数&#xff0c;第二个参数代表保留几位小数&#x…

BigDecimal加减乘除及setScale的用法小结

Bigdecimal初始化&#xff1a; BigDecimal num new BigDecimal(2.225667);//这种写法不允许&#xff0c;会造成精度损失。 BigDecimal num new BigDecimal("2.225667");//一般都会这样写最好。 两种方式在下面会有实例比较。 一、setScale 1. ROUND_DOWN BigDecima…

2018年5-7月面试经历总结:阿里面试题

第一轮&#xff1a;电话初面 第二轮&#xff1a;技术面谈【技术职位尽量避免多谈管理上的工作】 第三轮&#xff1a;高管复试 第四轮&#xff1a;HR最后确认 一面&#xff1a;首先确认对阿里的意向度&#xff08;如果异地更会考虑对工作地点(杭州&#xff09;的意向度&#…

腾讯、阿里面试题 了解B+树吗?

腾讯、阿里面试题: 了解B树吗&#xff1f; 由于MySQL的索引结构是B树&#xff0c;所以B树是大厂的高频面试题,想理解B树&#xff0c;最好先理解B树&#xff0c;下面详细介绍B树、B树 B树 B树的概念 B树又称为B-树&#xff0c;是一种平衡多路查找树&#xff0c;描述B树&#x…

2021.3.10阿里面试题

获得第一行 n m ktempinput() templisttemp.split(" ") nint(templist[0]) mint(templist[1]) kint(templist[2])获得城市二维列表city[] for i in range(n):temp input()templist list(temp)if in templist: #找到起始位置&#xff0c;然后记录下标&…