时序数据库全景指南:从场景选型到内核拆解

1. 什么是时序数据

时序数据(Time-Series Data) 是在时间上连续产生、且带有时间戳的观测值序列,典型特征:

维度描述
高并发写百万点/秒,追加为主
写多读少90 % 查询是降采样或聚合
时效性越新越热,旧数据价值递减
多维标签每条点带大量 tag(设备、区域、指标名)

示例:
cpu.usage{host=web01,region=bj} 2025-08-27 14:00:00 42.3


2. 时序数据库 vs 通用数据库

对比项时序数据库MySQL/PostgreSQL
存储模型列式 + 时间分区B+Tree 行存
写入方式LSM 追加随机写 + WAL
索引倒排 + 时间线B+Tree 复合索引
聚合算子预计算、降采样实时 GROUP BY
压缩比5–15×1–2×
单节点吞吐200–500 万点/秒1–5 万点/秒

3. 适用场景与真实案例

行业场景规模示例
物联网工业传感器、车联网某车企 2000 万车机 × 100 指标/秒
金融股票 Tick、风控日志某券商 2 亿条/日
DevOpsK8s 监控、APM某电商 50 万 Pod 指标/10 s
能源光伏逆变器、电网 PMU国家电网 60 TB/年
智慧城市环境监测、灯杆数据深圳 30 万设备/5 s

4. 产品地图

4.1 开源

名称语言特点
InfluxDBGoTSM 引擎,Flux 查询,集群版闭源
TimescaleDBC/PostgreSQL扩展形式,SQL 完全兼容
VictoriaMetricsGo单二进制、PromQL、S3 冷存
OpenTSDBJava基于 HBase,PB 级
IoTDBJava面向工业场景,树形元数据
TDengineC超级表,边云同步

4.2 商业 & 云托管

  • AWS TimestreamAzure Data ExplorerGoogle Cloud Bigtable + MDS
  • InfluxDB CloudTimescale CloudKdb+(高频交易)

5. 核心功能清单

功能说明示例
高吞吐写入HTTP/Line ProtocolInfluxDB curl -XPOST /write
多维标签任意键值对索引cpu,host=web01,region=bj
降采样自动 RollupCREATE CONTINUOUS QUERY
数据保留策略TTL + 分层7 d 原始 / 1 y 5 min 均值
SQL & PromQL多语言查询SELECT mean(value) FROM cpu GROUP BY time(1m)
插值 & 外推线性、前值填充FILL(previous)
订阅 & 告警Webhook、Kafkakapacitor / vmalert
数据压缩Gorilla、Delta-of-Delta1.2 byte/point
水平扩展Sharding、ReplicationVictoriaMetrics VMCluster

6. 技术原理六层拆解

6.1 数据模型

┌---------┬-----------┬----------┐
│ timestamp  │  value(float/int) │  tags(map[string]string) │
└---------┴-----------┴----------┘
  • Series Key = measurement + tag set(字典序)
  • Point = Series Key + timestamp + value

6.2 写入路径

Client → Line Protocol → HTTP → WAL → MemTable → Immutable → SSTable(TSM/Chunk)
  • WAL 顺序写,刷盘前宕机可重放
  • MemTable 按 Series+Time 排序,刷盘后生成只读块

6.3 存储格式(以 InfluxDB TSM 为例)

┌-------┬--------┬--------┐
│ Header │ Index Block │ Data Block │
└-------┴--------┴--------┘
  • Index Block:Series → Offset 映射,二分查找
  • Data Block:列式存储,timestamp & value 分开压缩
    • 时间戳:Delta-Delta + RLE
    • float:XOR (Gorilla)
    • string:Snappy

6.4 倒排索引

  • Tag → SeriesID List(类似 ES)
  • 支持 AND / OR / NOT 组合
  • 内存结构:Roaring Bitmap 压缩
  • 持久化:TSI 文件,重启 mmap 恢复

6.5 查询执行

1. Parse → Logical Plan
2. 根据 time range 过滤 Chunk
3. 根据 tag 过滤 Series
4. 并行扫描 → 预聚合
5. Merge → 排序 → 返回
  • 预聚合(Continuous Aggregate)
    CREATE MATERIALIZED VIEW ... WITH (timescaledb.continuous)
    每 1 min 自动更新 1 min 均值,查询直接命中物化表。

6.6 压缩与降采样

  • Gorilla:1.37 byte/point(官方论文)
  • ZSTD:适合字符串 tag
  • 降级策略
    原始 1 s → 5 min 均值 → 1 h 均值 → 1 d 均值 → 归档 S3 → Glacier

7. 性能调优与最佳实践

维度建议
模式设计控制 tag 值基数 < 100 k,避免高基数 tag
数据保留使用 RP + 分区表,历史数据 detach 到对象存储
写入批量 5k–10k 点 / req,开启 gzip 压缩
查询使用预聚合、避免 SELECT * 原始数据
资源内存 ≥ 倒排索引大小,SSD 存放热数据
监控Prometheus + Grafana:
  • influxdb_disk_bytes
  • vms_memory_usage
  • query_duration_seconds |

案例:某直播公司

  • 800 万 Series、200 万点/秒
  • 单机 InfluxDB → 改为 VictoriaMetrics Cluster(3 存储 + 2 插入 + 2 查询)
  • QPS ↑ 5×,磁盘 ↓ 60 %,P99 查询延迟从 2 s → 120 ms。

8. 未来趋势与总结

  1. Serverless + 对象存储:冷热分层到极致(Snowflake 模式)
  2. AI4DB:自适应压缩、索引推荐
  3. 流批一体:Flink + 时序库 → 实时降采样、异常检测
  4. 边缘协同:TDengine / IoTDB 边云同步,断网缓存
  5. 统一协议:OpenTelemetry、Arrow Flight SQL 成为事实标准

一句话总结

时序数据库用“顺序写、列式存、倒排索引、压缩算法、预聚合”五板斧,把“时间”这一维度变成了最大的性能红利;在 IoT、监控、金融等高并发场景,它是让“数据产生价值”的加速器,而不是简单的“又一个数据库”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94526.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析 Oracle 内存架构:驾驭 SGA 与 PGA 的性能艺术

引言&#xff1a;数据库的心脏与大脑如果说磁盘上的数据文件是 Oracle 数据库的“身体”&#xff0c;是永久存储的基石&#xff0c;那么内存结构就是其“心脏与大脑”。它负责所有计算活动的发生&#xff0c;决定了数据泵送的速度与效率。一个配置得当、运行顺畅的内存体系&…

竣工验收备案识别技术:通过AI和OCR实现智能化文档处理,提升效率与准确性,推动建筑行业数字化转型。

竣工验收备案是建设工程项目投入使用的最终法定程序&#xff0c;是确保工程符合规划、质量、消防、环保等各项要求的核心关口。传统的备案流程依赖大量纸质文档和人工审核&#xff0c;效率低下且易出错。随着人工智能与大数据技术的崛起&#xff0c;竣工验收备案识别技术应运而…

76 最小覆盖子串

76 最小覆盖子串 文章目录76 最小覆盖子串1 题目2 解答1 题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;…

趣味学Rust基础篇(变量与可变性)

这篇文章将用通俗的比喻和清晰的逻辑&#xff0c;带你深入理解 Rust 变量背后的核心思想&#xff0c;让你不仅“会用”&#xff0c;更能“明白为什么”。 Rust 的“盒子哲学”&#xff1a;变量、可变性、常量与隐藏 想象一下&#xff0c;Rust 里的变量就像一个个盒子。你把值&a…

2025年- H100-Lc208--912.排序数组(快速选择排序)--Java版

1.题目2.思路 快速选择排序的平均时间复杂度是O&#xff08;nlogn&#xff09;&#xff0c;最坏时间复杂度是O&#xff08;n^2&#xff09;&#xff0c;最好的时间复杂度是O&#xff08;nlogn&#xff09;&#xff0c;空间复杂度是O&#xff08;nlogn&#xff09;。 排序算法中…

解决 pdf.mjs 因 MIME 类型错误导致的模块加载失败问题

Mozilla PDF.js V4 开始&#xff0c;它官方分发确实只提供了 ESM 模块&#xff08;.mjs&#xff09;&#xff0c;没有以前的 pdf.js、pdf.worker.js UMD 版本了。 这个问题本质上是 浏览器要求以 application/javascript MIME 类型加载 ES Module&#xff0c;而你引入的 pdf.mj…

STM32八大模式

前言&#xff1a;STM32存在八大模式&#xff0c;分别如下推挽输出&#xff0c;开漏输出&#xff0c;复用推挽输出&#xff0c;复用开漏输出浮空输入&#xff0c;上拉输入&#xff0c;下拉输入&#xff0c;模拟输入STM32标准IO结构图如下&#xff1a;其中如下电路为保护电路&…

OpenCV4.X库功能全解---个人笔记

文章目录前言1.Core核心功能1.1 基本数据类型和结构&#xff1a;1.2 数组操作&#xff1a;1.3 数学函数&#xff1a;1.4 随机数生成&#xff1a;1.5 线性代数运算&#xff1a;1.6 常用数据结构和算法&#xff1a;1.7 XML/YAML文件读写&#xff1a;1.8 错误处理&#xff1a;1.9时…

代码随想录刷题Day44

二叉搜索树的最近公共祖先 这道题&#xff0c;可以沿用二叉树的最近公共祖先的求法进行求解&#xff0c;也就是root判断-左右子树递归求LCA-根据左右子树的LCA结果返回值这一套。 但是&#xff0c;如果要用上搜索二叉树的有序性这个信息的话&#xff0c;就可以直接在递归时候确…

springmvc的数据校验和处理的一个例子

JSR-303是Java 的标准规范&#xff0c;而 Spring MVC 对其提供了完美的支持和集成 1.JSR-303 的身份 JSR-303 是 Java 标准 JSR&#xff1a;Java Specification Request&#xff08;Java 规范请求&#xff09; JSR-303&#xff1a;Bean Validation 1.0&#xff08;Bean 验证规范…

SlowFast使用指南(三)——自建数据集

写在前面 在前两个章节初步使用了SlowFast&#xff0c;使用的都是官方给出的数据集。 附上链接&#xff1a; SlowFast使用指南&#xff08;一&#xff09;——demo运行-CSDN博客 SlowFast使用指南&#xff08;二&#xff09;——训练ava数据集-CSDN博客 本文尝试了使用自己的数…

Day26 树的层序遍历 哈希表 排序算法 内核链表

day26 树的层序遍历 哈希表 排序算法 内核链表 实现树的层序遍历&#xff08;广度遍历&#xff09; 使用队列辅助实现二叉树的层序遍历。算法核心思想是&#xff1a;从根节点开始&#xff0c;依次将每一层的节点入队&#xff0c;出队时访问该节点&#xff0c;并将其左右子节点&…

【系统分析师】高分论文:论快速应用开发方法及应用

【摘要】 我在某县卫生健康委员会公共卫生信息中心工作&#xff0c;是信息中心的负责人。2021年5月&#xff0c;我中心受县痪病预防控制中心委托&#xff0c;为某种痪病疫苗3期临床项日开发受试对象拦截系统。我负责系统架构设计、需求分析以及后期的部分编码工作。通过与庆病预…

4056:【GESP2403八级】接竹竿

/*4056&#xff1a;【GESP2403八级】接竹竿flag 数组 存储每个元素出现的位置&#xff0c;nxt[i]j;存储每个位置 后面第一次出现 与a【i】相等的位置//其中 a【i]a[j] :记录i的下一个位置 &#xff0c;flag 存储每个值的位置下一次 具有下一次&#xff0c;相当于的链表了&…

企业落地版 AutoGen 多智能体工程(完整示例)

企业生产级参考实现,目标是一套可直接部署的模板工程,包含: FastAPI HTTP API(任务提交、状态查询) Celery 异步任务队列(Redis Broker) PostgreSQL + pgvector(向量存储,RAG) SQLAlchemy + Alembic(ORM 与迁移) AutoGen 多智能体编排(Planner / Coder / Executor…

前端的请求协议对应java的接收

application/json前端发送 JSON 数据&#xff0c;后端用 RequestBody 接收并自动映射为 Java 对象。前端示例&#xff08;Axios&#xff09;&#xff1a;axios.post("/api/user", { name: "张三", age: 20 }, {headers: { "Content-Type": "…

esp32_hid_device 调试遇到的一些问题

nimble to windows10 22h2esp_hid_device 的keyboardReportMap在win10 22h2 csr4.0 下好像识别不了&#xff0c; Windows&#xff08;和大多数 BIOS/UEFI&#xff09;只认 6-byte key array 的 HID Keyboard 描述符。如果不是 6 个字节&#xff0c;Windows HID 驱动就会认为这不…

观察者模式 (Observer Pattern)与几个C++应用例子

1. 模式定义与核心思想 观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。当这个主题对象的状态发生变化时&#xff0c;它会自动通知所有观察者对象&#xff0c;使它们能够自动更新自己。核心思想&#xff1a; 解耦主题和观察者。主题…

[系统架构设计师]论文(二十三)

[系统架构设计师]论文&#xff08;二十三&#xff09; 一.论软件系统架构评估 1.架构所关注的质量属性主要有&#xff1a;性能&#xff0c;可用性&#xff0c;安全性&#xff0c;可修改性 1&#xff09;性能。性能是指系统的响应能力&#xff0c;即要经过多长时间才能对某个事件…

攻克 Java 分布式难题:并发模型优化与分布式事务处理实战指南

攻克 Java 分布式难题&#xff1a;并发模型优化与分布式事务处理实战指南 开场&#xff1a;从“摇摇欲坠”到“稳如磐石”&#xff0c;你的分布式系统进阶之路 你是否曾经遇到过这样的场景&#xff1f;精心打造的电商应用&#xff0c;在大促开启的瞬间&#xff0c;页面响应变得…