时序数据在现代系统中无处不在——从物联网传感器和金融市场到应用监控和用户分析。随着组织收集更多的时间数据,他们需要有效的方式来存储、处理和分析这些数据。
本文探讨了时序数据库、其用例以及不同的数据库解决方案如何处理基于时间的数据。无论您是在处理数百万个传感器读数、跟踪用户行为还是监控系统性能,了解时序数据存储的选项对于构建有效的数据系统至关重要。
什么是时序数据?
让我们首先定义时序数据。它描述了沿时间轴捕获观测值的数据集,关键特征是时间戳。这些数据点以固定间隔(例如,每秒、每分钟或每天)或不规则间隔(当事件不可预测地发生时)收集。
例如,虽然气象传感器可能以固定的间隔(例如,每 10 秒)收集读数,但服务器系统中的错误日志仅在发生错误事件时记录数据,这可能在任何时间发生。两者都是时序数据的形式,因为它们表示随时间变化的数据,无论这些变化是周期性的还是偶发的。
让我们更详细地了解数据收集方法
- 固定间隔采样: 此方法在一致的时间点捕获数据,提供可预测且连续的信息流。示例包括气象传感器、心率监测器和电能表。由于点均匀分布,因此此数据对于查看特定时期的趋势非常有利。
- 事件驱动数据: 时序数据也可以不规则地捕获,由特定事件触发。例如,服务器每次发生特定错误时都会记录数据,这可能在一小时内发生多次,也可能几个小时不发生。其他示例包括来自网站的点击流数据(点击发生的时间不可预测)或社交媒体帖子,这完全取决于用户活动。
在分析时序数据时,我们经常按不同的时间段切片或分组,以了解数据随时间的变化情况。这种分析跨时间变化的能力定义了时序数据——任何随时间以任何方式变化的数据都属于此类。
以下是气象传感器可能生成的消息示例
{
"device_id": "sensor-12345",
"timestamp": "2024-12-04T10:15:00Z",
"location": {
"latitude": 40.7128,
"longitude": -74.0060,
"altitude": 15.5
},
"metrics": {
"temperature": 23.5,
"humidity": 60,
"pressure": 1013.25,
"battery_level": 85,
"signal_strength": -70
},
"status": {
"operational": true,
"last_maintenance": "2024-11-20T08:00:00Z"
}
}
在此示例中,捕获了几个指标,例如 temperature
、humidity
和 pressure
。这些指标不断变化,通常频率很高。此外,我们还有元数据,例如 device_id
和 location
,它们为测量地点和测量内容提供上下文,但变化频率远低于指标,甚至可能根本不变化。还有状态信息,其中包括 operational
状态和 last_maintenance
日期等详细信息。
最后,每个数据点都与一个时间戳相关联,表示何时进行观测。此时间戳对于理解指标如何演变至关重要,使我们能够检测模式或趋势。
时序数据的用例
时序数据库可以支持广泛的应用,每种应用都受益于存储和分析随时间变化的数据的能力。让我们探讨一些常见的用例以及它们如何帮助组织回答问题。
产品分析
产品分析通过用户交互、系统事件和事务生成丰富的时序数据。每次点击、页面浏览、功能交互和购买都会被加上时间戳,从而创建用户行为随时间变化的详细记录。这种时间数据使团队能够回答有关其产品的关键问题:用户如何导航产品?哪些路径可以成功转化?哪些行为表明可能的用户流失?用户通常在何时发现和采用新功能?
时序分析在产品分析中的强大之处在于,它不仅可以了解用户做了什么,还可以了解用户何时以及以何种顺序做了这些事情。团队可以跟踪用户的入职过程、衡量转化时间、分析留存模式以及识别推动参与度的功能。通过将这些行为与其他指标(如性能数据)相关联,组织可以全面了解其产品的有效性,并根据数据驱动的决策进行产品开发。
➡️ 阅读更多关于 使用 ClickHouse 构建产品分析 的信息
金融市场和交易
从传统的证券交易所到加密货币交易平台,金融市场产生大量的时序数据。必须实时捕获和分析每次价格变动、交易和订单簿更新。此数据对于生成交易信号、执行技术分析和识别市场机会至关重要。
时序分析对于创建标准交易工具(如显示特定时间间隔内价格变动的蜡烛图)尤为重要。这些图表需要快速的价格数据聚合(开盘价、最高价、最低价、收盘价),时间窗口从几分钟到几个月不等。交易员还需要分析市场流动性、计算技术指标并同时检测多个资产或交易场所的模式。快速处理这些数据至关重要——即使是微小的延迟也可能意味着错失交易机会或增加风险。
例如,加密货币交易平台必须聚合来自多个区块链网络和去中心化交易所的数据,每天处理数百万次价格更新,同时保持亚秒级的查询响应时间。这使交易员能够发现套利机会、跟踪市场趋势并做出实时交易决策。
➡️ 阅读更多关于 Coinhall 如何使用 ClickHouse 为其区块链数据平台提供支持 的信息
系统和应用程序可观测性
现代应用程序生成大量必须实时监控的运营数据。从服务器指标到用户行为,组织需要跟踪从系统健康状况到用户体验的一切信息。这种可观测性数据通常包括系统指标(CPU、内存、网络)、应用程序遥测数据(响应时间、错误率)和用户交互数据。
时序分析使团队能够通过实时仪表板可视化这些数据、跟踪性能趋势并快速识别问题。例如,团队可以跨不同区域监控应用程序性能、跟踪用户参与度指标并分析 A/B 测试的实验结果。关联各种指标(从基础设施健康状况到用户行为)的能力有助于组织了解系统性能如何影响用户体验和业务成果。
通过将这些数据存储在时序数据库中,团队不仅可以监控当前的系统状态,还可以分析历史模式、建立基线并检测可能指示潜在问题的异常情况。这种对系统行为的全面视图对于维护可靠的服务和优化用户体验至关重要。
➡️ 了解 Skool 如何使用 ClickHouse 可视化实时可观测性并监控用户行为。
什么是时序数据库?
现在我们已经定义了时序数据并看到了一些示例,那么存储这些数据需要什么?时序数据库 (TSDB) 是一种可以高效存储、管理和分析时序数据的数据库。
这样的数据库需要具备以下特征
- 数据量 - 时序数据由于测量频率高(例如,传感器每秒读取一次)而快速增长。当在短时间内生成数百万个数据点时,传统数据库可能会难以维持性能。相反,我们需要一个针对附加新数据进行优化的数据库。
- 写入和查询性能 - 时序数据涉及频繁的写入(持续插入新的数据点)和用于分析的复杂查询(例如,随时间推移的聚合)。我们的数据库需要高效的基于时间的索引,或者在摄取期间按时间戳对数据进行排序的能力。
- 高效的存储和压缩——由于时序数据通常包含许多重复或非常相似的值,因此高效地存储数据至关重要。基于列的存储在这里是一个优势,因为同一列中的值彼此相邻存储。我们还需要使用编解码器,允许我们存储值之间的增量,而不是每次都存储原始值。增量编码是一种常用的存储时间戳的编解码器。
- 基于时间的聚合——时序分析通常涉及基于时间的查询,例如计算每日平均值或对几周内的指标求和。我们需要能够对大量数据运行这些类型的查询,同时还能够按时间段进行过滤。
这些特征中的许多与 实时分析数据库 所需的特征相同。
时序数据库示例
时序数据库可以分为三种主要类型:专用时序数据库、其他数据库的扩展以及实时分析/基于列的数据库。以下是一些常见的示例
专用时序数据库
从头开始设计的专用数据库,用于高效处理带时间戳的数据,提供优化的时间数据存储和查询机制,包括截至连接、专用数学函数、降采样、分组间隙填充等。下面介绍一些示例
- InfluxDB - InfluxDB 专为时序数据而设计,可处理高写入负载,并提供降采样和数据保留策略等功能,使其非常适合物联网、DevOps 指标和实时监控。
- QuestDB - 一种高性能开源时序数据库,擅长快速 SQL 查询和高吞吐量摄取。
- Prometheus - 一种开源监控系统,主要为系统和服务监控而设计。Prometheus 擅长从各种端点抓取指标、高效存储这些指标以及根据这些指标启用警报。它非常适合服务器健康状况监控和应用程序性能指标等用例。
关系数据库的扩展
传统的 关系数据库可以通过时序功能进行增强,将 SQL 的熟悉性和灵活性与专门的时间功能相结合。
TimescaleDB 是 PostgreSQL 的扩展。TimescaleDB 添加了基于时间的功能,例如自动分区和基于时间的索引。它非常适合您想要将关系数据与时序数据混合的场景,例如在商业智能或物联网中。
实时分析/基于列的数据库
针对快速大规模数据分析优化的系统,使用 列式存储 来实现快速聚合和实时处理时序信息。下面介绍一些示例
- Apache Pinot - Pinot 专为实时、低延迟分析而设计,非常适合面向用户的仪表板或点击流分析等应用程序,提供亚秒级的查询响应时间。
- ClickHouse - 就是我们!ClickHouse 最初旨在记录来自互联网上所有人的所有点击,但现在用于各种以时间为中心的数据集,特别关注可观测性。
查询时序数据
时序数据库提供专门的查询功能,旨在高效处理时间数据。虽然许多现代时序数据库使用带有扩展的 SQL,但有些数据库开发了自己的查询语言,专门针对时序操作进行了优化。
大多数时序数据库都使用专门用于时间分析的函数扩展了标准 SQL。这些扩展通常包括
- 用于分析特定时间间隔内数据的时间窗口函数
- 用于处理丢失数据点的间隙填充
- 用于估计已知数据点之间值的插值函数
- 用于将数据分组为规则时间间隔的时间桶操作
- 用于时序分析的专用数学函数
Prometheus 使用一种特定于域的查询语言,称为 PromQL,专门为时序分析和监控用例而设计。PromQL 内置支持速率计算和随时间推移的聚合、标签和标签匹配的本机处理以及向量和范围向量选择器。它特别适合监控场景,在这些场景中,您必须分析时间窗口内的指标并创建警报规则。
InfluxDB 最初使用一种名为 InfluxQL 的查询语言,该语言类似于 SQL,但明确为时序操作而设计。在 InfluxDB 2.0 中,他们引入了 Flux,这是一种功能更强大的基于 SQL 的语言,然后在添加 SQL 支持之前,使该平台更易于熟悉传统数据库查询的用户使用。
ClickHouse 是时序数据库吗?
虽然 ClickHouse 并非专门设计为时序数据库,但它擅长处理时序工作负载,这是其更广泛的分析功能的一部分。
作为列式 OLAP 数据库,ClickHouse 提供了高效时序分析所需的性能和功能,而没有专用解决方案的局限性。
ClickHouse 在处理时序数据方面的优势来自几个关键功能
此外,ClickHouse 还提供了一些对于长期时序数据管理特别有价值的功能
- 物化视图,用于高效维护预聚合数据
- 支持 聚合状态,从而实现灵活的汇总策略
- 生存时间 (TTL) 功能,可以自动管理数据保留和聚合级别
这些功能意味着您可以实施复杂的时序存储策略,例如将近期数据保持在完整粒度,同时自动汇总较旧的数据以节省空间。这种方法既提供了用于运营需求的详细近期数据,又提供了用于长期分析的高效历史数据存储。
ClickHouse 还通过 Time Series 表引擎 等实验性功能扩展了其时序功能,该引擎可以作为 Prometheus 数据的后备存储。这使组织能够利用 ClickHouse 的分析功能,同时保持与流行的时序监控工具的兼容性。
ClickHouse 不仅限于特定于时序的功能,还允许您处理时序工作负载以及其他分析查询,从而为具有多样化数据分析需求的组织提供更通用的解决方案。
➡️ 在 我可以使用 ClickHouse 作为时序数据库吗? 和 在 ClickHouse 中使用时序数据和函数 中阅读更多内容。