课程大作业题目三。对比 InfluxDB 和 IoTDB 在时序数据(含 DROID 真实机器人操控数据集)上的性能表现。
- Docker >= 20.0 + Docker Compose >= 2.0
- Python >= 3.12 + Conda
conda create -n tfrecord_env python=3.12 -y
conda activate tfrecord_env
pip install influxdb-client apache-iotdb pandas numpy tfrecord mysql-connector-python pyarrowdocker compose up -d # InfluxDB:8086, IoTDB:6667, MySQL:3306curl http://localhost:8086/health # InfluxDB
docker exec tsdb-iotdb /iotdb/sbin/start-cli.sh -h 127.0.0.1 -e 'show version' # IoTDB
docker exec tsdb-mysql mysql -uroot -proot123 -e 'SELECT 1' # MySQL注意:DROID 相关脚本需要 DROID 数据集(TFRecord 格式,约 1.7TB)。 设置环境变量指定路径,否则脚本报错退出:
export DROID_PATH="/your/path/to/DROID/1.0.0"
| 脚本 | 说明 | 数据依赖 |
|---|---|---|
run_benchmark.py |
合成数据写入/查询/磁盘占用对比 | 无,自动生成 |
droid_benchmark.py |
DROID 真实轨迹的读写和 4 类查询 | 需要 DROID |
droid_scenario.py |
场景化测试:降采样、插值填充、滑动窗口、跨轨迹聚合 | 需要 DROID |
mysql_compare.py |
MySQL 对照测试(同等数据下的 SQL 实现) | 需要 DROID |
cd benchmark
# 合成数据测试(无需额外数据)
python3 run_benchmark.py
# 场景化测试(需要 DROID)
python3 droid_scenario.py
# MySQL 对照(需要 DROID)
python3 mysql_compare.pydocker compose downBigData/
├── docker-compose.yml # InfluxDB + IoTDB + MySQL 容器编排
├── data/ # 数据库持久化数据 (gitignore)
├── benchmark/
│ ├── run_benchmark.py # 合成数据 benchmark
│ ├── droid_benchmark.py # DROID 读写 + 查询测试
│ ├── droid_scenario.py # DROID 场景化测试
│ └── mysql_compare.py # MySQL 对照实验
├── report/
│ └── report.md # 调研报告
└── README.md
| 场景 | 测试内容 | 体现 TSDB 什么 |
|---|---|---|
| 降采样 | 原始 15Hz → 1s 窗口均值 | TSDB 原生 GROUP BY 时间窗口 |
| 插值填充 | 删除部分数据后用 FILL(LINEAR) 补全 | IoTDB 服务端插值 vs InfluxDB/MySQL 需客户端实现 |
| 滑动窗口 | 1s 窗口标准差检测关节抖动 | 列式存储 + 内置 STDDEV 的性能优势 |
| 跨轨迹聚合 | 60 条轨迹全局 AVG | 路径通配 root.*.sensor 的跨设备查询能力 |
同等数据规模下,用 MySQL 实现相同的 4 个场景操作,展示关系数据库在处理时序/分析负载时的局限。
本仓库为大作业实验代码,仅供参考。