从 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_id1DEVICE_011号传感器1012DEVICE_022号传感器101区域表可以设计为idarea_namesystem_name101A区域示例系统device.area_id可以关联到area.id表示某台设备属于哪个区域。常见的关系型数据库包括MySQLPostgreSQLSQL ServerOracleSQLite。3.2 为什么叫“关系型”这里的“关系”并不只是人与人之间的关系而是指数据通过表、主键和外键建立关联。例如设备表 ↓ area_id 区域表 ↓ system_id 系统表这样可以避免在每条设备记录中重复保存大量区域和项目信息。3.3 关系型数据库擅长什么关系型数据库适合用户、角色和权限设备基本信息项目和区域配置订单与支付记录告警规则审批流程需要事务保证的数据。所谓事务可以通俗理解为一组操作要么全部成功要么全部失败不能只完成一半。例如银行转账时账户 A 扣款账户 B 加款。如果只扣款但没有加款数据就出错了。关系型数据库通常很擅长保证这类操作的一致性。3.4 SQL 是什么SQL 是 Structured Query Language 的缩写即“结构化查询语言”。它是操作关系型数据库的常用语言。例如SELECTdevice_nameFROMdeviceWHEREarea_id101;它表示查询device表中所有属于 101 号区域的设备名称。 核心结论关系型数据库擅长保存结构明确、关系清晰、需要频繁修改并要求数据一致性的业务数据。4. 时序数据库 TSDB 是什么4.1 它是什么TSDB 是Time Series Database的缩写即“时序数据库”。时序数据库专门用于保存按照时间持续产生的一系列数据。例如一个温度传感器每分钟上报一次环境温度时间点位数值10:00DEVICE_01_TEMPERATURE23.110:01DEVICE_01_TEMPERATURE23.310:02DEVICE_01_TEMPERATURE23.4每条数据通常包含时间戳 指标或点位标识 数值 标签例如时间2026-07-28 10:01:00 点位DEVICE_01_TEMPERATURE 数值23.3 设备DEVICE_01 区域A区域4.2 TSDB 是某一个具体软件吗不是。TSDB 是一类数据库不是某个固定产品的名字。这类似于“关系型数据库”是一类数据库MySQL 是关系型数据库中的一个具体产品。常见的时序数据库或时序存储系统包括InfluxDBTDengineApache IoTDBTimescaleDBOpenTSDBPrometheus 的时序存储。因此文档只写“使用 TSDB”只能说明使用了某类时序数据库不能确定具体产品。在项目中需要向后端确认当前系统具体使用的是哪一种 TSDB4.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.506010:01120.2131.515510:02120.2331.5262每一条数据都同时回答车辆在什么时间位于什么位置当时状态如何6.2 时空数据库适合哪些场景车辆轨迹网约车调度无人机飞行轨迹人员移动物流运输气象空间分布卫星遥感动物迁徙移动设备定位城市交通分析。6.3 时序数据库和时空数据库有什么区别时序数据库关心某个指标随时间怎么变化。时空数据库关心某个对象在不同时间位于哪里或者某个区域在不同时间发生了什么。例如固定传感器设备位置长期不变 重点关注温度、状态随时间变化这种数据通常更适合时序数据库。例如移动中的车辆位置不断改变 同时需要分析时间和轨迹这种数据更适合时空数据库。⚠️ 注意“带有时间字段”不等于时序数据库“带有经纬度字段”也不等于时空数据库。关键要看系统主要进行什么类型的查询以及数据库是否针对这些查询进行了专门优化。7. 三种数据库的核心对比对比维度关系型数据库时序数据库时空数据库主要关注业务实体及关系指标随时间变化对象随时间和空间变化常见数据用户、设备、订单、配置温度、功率、流量、日志指标车辆轨迹、人员移动、气象分布典型查询某用户有哪些权限过去 24 小时平均功率某车辆昨天经过哪些区域数据变化支持增删改查主要持续追加持续记录位置和时间变化常用索引主键、普通索引、联合索引时间索引、标签索引时间索引、空间索引主要优势关系清晰、事务可靠高频写入、时间聚合、TTL轨迹和空间范围查询应用示例MySQL 存业务配置TSDB 存监测指标轨迹平台存移动记录8. 其他常见数据库类型数据库类型并不只有上面三种。下面介绍几类开发中经常遇到的数据库。8.1 键值数据库键值数据库使用Key → Value的方式保存数据。例如user:1001 → {name:张三,token:abc}常见产品RedisMemcached。它适合缓存登录状态验证码计数器排行榜临时数据分布式锁。可以把它理解成一个非常快的“字典”。8.2 文档数据库文档数据库通常以 JSON 类似的结构保存数据。例如{deviceCode:AC_01,deviceName:1号设备,sensors:[{type:temperature,unit:℃},{type:power,unit:kW}]}常见产品MongoDBCouchDB。它适合字段经常变化的数据不同记录结构不完全一致的数据内容管理商品详情用户画像JSON 数据存储。8.3 图数据库图数据库使用“节点”和“边”表示数据及关系。例如用户A --关注-- 用户B 用户B --购买-- 商品C 商品C --属于-- 类别D常见产品Neo4jJanusGraph。它适合社交关系知识图谱推荐系统风险关系分析路径查询组织关系。图数据库的重点不是保存一张图片而是保存复杂的“关系网络”。8.4 搜索引擎型存储搜索引擎型存储擅长全文检索和日志分析。常见产品ElasticsearchOpenSearch。它适合搜索文章内容搜索商品日志检索聚合分析模糊匹配多条件筛选。例如搜索包含“设备故障”关键词的所有告警日志使用 Elasticsearch 通常比直接在 MySQL 中做大规模模糊查询更合适。9. 为什么一个系统会同时使用多个数据库现代系统经常采用“多数据库协作”原因不是为了炫技而是不同数据库各自承担最擅长的任务。以一个通用设备监控系统为例设备传感器数据采集服务TSDB实时分析服务管理后台后端业务服务MySQLRedis图中的分工可以理解为TSDB保存设备监测数据和实时分析结果MySQL保存用户、设备、区域、配置和告警规则Redis保存缓存、登录状态或短期数据后端服务根据业务需要组合查询多个数据库。9.1 MySQL 负责“设备是谁”例如设备编号DEVICE_01 设备名称1号传感器 所属区域A区域 设备型号MODEL_X9.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后端查询时间序列后端组合结果返回前端图表执行过程如下传感器采集设备温度、状态等数据数据采集服务给每条数据添加时间和点位标识数据被写入 TSDB分析服务读取实时数据和历史数据分析服务生成统计值、趋势结果或异常评分分析结果也可以继续写入 TSDB用户打开前端趋势页面前端通过接口向后端请求数据后端从 MySQL 查询设备名称、所属区域等基础信息后端从 TSDB 查询指定时间范围内的监测数据后端组合结果并返回给前端前端将数据展示为折线图、柱状图或报表。12. 如何判断应该使用哪一种数据库数据库选型不能只看数据“长什么样”还要看系统“怎么使用数据”。可以依次思考以下问题。12.1 数据是否结构稳定如果字段明确而且记录之间有清晰关系可以优先考虑关系型数据库。例如用户、角色、设备、项目、订单12.2 是否主要按时间持续追加如果数据不断产生主要查询某段时间内的趋势可以考虑时序数据库。例如温度、功率、流量、CPU 使用率12.3 是否需要计算距离、范围和轨迹如果需要分析位置、区域和移动轨迹可以考虑空间或时空数据库。例如车辆轨迹、附近设备、区域覆盖12.4 是否主要做缓存和高速读取如果数据生命周期短而且需要极快读取可以考虑 Redis 等键值数据库。12.5 是否存在非常复杂的关系网络如果经常查询多层关系和路径可以考虑图数据库。12.6 是否需要全文搜索如果需要对大量文本、日志或商品进行关键词检索可以考虑 Elasticsearch 等搜索引擎型存储。13. 初学者容易混淆的地方13.1 数据有时间字段不代表必须使用 TSDBMySQL 表中也可以有created_at和updated_at字段。是否使用 TSDB主要看数据量是否持续快速增长是否高频写入是否主要按时间范围查询是否需要时间聚合、TTL 和降采样。13.2 数据有经纬度不代表已经是时空数据库在 MySQL 中保存两个数字字段也能记录经纬度。但如果需要大量执行附近搜索范围判断轨迹分析路径相交就更需要空间索引和专门的空间查询能力。13.3 TSDB 和数据库表不是同一层级的概念TSDB 是数据库类型而表是数据库内部组织数据的一种方式。不能把它们对比成TSDB 和表有什么区别更合理的对比是时序数据库和关系型数据库有什么区别13.4 一种数据库不一定只能做一件事例如某些关系型数据库通过扩展也可以支持时序数据空间数据JSON 文档。但“支持”不等于在所有规模和场景下都最合适。项目选型还要考虑数据规模团队经验运维成本查询需求可靠性要求现有技术栈。14. 本次学习总结通过本次学习可以建立一套基础认知关系型数据库使用表来组织业务数据擅长处理结构化数据、复杂关系和事务时序数据库 TSDB专门处理随时间持续产生的数据擅长高频写入、时间查询、聚合、TTL 和压缩空间数据库重点处理点、线、面、距离和区域时空数据库同时处理时间和空间适合车辆、人员、无人机等移动轨迹Redis等键值数据库适合缓存和短期高速数据文档数据库适合结构灵活的 JSON 类数据图数据库适合复杂关系网络搜索引擎型存储适合全文检索和日志查询一个真实系统可以同时使用多种数据库让每种数据库负责自己最擅长的工作在通用设备监控系统中MySQL 通常保存业务配置TSDB 保存监测指标和实时分析结果。后续还可以继续学习MySQL 中的表、主键、外键和索引SQL 的增删改查TSDB 中的时间戳、标签、指标和字段TTL、归档、降采样与冷热数据分层前端、后端和数据库之间的数据请求流程项目实际使用的 TSDB 产品及其部署方式。问题与解答问题 1TSDB 是不是一种专门的时空数据库我的困惑TSDB 的中文名称中带有“时”而时空数据库也与时间有关因此容易把二者理解成同一类数据库。解答这个理解不准确。TSDB 是Time Series Database中文是“时序数据库”重点是记录某个指标随时间的变化。例如10:00 指标值 23.1 10:01 指标值 23.3 10:02 指标值 23.4时空数据库则同时关注什么时候 在哪里例如车辆在 10:00 位于哪个经纬度10:01 又移动到了哪里。对于固定位置的传感器、服务器和工业设备设备位置通常不会频繁变化系统主要关心它们的温度、负载和状态随时间如何变化因此通常使用时序数据库而不是专门的时空数据库。一句话记忆TSDB 看“数值随时间怎么变”时空数据库看“对象在什么时间位于哪里”。问题 2TSDB 是不是某个具体数据库软件的名字我的困惑文档写了“TSDB”容易误以为项目中安装了一个名字就叫 TSDB 的数据库。解答TSDB 不是某个固定产品而是一类数据库的统称。类似地关系型数据库数据库类型 MySQL具体产品对应到时序数据库时序数据库数据库类型 InfluxDB、TDengine、IoTDB具体产品因此仅看到“系统使用 TSDB”还不能判断具体技术选型需要进一步向后端确认当前项目具体使用的是哪一种时序数据库一句话记忆TSDB 是数据库类别不是唯一的软件名称。问题 3既然 MySQL 也能保存时间和数值为什么还需要 TSDB我的困惑只要设计一张包含point_code、value和timestamp的表MySQL 看起来也能保存设备数据。解答MySQL 确实可以保存时序数据特别是在数据量较小、采集频率较低时完全可能满足需求。但设备监测数据通常具备以下特点高频持续写入数据量增长快大部分查询带时间范围经常进行平均值、最大值和总量统计历史数据很少修改需要自动过期和长期压缩。TSDB 会针对这些特点进行优化。因此区别不是“能不能存”而是当数据量持续增大时哪一种数据库能够更自然、更高效地完成写入、查询、聚合、压缩和清理。一句话记忆MySQL 也能存时序数据但 TSDB 是专门为大规模时间序列读写设计的。问题 4在通用设备监控系统中MySQL 和 TSDB 应该如何分工我的困惑设备信息和设备监测值都属于同一台设备不容易理解为什么要分别存进两个数据库。解答可以把一台设备的数据分成两类。第一类是描述设备身份和配置的数据设备编号 设备名称 设备型号 所属区域 启用状态这些数据结构稳定需要修改、关联和权限控制适合放在 MySQL。第二类是设备随时间产生的数据10:00 指标值 23.1 10:01 指标值 23.3 10:02 指标值 23.4这些数据高频产生主要用于趋势查询和统计适合放在 TSDB。前端查询时后端可以同时读取两边的数据再组合成完整结果。一句话记忆MySQL 记录设备“是谁”TSDB 记录设备“每个时间发生了什么”。