【Elasticsearch】时间序列数据流(Time Series Data Stream,TSDS)
Elasticsearch 的时间序列数据流(Time Series Data Stream,TSDS)是一种专门为存储和管理时间序列数据(如指标数据)而设计的数据结构。它通过优化存储和索引机制,能够高效地处理大规模时间序列数据,同时支持高效的查询和分析。以下是关于 TSDS 的详细说明,结合了之前翻译和解释的内容:
---
1.TSDS 的定义与用途
时间序列数据流(TSDS)将带时间戳的指标数据建模为一个或多个时间序列。它主要用于高效存储和查询时间序列数据,例如系统指标(CPU 使用率、磁盘 I/O)、金融数据(股票价格)、气象数据(温度、湿度)等。与普通数据流相比,TSDS 在存储效率和查询性能上有显著优势,尤其适用于以下场景:
• 数据以近实时的方式写入。
• 数据按时间顺序(`@timestamp`)插入。
• 数据量大且需要高效压缩和查询。
---
2.TSDS 的关键特性
2.1高效存储
• 数据压缩:TSDS 使用内部排序和压缩算法,将具有相同维度的文档存储在一起,从而实现高效的数据压缩。在基准测试中,TSDS 的存储空间比普通数据流减少了约 70%。
• 时间绑定索引:TSDS 使用时间绑定的后端索引,将相同时间段的数据存储在同一个索引中。这种设计不仅提高了查询效率,还减少了索引的碎片化。
2.2维度与指标
• 维度字段:维度字段用于标识时间序列的唯一性。它们通常是不变的属性,例如传感器 ID、地理位置等。支持的字段类型包括`keyword`、`ip`、`integer`等,并通过`time_series_dimension`参数标记。
• 指标字段:指标字段是时间序列中的可变数值,例如温度、CPU 使用率等。它们可以通过`time_series_metric`参数标记,并支持多种类型(如`gauge`、`counter`)和聚合操作。
2.3自动生成的`_tsid`
• Elasticsearch 为每个 TSDS 文档自动生成一个`_tsid`元数据字段,该字段包含文档的维度信息。具有相同`_tsid`的文档属于同一时间序列。
• `_tsid`用于内部路由和查询优化,但不可直接查询或更新。
2.4基于维度的路由
• TSDS 使用`index.routing_path`设置,根据文档的维度字段将数据路由到相同的分片。这种设计确保了相同时间序列的数据存储在一起,从而提高了压缩效率和查询性能。
• 不支持自定义`_routing`值,必须通过维度字段进行路由。
2.5时间范围限制
• TSDS 设计用于摄取当前时间的数据,每个后端索引都有一个可接受的时间范围(由`index.time_series.start_time`和`index.time_series.end_time`定义)。
• 通过`index.look_back_time`和`index.look_ahead_time`设置,可以配置索引接受数据的时间范围。超出范围的数据将被拒绝。
---
3.TSDS 的工作原理
3.1索引模板
• TSDS 的索引模板必须包含`index.mode: time_series`设置,以启用时间序列相关功能。
• 模板还需要定义至少一个维度字段(`time_series_dimension`)和一个指标字段(`time_series_metric`)。
3.2数据写入
• 文档写入时,Elasticsearch 根据文档的`@timestamp`值选择合适的后端索引进行存储。
• 如果文档的时间戳超出索引的时间范围,Elasticsearch 会拒绝该文档。
3.3数据查询
• 查询时,Elasticsearch 利用`_tsid`和时间范围优化查询性能。
• 支持按时间序列聚合和分析,例如计算时间序列的平均值、最大值等。
---
4.TSDS 的优势
• 高效存储:通过压缩和优化索引结构,显著减少磁盘空间占用。
• 高性能查询:基于时间范围和维度的优化,提高了查询效率。
• 自动管理:Elasticsearch 自动处理索引滚动、时间范围更新等操作,减少了运维成本。
---
5.适用场景
• 系统监控:用于存储和分析系统指标(如 CPU 使用率、内存使用率)。
• 金融数据:跟踪股票价格、交易量等时间序列数据。
• 物联网:存储来自传感器的实时数据(如温度、湿度、设备状态)。
• 日志分析:虽然 TSDS 主要用于指标数据,但也可以用于某些时间序列化的日志数据。
---
6.限制与注意事项
• 仅适用于指标数据:TSDS 专为时间序列指标设计,不适合存储日志或追踪数据。
• 时间顺序写入:数据需要按时间顺序插入,否则可能影响性能。
• 维度字段限制:维度字段必须是静态的,不能动态更改。
• 查询限制:某些查询操作可能受到`_tsid`和时间范围的限制。
---
7.总结
Elasticsearch 的时间序列数据流(TSDS)是一种高效、优化的时间序列数据存储解决方案。它通过时间绑定索引、基于维度的路由和数据压缩等技术,显著提高了存储效率和查询性能。TSDS 特别适用于需要高效处理大规模时间序列数据的场景,如系统监控、金融数据分析和物联网应用。然而,它也有一些限制,例如对数据写入顺序和维度字段的严格要求。因此,在使用 TSDS 时,需要根据具体需求权衡其优势和限制。