SmartEDT/DB_PERFORMANCE_ANALYSIS.md

2.9 KiB
Raw Blame History

TimescaleDB 性能测试分析报告

基于 test_db.py 对 30 万条车辆仿真数据的写入与查询测试,本次性能评估结论如下:

1. 核心结论

TimescaleDB 完全满足智能电动车数字孪生系统SmartEDT的实时采集与回放需求。

  • 写入能力:单线程下 3,500+ TPS 的写入速度远超单车采集需求(通常单车高频信号仅需 50-100Hz即 50-100 TPS。即使并发接入 10-20 台车,当前配置也绰绰有余。
  • 查询响应毫秒级30ms 的时间切片查询能力,保证了“前端实时回放”与“大屏曲线刷新”的流畅度,不会出现卡顿。
  • 存储架构JSONB 混合存储方案在保持了极高灵活性的同时0.2s 过滤查询),依然维持了优秀的查询性能,验证了“结构化字段(索引)+ 半结构化 PayloadJSONB”建模方案的正确性。

2. 详细指标分析

2.1 写入性能 (Insertion)

  • 指标3,547.78 条/秒 (TPS)
  • 场景单连接、Batch=1000、Python asyncpg 驱动。
  • 分析
    • 满足度:假设单车采集频率为 50Hz即每秒 50 个数据包),当前性能理论上可支持 70 台车同时在线采集
    • 瓶颈推测:当前瓶颈主要在 Python 端的序列化与网络 IO 往返RTT
    • 优化空间:如果未来需要支持上千台车,改用 COPY 协议或增加并发写入 worker吞吐量可轻松提升至 5-10 万 TPS 以上。

2.2 查询性能 (Query)

查询类型 耗时 业务场景 评价
最新数据 (Latest 1000) 0.0301s 实时大屏监控、轨迹回放 极优。利用 TimescaleDB 的时间分区索引,无论历史数据多大,提取“最新 N 条”永远是毫秒级。
全量计数 (Count) 0.0845s 报表统计、数据完整性校验 优秀。30万数据秒出说明元数据管理高效。
JSONB 内容过滤 0.2137s 复杂故障诊断、特定工况筛选 良好。在没有对 JSON 内部字段建索引的情况下0.2s 扫描 30 万条 JSON 数据属于高性能表现。

3. 架构建议

基于测试结果,对后续开发提出以下建议:

  1. 保持 JSONB 方案:当前的表结构(ts, simulation_id, signals(JSONB))在性能与灵活性之间取得了完美平衡,无需拆分更多列。
  2. 索引优化:目前 tssimulation_id 已有索引。如果未来经常需要按“车速”或“故障码”过滤,建议对 JSONB 内部高频查询字段建立 GIN 索引
    • 示例 SQLCREATE INDEX idx_speed ON vehicle_signals USING gin ((signals->'vehicle_speed_kmh'));
  3. 保留策略:建议配置 TimescaleDB 的 retention_policy,例如自动删除 30 天前的原始高频数据,只保留降采样后的聚合数据,以节省磁盘空间。