跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
时间序列数据库
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= 时间序列数据库 = 时间序列数据库(Time Series Database, TSDB)是一种针对'''时间序列数据'''优化的非关系型数据库,专为高效存储、查询和分析按时间顺序记录的数据点而设计。这类数据库广泛应用于物联网(IoT)、金融分析、监控系统等领域,其核心特点是'''高写入吞吐量'''、'''时间索引优化'''和'''数据压缩能力'''。 == 核心特性 == 时间序列数据库的独特设计使其在以下场景中表现优异: * '''时间为主键''':数据按时间戳自动排序,支持快速范围查询。 * '''高效写入''':适应高频数据插入(如传感器每秒数千次读数)。 * '''降采样(Downsampling)''':自动聚合历史数据以减少存储占用。 * '''保留策略(Retention Policies)''':自动删除过期数据。 === 数据模型示例 === 典型时间序列数据点包含: * 时间戳(Timestamp) * 指标名称(Metric) * 标签(Tags,用于多维分类) * 数值(Value) 用伪代码表示: <syntaxhighlight lang="json"> { "timestamp": "2023-05-01T12:00:00Z", "metric": "temperature", "tags": {"sensor_id": "A1", "location": "Berlin"}, "value": 23.7 } </syntaxhighlight> == 主流时间序列数据库 == {| class="wikitable" ! 名称 !! 特点 !! 查询语言 |- | InfluxDB || 开源,内置处理引擎 || Flux/InfluxQL |- | TimescaleDB || PostgreSQL扩展,支持SQL || SQL |- | Prometheus || 监控专用,拉取模式 || PromQL |} == 实战示例 == === 使用InfluxDB写入数据 === <syntaxhighlight lang="bash"> # 写入单条数据(Line Protocol格式) curl -i -XPOST "http://localhost:8086/write?db=mydb" \ --data-binary "temperature,sensor_id=A1,location=Berlin value=23.7 1682947200" </syntaxhighlight> === 查询最近1小时数据 === <syntaxhighlight lang="sql"> -- InfluxQL示例 SELECT MEAN("value") FROM "temperature" WHERE "location" = 'Berlin' AND time > now() - 1h GROUP BY time(10m) </syntaxhighlight> 输出结果示例: <syntaxhighlight lang="json"> { "results": [{ "series": [{ "name": "temperature", "columns": ["time", "mean"], "values": [ ["2023-05-01T11:00:00Z", 23.5], ["2023-05-01T11:10:00Z", 23.8] ] }] }] } </syntaxhighlight> == 存储架构 == <mermaid> graph LR A[写入请求] --> B[内存缓冲] B --> C[WAL预写日志] C --> D[按时间分片存储] D --> E[压缩/合并] E --> F[长期存储] </mermaid> 关键过程: 1. 数据首先缓存在内存 2. 通过预写日志(WAL)保证持久性 3. 定期将内存数据写入磁盘(按时间分片) 4. 后台压缩减少存储空间 == 数学基础 == 时间序列数据库常用'''时间衰减函数'''处理近期数据权重: <math> w(t) = e^{-\lambda t} </math> 其中: * <math>\lambda</math> 为衰减系数 * <math>t</math> 为时间差 == 应用案例 == '''工业物联网监控系统''': * 每台设备每秒上报温度、振动数据 * 实时检测异常(如温度突升) * 长期分析设备退化趋势 '''实现代码片段'''(Python + InfluxDB): <syntaxhighlight lang="python"> from influxdb_client import InfluxDBClient client = InfluxDBClient(url="http://localhost:8086", token="mytoken") write_api = client.write_api() data = [ { "measurement": "vibration", "tags": {"machine": "press-1"}, "time": "2023-05-01T12:00:00Z", "fields": {"value": 0.87} } ] write_api.write(bucket="factory", record=data) </syntaxhighlight> == 性能优化技巧 == * 合理设置'''分片粒度'''(如按天/小时分片) * 使用'''批量写入'''减少I/O次数 * 预定义'''保留策略'''自动清理旧数据 * 对标签(tags)建立索引加速查询 == 扩展阅读 == * 时序数据压缩算法:Gorilla、ZSTD * 分布式TSDB的横向扩展方案 * 流处理引擎(如Flink)与TSDB的集成 该内容通过理论解释、代码示例和可视化图表,为初学者和高级用户提供了时间序列数据库的全面视角,强调其在实际系统中的关键作用和技术实现细节。 [[Category:计算机科学]] [[Category:数据库与信息系统]] [[Category:非关系型数据库]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)