当前位置: 首页 > news >正文

从 MySQL 到 TSDB:初学者也能看懂的数据库类型入门

从 MySQL 到 TSDB:初学者也能看懂的数据库类型入门

📘 本文简介
本文从“TSDB 是不是时空数据库”这个问题出发,介绍关系型数据库、时序数据库、空间数据库、时空数据库,以及键值、文档、图数据库等常见数据库类型,并结合通用软件系统和设备监控场景,说明它们分别适合保存什么数据。

1. 为什么系统中会出现多种数据库?

刚接触后端系统时,很容易产生一个疑问:

系统已经有 MySQL 了,为什么还需要 TSDB?是不是所有数据都放进一个数据库就可以?

理论上,很多数据都可以勉强存进 MySQL;但“能够存储”不等于“适合存储”。

不同数据有不同特点:

  • 用户、角色和设备信息结构稳定,需要准确查询和修改;
  • 温度、功率等监测数据不断产生,而且主要按时间查询;
  • 车辆轨迹同时包含时间和位置;
  • 社交关系需要频繁查询“谁认识谁”;
  • 缓存数据要求读写速度快,但不一定需要长期保存。

因此,数据库并不是只有一种。数据库类型的区别,本质上是:

它采用什么方式组织数据,以及它最擅长解决哪类查询问题。


2. 先理解:数据库是什么?

数据库可以简单理解为一个“有组织的数据仓库”。

它不仅负责保存数据,还需要支持:

  • 新增数据;
  • 查询数据;
  • 修改数据;
  • 删除数据;
  • 建立数据之间的关系;
  • 保证多人同时操作时数据仍然正确;
  • 在数据量很大时依然尽量快速地返回结果。

例如,一个设备管理系统可能需要保存:

设备编号:DEVICE_01 设备名称:1号传感器 所属区域:A区域 设备型号:MODEL_X

同时还要保存设备不断上报的数据:

10:00 环境温度 23.1℃ 10:01 环境温度 23.3℃ 10:02 环境温度 23.4℃

这两类数据看起来都与设备有关,但它们的结构、更新频率和查询方式完全不同,因此适合使用的数据库也可能不同。


3. 关系型数据库是什么?

3.1 它是什么?

关系型数据库把数据组织成一张张“表”。

一张表通常包含:

  • :一条完整记录;
  • :记录中的某个属性;
  • 主键:唯一标识一条记录;
  • 外键:表示不同表之间的关联。

例如,设备表可以设计为:

iddevice_codedevice_namearea_id
1DEVICE_011号传感器101
2DEVICE_022号传感器101

区域表可以设计为:

idarea_namesystem_name
101A区域示例系统

device.area_id可以关联到area.id,表示某台设备属于哪个区域。

常见的关系型数据库包括:

  • MySQL;
  • PostgreSQL;
  • SQL Server;
  • Oracle;
  • SQLite。

3.2 为什么叫“关系型”?

这里的“关系”并不只是人与人之间的关系,而是指:

数据通过表、主键和外键建立关联。

例如:

设备表 ↓ area_id 区域表 ↓ system_id 系统表

这样可以避免在每条设备记录中重复保存大量区域和项目信息。

3.3 关系型数据库擅长什么?

关系型数据库适合:

  • 用户、角色和权限;
  • 设备基本信息;
  • 项目和区域配置;
  • 订单与支付记录;
  • 告警规则;
  • 审批流程;
  • 需要事务保证的数据。

所谓事务,可以通俗理解为:

一组操作要么全部成功,要么全部失败,不能只完成一半。

例如银行转账时:

  1. 账户 A 扣款;
  2. 账户 B 加款。

如果只扣款但没有加款,数据就出错了。关系型数据库通常很擅长保证这类操作的一致性。

3.4 SQL 是什么?

SQL 是 Structured Query Language 的缩写,即“结构化查询语言”。

它是操作关系型数据库的常用语言。例如:

SELECTdevice_nameFROMdeviceWHEREarea_id=101;

它表示:

查询device表中,所有属于 101 号区域的设备名称。

💡 核心结论
关系型数据库擅长保存结构明确、关系清晰、需要频繁修改并要求数据一致性的业务数据。

4. 时序数据库 TSDB 是什么?

4.1 它是什么?

TSDB 是Time Series Database的缩写,即“时序数据库”。

时序数据库专门用于保存:

按照时间持续产生的一系列数据。

例如一个温度传感器每分钟上报一次环境温度:

时间点位数值
10:00DEVICE_01_TEMPERATURE23.1
10:01DEVICE_01_TEMPERATURE23.3
10:02DEVICE_01_TEMPERATURE23.4

每条数据通常包含:

时间戳 + 指标或点位标识 + 数值 + 标签

例如:

时间:2026-07-28 10:01:00 点位:DEVICE_01_TEMPERATURE 数值:23.3 设备:DEVICE_01 区域:A区域

4.2 TSDB 是某一个具体软件吗?

不是。

TSDB 是一类数据库,不是某个固定产品的名字。

这类似于:

  • “关系型数据库”是一类数据库;
  • MySQL 是关系型数据库中的一个具体产品。

常见的时序数据库或时序存储系统包括:

  • InfluxDB;
  • TDengine;
  • Apache IoTDB;
  • TimescaleDB;
  • OpenTSDB;
  • Prometheus 的时序存储。

因此,文档只写“使用 TSDB”,只能说明使用了某类时序数据库,不能确定具体产品。

在项目中需要向后端确认:

当前系统具体使用的是哪一种 TSDB?

4.3 为什么需要时序数据库?

设备监控数据通常具有以下特点:

  • 写入频率高;
  • 数据量增长快;
  • 历史数据很少修改;
  • 大部分查询都带时间范围;
  • 经常计算平均值、最大值、最小值和总量;
  • 需要自动删除过期数据;
  • 需要对历史数据进行压缩和降采样。

例如,1 万个点位每分钟上报一次:

10000 × 60 × 24 = 1440 万条/天

如果长期保存,数据量会迅速增长。

MySQL 并非完全不能存这些数据,但随着数据量增大,表分区、索引、归档和查询优化会越来越复杂。TSDB 针对这种“按时间不断追加”的数据做了专门优化。

4.4 TSDB 擅长哪些操作?

1. 持续写入

设备不断上报:

  • 温度;
  • 湿度;
  • 功率;
  • 流量;
  • 压力;
  • 风机转速;
  • 设备状态;
  • 设备启停状态。
2. 按时间范围查询

例如:

查询 1 号设备过去 24 小时的温度变化。
3. 时间聚合

原始数据可能每秒一条,但前端图表不需要显示几十万条记录,可以聚合为:

  • 每分钟平均值;
  • 每小时最大值;
  • 每天总能耗。
4. 自动过期

时序数据库通常支持保留策略,也就是 TTL。

TTL 是Time To Live的缩写,可以理解为“数据有效期”。

例如:

数据保留时间:2 年 超过 2 年:自动删除
5. 数据压缩与降采样

降采样指的是将高频数据转换为低频统计数据。

例如:

原始数据:每秒 1 条 保存一年后:只保留每小时平均值

这样可以减少存储空间,同时保留长期趋势。


5. 空间数据库是什么?

5.1 它是什么?

空间数据库主要保存和查询“位置、形状和区域”等空间信息。

常见空间数据包括:

  • 一个点:设备位置、门店位置;
  • 一条线:道路、管线;
  • 一个面:行政区域、建筑范围;
  • 多边形:园区、地块;
  • 三维坐标:楼层、地下管网、三维模型位置。

例如:

设备编号:CAMERA_01 经度:120.20 纬度:31.50

空间数据库不仅能保存经纬度,还能完成普通数据库不擅长的空间查询,例如:

  • 查询距离某个位置 5 公里内的所有设备;
  • 判断某个点是否位于某个园区范围内;
  • 计算两条道路是否相交;
  • 找到距离当前位置最近的充电站;
  • 计算两个区域是否重叠。

5.2 经纬度为什么不能只用普通数字保存?

可以把经纬度分别存成两个数字字段:

longitude = 120.20 latitude = 31.50

但如果要计算“附近 5 公里”“点是否在区域内”“两条路线是否相交”,普通数字字段处理起来会比较麻烦。

空间数据库会提供专门的空间数据类型、索引和函数,使这些查询更高效、更准确。


6. 时空数据库是什么?

6.1 它是什么?

时空数据库同时关注两个维度:

  • 时间维度:什么时候发生;
  • 空间维度:在哪里发生。

例如车辆轨迹:

时间经度纬度速度
10:00120.2031.5060
10:01120.2131.5155
10:02120.2331.5262

每一条数据都同时回答:

车辆在什么时间,位于什么位置,当时状态如何?

6.2 时空数据库适合哪些场景?

  • 车辆轨迹;
  • 网约车调度;
  • 无人机飞行轨迹;
  • 人员移动;
  • 物流运输;
  • 气象空间分布;
  • 卫星遥感;
  • 动物迁徙;
  • 移动设备定位;
  • 城市交通分析。

6.3 时序数据库和时空数据库有什么区别?

时序数据库关心:

某个指标随时间怎么变化。

时空数据库关心:

某个对象在不同时间位于哪里,或者某个区域在不同时间发生了什么。

例如固定传感器设备:

位置长期不变 重点关注温度、状态随时间变化

这种数据通常更适合时序数据库。

例如移动中的车辆:

位置不断改变 同时需要分析时间和轨迹

这种数据更适合时空数据库。

⚠️ 注意:“带有时间字段”不等于时序数据库,“带有经纬度字段”也不等于时空数据库。关键要看系统主要进行什么类型的查询,以及数据库是否针对这些查询进行了专门优化。

7. 三种数据库的核心对比

对比维度关系型数据库时序数据库时空数据库
主要关注业务实体及关系指标随时间变化对象随时间和空间变化
常见数据用户、设备、订单、配置温度、功率、流量、日志指标车辆轨迹、人员移动、气象分布
典型查询某用户有哪些权限过去 24 小时平均功率某车辆昨天经过哪些区域
数据变化支持增删改查主要持续追加持续记录位置和时间变化
常用索引主键、普通索引、联合索引时间索引、标签索引时间索引、空间索引
主要优势关系清晰、事务可靠高频写入、时间聚合、TTL轨迹和空间范围查询
应用示例MySQL 存业务配置TSDB 存监测指标轨迹平台存移动记录

8. 其他常见数据库类型

数据库类型并不只有上面三种。下面介绍几类开发中经常遇到的数据库。

8.1 键值数据库

键值数据库使用:

Key → Value

的方式保存数据。

例如:

user:1001 → {"name":"张三","token":"abc"}

常见产品:

  • Redis;
  • Memcached。

它适合:

  • 缓存;
  • 登录状态;
  • 验证码;
  • 计数器;
  • 排行榜;
  • 临时数据;
  • 分布式锁。

可以把它理解成一个非常快的“字典”。

8.2 文档数据库

文档数据库通常以 JSON 类似的结构保存数据。

例如:

{"deviceCode":"AC_01","deviceName":"1号设备","sensors":[{"type":"temperature","unit":"℃"},{"type":"power","unit":"kW"}]}

常见产品:

  • MongoDB;
  • CouchDB。

它适合:

  • 字段经常变化的数据;
  • 不同记录结构不完全一致的数据;
  • 内容管理;
  • 商品详情;
  • 用户画像;
  • JSON 数据存储。

8.3 图数据库

图数据库使用“节点”和“边”表示数据及关系。

例如:

用户A --关注--> 用户B 用户B --购买--> 商品C 商品C --属于--> 类别D

常见产品:

  • Neo4j;
  • JanusGraph。

它适合:

  • 社交关系;
  • 知识图谱;
  • 推荐系统;
  • 风险关系分析;
  • 路径查询;
  • 组织关系。

图数据库的重点不是保存一张图片,而是保存复杂的“关系网络”。

8.4 搜索引擎型存储

搜索引擎型存储擅长全文检索和日志分析。

常见产品:

  • Elasticsearch;
  • OpenSearch。

它适合:

  • 搜索文章内容;
  • 搜索商品;
  • 日志检索;
  • 聚合分析;
  • 模糊匹配;
  • 多条件筛选。

例如搜索:

包含“设备故障”关键词的所有告警日志

使用 Elasticsearch 通常比直接在 MySQL 中做大规模模糊查询更合适。


9. 为什么一个系统会同时使用多个数据库?

现代系统经常采用“多数据库协作”,原因不是为了炫技,而是不同数据库各自承担最擅长的任务。

以一个通用设备监控系统为例:

设备传感器

数据采集服务

TSDB

实时分析服务

管理后台

后端业务服务

MySQL

Redis

图中的分工可以理解为:

  • TSDB:保存设备监测数据和实时分析结果;
  • MySQL:保存用户、设备、区域、配置和告警规则;
  • Redis:保存缓存、登录状态或短期数据;
  • 后端服务:根据业务需要组合查询多个数据库。

9.1 MySQL 负责“设备是谁”

例如:

设备编号:DEVICE_01 设备名称:1号传感器 所属区域:A区域 设备型号:MODEL_X

9.2 TSDB 负责“设备每个时间发生了什么”

例如:

10:00 环境温度 23.1℃ 10:01 环境温度 23.3℃ 10:02 环境温度 23.4℃

9.3 Redis 负责“现在经常要用什么”

例如:

当前登录用户信息 最近一次设备状态 验证码 热点查询结果
💡 一句话理解系统分工
MySQL 负责描述业务对象“是谁”,TSDB 负责记录对象“随时间发生了什么”,Redis 负责加速“现在经常使用的数据”。

10. 在通用设备监控系统中,哪些数据适合放在哪里?

数据内容推荐存储原因
用户账号MySQL结构稳定,需要权限和事务
用户角色MySQL与用户、菜单和权限有关联
设备名称、型号MySQL属于设备基础信息
区域和系统配置MySQL业务关系明确
告警规则MySQL需要修改、启用和停用
每分钟温度TSDB持续产生,主要按时间查询
实时温度TSDB高频写入,需要趋势和聚合
设备状态TSDB随时间变化的监测指标
实时分析结果TSDB分析结果随时间持续产生
异常评分TSDB需要回看历史分析结果
登录验证码Redis有效期短,读写频繁
当前在线状态Redis 或业务缓存需要快速读取
移动车辆轨迹时空数据库同时依赖时间和空间查询

11. 数据从设备到前端的完整流程

传感器采集温度和状态

采集网关或数据服务

写入 TSDB

分析服务读取历史与实时数据

生成统计或异常结果

用户打开趋势页面

前端请求后端接口

后端查询设备信息

MySQL

后端查询时间序列

后端组合结果

返回前端图表

执行过程如下:

  1. 传感器采集设备温度、状态等数据;
  2. 数据采集服务给每条数据添加时间和点位标识;
  3. 数据被写入 TSDB;
  4. 分析服务读取实时数据和历史数据;
  5. 分析服务生成统计值、趋势结果或异常评分;
  6. 分析结果也可以继续写入 TSDB;
  7. 用户打开前端趋势页面;
  8. 前端通过接口向后端请求数据;
  9. 后端从 MySQL 查询设备名称、所属区域等基础信息;
  10. 后端从 TSDB 查询指定时间范围内的监测数据;
  11. 后端组合结果并返回给前端;
  12. 前端将数据展示为折线图、柱状图或报表。

12. 如何判断应该使用哪一种数据库?

数据库选型不能只看数据“长什么样”,还要看系统“怎么使用数据”。

可以依次思考以下问题。

12.1 数据是否结构稳定?

如果字段明确,而且记录之间有清晰关系,可以优先考虑关系型数据库。

例如:

用户、角色、设备、项目、订单

12.2 是否主要按时间持续追加?

如果数据不断产生,主要查询某段时间内的趋势,可以考虑时序数据库。

例如:

温度、功率、流量、CPU 使用率

12.3 是否需要计算距离、范围和轨迹?

如果需要分析位置、区域和移动轨迹,可以考虑空间或时空数据库。

例如:

车辆轨迹、附近设备、区域覆盖

12.4 是否主要做缓存和高速读取?

如果数据生命周期短,而且需要极快读取,可以考虑 Redis 等键值数据库。

12.5 是否存在非常复杂的关系网络?

如果经常查询多层关系和路径,可以考虑图数据库。

12.6 是否需要全文搜索?

如果需要对大量文本、日志或商品进行关键词检索,可以考虑 Elasticsearch 等搜索引擎型存储。


13. 初学者容易混淆的地方

13.1 数据有时间字段,不代表必须使用 TSDB

MySQL 表中也可以有created_atupdated_at字段。

是否使用 TSDB,主要看:

  • 数据量是否持续快速增长;
  • 是否高频写入;
  • 是否主要按时间范围查询;
  • 是否需要时间聚合、TTL 和降采样。

13.2 数据有经纬度,不代表已经是时空数据库

在 MySQL 中保存两个数字字段,也能记录经纬度。

但如果需要大量执行:

  • 附近搜索;
  • 范围判断;
  • 轨迹分析;
  • 路径相交;

就更需要空间索引和专门的空间查询能力。

13.3 TSDB 和数据库表不是同一层级的概念

TSDB 是数据库类型,而表是数据库内部组织数据的一种方式。

不能把它们对比成:

TSDB 和表有什么区别?

更合理的对比是:

时序数据库和关系型数据库有什么区别?

13.4 一种数据库不一定只能做一件事

例如,某些关系型数据库通过扩展也可以支持:

  • 时序数据;
  • 空间数据;
  • JSON 文档。

但“支持”不等于在所有规模和场景下都最合适。

项目选型还要考虑:

  • 数据规模;
  • 团队经验;
  • 运维成本;
  • 查询需求;
  • 可靠性要求;
  • 现有技术栈。

14. 本次学习总结

通过本次学习,可以建立一套基础认知:

  1. 关系型数据库使用表来组织业务数据,擅长处理结构化数据、复杂关系和事务;
  2. 时序数据库 TSDB专门处理随时间持续产生的数据,擅长高频写入、时间查询、聚合、TTL 和压缩;
  3. 空间数据库重点处理点、线、面、距离和区域;
  4. 时空数据库同时处理时间和空间,适合车辆、人员、无人机等移动轨迹;
  5. Redis等键值数据库适合缓存和短期高速数据;
  6. 文档数据库适合结构灵活的 JSON 类数据;
  7. 图数据库适合复杂关系网络;
  8. 搜索引擎型存储适合全文检索和日志查询;
  9. 一个真实系统可以同时使用多种数据库,让每种数据库负责自己最擅长的工作;
  10. 在通用设备监控系统中,MySQL 通常保存业务配置,TSDB 保存监测指标和实时分析结果。

后续还可以继续学习:

  • MySQL 中的表、主键、外键和索引;
  • SQL 的增删改查;
  • TSDB 中的时间戳、标签、指标和字段;
  • TTL、归档、降采样与冷热数据分层;
  • 前端、后端和数据库之间的数据请求流程;
  • 项目实际使用的 TSDB 产品及其部署方式。

问题与解答

问题 1:TSDB 是不是一种专门的时空数据库?

我的困惑:

TSDB 的中文名称中带有“时”,而时空数据库也与时间有关,因此容易把二者理解成同一类数据库。

解答:

这个理解不准确。

TSDB 是Time Series Database,中文是“时序数据库”,重点是记录某个指标随时间的变化。

例如:

10:00 指标值 23.1 10:01 指标值 23.3 10:02 指标值 23.4

时空数据库则同时关注:

什么时候 + 在哪里

例如车辆在 10:00 位于哪个经纬度,10:01 又移动到了哪里。

对于固定位置的传感器、服务器和工业设备,设备位置通常不会频繁变化,系统主要关心它们的温度、负载和状态随时间如何变化,因此通常使用时序数据库,而不是专门的时空数据库。

一句话记忆:

TSDB 看“数值随时间怎么变”,时空数据库看“对象在什么时间位于哪里”。

问题 2:TSDB 是不是某个具体数据库软件的名字?

我的困惑:

文档写了“TSDB”,容易误以为项目中安装了一个名字就叫 TSDB 的数据库。

解答:

TSDB 不是某个固定产品,而是一类数据库的统称。

类似地:

关系型数据库:数据库类型 MySQL:具体产品

对应到时序数据库:

时序数据库:数据库类型 InfluxDB、TDengine、IoTDB:具体产品

因此,仅看到“系统使用 TSDB”还不能判断具体技术选型,需要进一步向后端确认:

当前项目具体使用的是哪一种时序数据库?

一句话记忆:

TSDB 是数据库类别,不是唯一的软件名称。

问题 3:既然 MySQL 也能保存时间和数值,为什么还需要 TSDB?

我的困惑:

只要设计一张包含point_codevaluetimestamp的表,MySQL 看起来也能保存设备数据。

解答:

MySQL 确实可以保存时序数据,特别是在数据量较小、采集频率较低时,完全可能满足需求。

但设备监测数据通常具备以下特点:

  • 高频持续写入;
  • 数据量增长快;
  • 大部分查询带时间范围;
  • 经常进行平均值、最大值和总量统计;
  • 历史数据很少修改;
  • 需要自动过期和长期压缩。

TSDB 会针对这些特点进行优化。

因此,区别不是“能不能存”,而是:

当数据量持续增大时,哪一种数据库能够更自然、更高效地完成写入、查询、聚合、压缩和清理。

一句话记忆:

MySQL 也能存时序数据,但 TSDB 是专门为大规模时间序列读写设计的。

问题 4:在通用设备监控系统中,MySQL 和 TSDB 应该如何分工?

我的困惑:

设备信息和设备监测值都属于同一台设备,不容易理解为什么要分别存进两个数据库。

解答:

可以把一台设备的数据分成两类。

第一类是描述设备身份和配置的数据:

设备编号 设备名称 设备型号 所属区域 启用状态

这些数据结构稳定,需要修改、关联和权限控制,适合放在 MySQL。

第二类是设备随时间产生的数据:

10:00 指标值 23.1 10:01 指标值 23.3 10:02 指标值 23.4

这些数据高频产生,主要用于趋势查询和统计,适合放在 TSDB。

前端查询时,后端可以同时读取两边的数据,再组合成完整结果。

一句话记忆:

MySQL 记录设备“是谁”,TSDB 记录设备“每个时间发生了什么”。

http://www.jsqmd.com/news/1285422/

相关文章:

  • ZDT工业控制模块驱动安装与CAN总线通讯配置实战指南
  • 阿里Agent工具箱:解决AI开发者信息过载与效率难题
  • Kali Linux中Yakit AppImage安装与系统集成完整指南
  • NSAIDs药物全解析:从作用机制到安全使用指南
  • 文华商品指数实战指南:从市场晴雨表到交易决策核心工具
  • 2026年7月江苏省无锡市移动单宽带实测办理全流程 - 找卡家园
  • 2026年7月湖南省永州市联通单宽带实测办理全流程 - 找卡家园
  • 基于STM32F4的心电监护仪设计:从模拟前端到DSP算法的嵌入式系统实践
  • 从“不可能三角”到“新三样”——普通人如何重新思考全球资产配置?
  • DSP28335嵌入式开发实战:FreeRTOS移植与电机控制任务设计
  • 2026年7月湖南省岳阳市电信单宽带怎么办理 - 找卡家园
  • 机器学习入门实战:从环境配置到算法实现的全流程指南
  • Kimi K3开源背后:当AI智能体开始“越狱“,Moonshot AI如何用微虚拟机守住安全底线
  • MySQL存储过程与Java代码修改的本质差异及实践
  • AetoSight 成像指标全解读|SNR、MTF、色偏 ΔC、拖影专业参数科普
  • 机器学习与深度学习:核心差异与实战应用指南
  • 从倾斜开关到LED控制:嵌入式入门核心原理与去抖动实战
  • 2026年7月江苏省苏州市联通融合宽带怎么选_一篇说透 - 找卡家园
  • 树莓派5部署Node.js与MongoDB:从零搭建全栈开发环境
  • 自然资源和规划局RFID管理TOP5实战榜单
  • 2026年7月湖南省湘潭市电信单宽带怎么选_新手避坑指南 - 找卡家园
  • HPM6750 RISC-V MCU开发环境搭建全攻略:从工具链配置到Hello World实战
  • FPGA实现信号n倍插值:内插零与FIR滤波器的硬件设计
  • 联泰科技3D打印建筑技术解析:SLA光固化+建筑模型制作与实体建筑打印应用
  • Python期末试卷设计:从语法基础到实战能力的综合检验
  • 技术社区英雄谱:从文化传承到开源项目运营的实践指南
  • AI数字孪生虚拟量测:膜厚预测从抽检到全检的实战记录
  • Node.js C++扩展开发:突破性能瓶颈,构建高性能数据处理架构
  • 2026年7月山西省移动单宽带实测对比宽带怎么选? - 找卡家园
  • Python事件驱动编程:从概念到asyncio实战