技术论文
时间序列数据库(TSDB)详解
在这篇技术论文中,InfluxData 首席技术官 Paul Dix 将为您介绍时间序列是什么(以及不是什么),以及它与其他解决方案(如流处理、全文搜索)的不同之处。
阅读这篇技术论文,您将
- 了解时间序列数据无处不在的原因,
- 了解为何专用 TSDB 非常重要。
- 了解时间序列数据库如何优化时间戳数据。
- 了解指标、事件、跟踪之间的差异以及时间序列数据的一些关键特性。
下载这篇技术论文
什么是时间序列数据库?
时间序列数据库(TSDB)是一种针对 时间戳或时间序列数据 优化的数据库。时间序列数据是随时间跟踪、监控、降采样和聚合的测量或事件。这可能包括服务器指标、应用程序性能监控、网络数据、传感器数据、事件、点击、市场交易以及许多其他类型的分析数据。
时间序列数据库是专门为处理带有时间戳的指标和事件或测量而构建的。TSDB 优化了随时间测量的变化。使时间序列数据与其他数据工作负载有很大不同的属性包括数据生命周期管理、汇总和大量记录的大范围扫描。
为什么现在时间序列数据库很重要?
时间序列数据库并不新鲜,但第一代时间序列数据库主要集中在查看金融数据、股票交易的波动以及旨在解决交易的系统。但金融数据绝不是时间序列数据应用的唯一 应用 —— 事实上,它只是众多应用中的一种,这些应用遍布各个行业。在过去十年中,计算的基本条件发生了巨大的变化。一切都变得模块化。单体主机已经消失,被无服务器服务器、微服务器和容器所取代。
今天,任何可以成为组件的东西都是组件。此外,我们正在见证物质世界的每个可用表面的仪器化——街道、汽车、工厂、电网、冰盖、卫星、服装、手机、微波炉、牛奶容器、行星、人体。所有东西都有,或者将有,传感器。因此,现在,公司内外的一切都在不断地发出指标和事件或时间序列数据。
这意味着底层平台需要进化以支持这些新的工作负载——更多的数据点、更多的数据源、更多的监控、更多的控制。我们所见证的,以及时代所要求的,是我们如何对待数据基础设施、如何构建、监控、控制和管理系统的一种范式转变。我们需要的是一个性能优良、可扩展、专为时序数据库设计的数据库。
什么是时序工作负载的区别?
时序数据库具有一些关键的架构设计特性,使其与其他数据库非常不同。这些包括时间戳数据存储和压缩、数据生命周期管理、数据摘要、处理大量时序依赖扫描的能力,以及时序感知查询。
例如:使用时序数据库,通常需要请求一个长时间段内数据的摘要。这需要遍历一系列数据点来执行一些计算,比如本月的某个指标与去年同期同期的百分位数增加,按月汇总。这种工作负载很难用分布式键值存储进行优化。TSDB的优化正是针对这种用例,提供毫秒级的查询时间,跨越数月的数据。另一个例子:在使用时序数据库时,通常会在短时间内保留高精度数据。这些数据被聚合并下采样为长期趋势数据。这意味着,对于进入数据库的每一个数据点,在其时间结束后都需要被删除。这种类型的数据生命周期管理对应用开发者来说很难在常规数据库上实现。他们必须设计出一种方案,以低成本地删除大量数据,并在规模上持续汇总这些数据。时序数据库提供了这种功能,无需额外开发。
独立排名前 15 的时间序列数据库
时序数据库是数据库行业增长最快的部分。但哪个时序数据库是最好的、最受欢迎的?有许多确定受欢迎程度的方法,但一个独立网站DB-Engines根据搜索引擎受欢迎程度、社交媒体提及、职位发布和技术讨论量对数据库进行排名。(阅读他们的完整方法)。以下是当前的结果
要查看时间趋势,以下图形显示了前10个时序数据库及其历史变化
时序——增长最快的数据库类别
DB-Engines还根据受欢迎程度对时序数据库管理系统(Time Series DBMS)进行排名。在过去一年中,时序数据库是数据库行业增长最快的部分。
InfluxDB 时间序列数据库的独特之处
InfluxDB是从头开始构建的专门用于时序数据库;也就是说,它不是为了时序而改用的。时间从一开始就被内置。InfluxDB是综合平台的一部分,支持时序数据的收集、存储、监控、可视化和警报。它不仅仅是时序数据库。
整个InfluxData平台都是基于一个开源数据库核心构建的。InfluxData是Telegraf[1]、[2]InfluxDB、[3]Chronograf和[4]Kapacitor(TICK)项目的积极贡献者——TICK堆栈中的“I,C,K”正在合并成一个单一的[5]InfluxDB 2.0二进制文件——并在开源核心上销售[6]InfluxDB企业版和[7]InfluxDB云服务。InfluxDB的数据模型与Graphite、RRD或OpenTSDB等其他时间序列解决方案截然不同。InfluxDB有一个用于发送时间序列数据的行协议,其格式如下:measurement-name tag-set field-set timestamp
。测量名称是一个字符串,标签集是一组键/值对,其中所有值都是字符串,字段集是一组键/值对,其中值可以是int64、float64、bool或字符串。测量名称和标签集被保存在一个倒排索引中,这使得查找特定系列非常快速。例如,如果我们有[8]CPU指标
cpu,host=serverA,region=uswest idle=23,user=42,system=12 1464623548s
InfluxDB中的时间戳可以是秒、毫秒、微秒或纳秒精度。微秒和纳秒的刻度使得InfluxDB成为金融和科学计算等领域的一个很好的选择,在这些领域中,其他解决方案会被排除。压缩取决于用户需要的精度级别。在磁盘上,数据以列式格式组织,其中连续的时间块被设置为测量、标签集和字段。因此,每个字段在磁盘上按时间块顺序组织,这使得在单个字段上计算聚合操作非常快。可用的标签和字段数量没有限制。
其他时间序列解决方案不支持多个字段,这可能会使得当使用共享标签集传输数据时网络协议变得臃肿。大多数其他时间序列解决方案只支持float64值,这意味着用户无法将其他元数据编码到时间序列中。即使是支持标签(与Graphite和RRD不同)的OpenTSDB和KairosDB,对可用的标签数量也有限制。大约有5到6个标签时,用户将在其HBase或Cassandra机器集群中看到热点。
InfluxDB没有这种限制,因为InfluxDB的数据模型是为时间序列专门设计的。它通过索引标签并保持字段未索引来引导开发者以获取数据库的良好性能。它在这方面很灵活,因为它支持多种数据类型,用户可以有多个字段和标签。由于所有这些因素,像InfluxDB这样的专用时间序列数据库是处理时间序列数据的最佳解决方案。
时间序列数据库:常见问题解答
以下是关于时间序列数据库常见问题的简要回答,供快速参考
什么是时间序列数据库?
以下是对时间序列数据库的简要定义:时间序列数据库(TSDB)是一种针对时间戳(时间序列)数据和时间变化的测量进行优化的数据库。
最好的时间序列数据库是什么?
访问这个页面了解什么构成了强大的时间序列数据库,以及哪个[9]数据库最适合存储大量时间序列数据。
时间序列数据有哪些示例?
访问[10]什么是时间序列数据页面,查看时间序列数据示例。
InfluxDB是开源的吗?
InfluxDB是一个[11]开源时间序列数据库,拥有庞大而活跃的社区。
我可以用Grafana使用InfluxDB吗?
有数千个案例使用InfluxDB和Grafana。访问我们的社区展示,了解相关信息。
InfluxDB与其他数据库相比如何?
查看InfluxDB基准测试,比较其性能与其他数据库(如Cassandra、Elasticsearch、MongoDB、OpenTSDB、Graphite和Splunk)的性能,基于参数如写入吞吐量、查询吞吐量和磁盘存储。
时间序列数据库是否比关系型数据库更适合处理时间序列数据?
如果您在时间序列数据库和关系型数据库之间犹豫,时间序列数据库(TSDB)专门用于排序和查询时间序列数据,通常比更通用的关系型数据库更高效。
我能否使用时间序列数据库进行边缘计算?
以可靠的方式将边缘数据传输到云端仍然是许多企业的挑战。阅读《InfluxDB边缘计算与数据复制》电子书,了解“边缘”是什么,边缘计算用例和优势,以及InfluxDB时间序列数据库如何用于边缘计算。
时间序列数据库与数据仓库有什么区别?
虽然时间序列数据库是针对时间戳或时间序列数据进行优化的数据库,但数据仓库将来自多个源的数据存储和组织在中央位置。