SmartEDT/TimescaleDB性能测试分析报告.md

39 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. **索引优化**:目前 `ts``simulation_id` 已有索引。如果未来经常需要按“车速”或“故障码”过滤,建议对 JSONB 内部高频查询字段建立 **GIN 索引**
* *示例 SQL*`CREATE INDEX idx_speed ON vehicle_signals USING gin ((signals->'vehicle_speed_kmh'));`
3. **保留策略**:建议配置 TimescaleDB 的 `retention_policy`,例如自动删除 30 天前的原始高频数据,只保留降采样后的聚合数据,以节省磁盘空间。