跳到主要内容

Benchmarks

针对分析场景下的数据,IEDB 具备业界领先的性能表现。本页面记录了相关的基准测试方法及测试结果。

总结

指标结果
写入 (MessagePack)每秒超过 1800 万条记录
查询 (Arrow)每秒 600 万行以上
查询 (JSON)223万行/秒
Line Protocol192万条记录/秒

硬件

基准测试基于苹果 MacBook Pro M3 Max(14 核心,48GB 内存,1TB NVMe)。
测试配置:12 个并发工作进程,1000 条记录批次,IoT 传感器数据。

数据写入

协议吞吐量p50延迟p99延迟
MessagePack 列式1860万条记录/秒0.46毫秒3.68毫秒
MessagePack + Zstd1680万条记录/秒0.55毫秒3.23毫秒
MessagePack + GZIP1540万条记录/秒0.63毫秒3.17毫秒
Line Protocol370万条记录/秒2.63毫秒10.63毫秒

文件压缩

自动后台压缩将小的 Parquet 文件合并为优化的大文件:

指标压缩前压缩后减少率
文件数量43197.7%
大小372 MB36 MB90.4%

优势:

  • 10倍存储减少 通过更好的压缩和编码
  • 更快查询 - 扫描1个文件而非43个文件
  • 更低云成本 - 更少存储,更少API调用

查询(2026年1月)

对于大型结果集,Arrow IPC 格式比 JSON 提供 2 倍吞吐量:

查询Arrow (毫秒)JSON (毫秒)加速比
COUNT(*) - 全表6.79.01.35x
SELECT LIMIT 10K27311.14x
SELECT LIMIT 100K551031.88x
SELECT LIMIT 500K2014202.10x
SELECT LIMIT 1M3797892.08x
AVG/MIN/MAX 聚合1461461.00x
GROUP BY host (Top 10)1071040.98x
INTERVAL '1 hour'12110.96x

最佳吞吐量:

  • Arrow: 264万行/秒 (100万行SELECT)
  • JSON: 127万行/秒 (100万行SELECT)
  • COUNT(*): 120-1900亿行/秒 (1.34亿行,7-11毫秒)

ClickBench 测试结果

在命中数据集上进行行业标准分析查询基准测试。

测试环境:

  • 实例:云服务器(16 个虚拟 CPU,32GB 内存)
  • 数据集:1亿行(14GB Parquet格式)
  • 查询:43 个分析查询
运行Total Time查询数量
冷启动 (cache flushed)120.25s43
热启动35.70s43

产品对比

数据库热启动相对速度
IEDB35.70秒1.00倍(基线)
QuestDB64.26秒速度慢 1.80 倍
TimescaleDB335.22秒速度慢 9.39 倍

在分析工作负载方面, IEDB 的速度比 QuestDB 快 1.80 倍比 TimescaleDB 快 9.39 倍

为什么IEDB速度快

1. 查询引擎

利用了 DuckDB 的列式执行引擎:

  • 向量化执行:每条 CPU 指令处理数千个值
  • 并行查询执行:自动利用所有 CPU 核心
  • 高级优化:连接重排序、谓词下推、过滤器下推
  • SIMD 指令:使用现代 CPU 特性

2. 列式文件存储

  • 列式格式:查询所需的只读列
  • 压缩后的数据量比原始数据小 80%(Snappy/ZSTD)
  • 谓词下推:根据统计信息跳过整个行组
  • 高效扫描:查询引擎原生支持读取 Parquet 格式

3. Go 运行时效率

  • 内存稳定:Go的垃圾回收器将内存归还给操作系统。无泄漏。
  • 单一二进制文件:部署单个可执行文件。无依赖项。
  • 原生并发:Goroutines 高效处理数千个连接。
  • 生产级垃圾回收:大规模下的亚毫秒级暂停时间。

性能建议

写入优化

  1. 使用 MessagePack 列格式
data = {"m": "cpu", "columns": {...}} # 18M+ rec/s
# vs
data = "cpu,host=x value=1" # 1.92M rec/s
  1. 批量写入(每次请求 10,000 条以上记录)
  2. 启用 gzip 压缩以提高网络效率
  3. 使用多线程(M3 Max 最佳使用 35 个)

查询优化

  1. 对于大型结果集(10000 行以上),请使用 Arrow 格式。
response = requests.post(url + "/api/v1/query/arrow", ...)
  1. 启用查询压缩以优化查询
[compaction]
enabled = true
  1. 使用聚合时间
WHERE time > now() - INTERVAL '1 hour'

扩展特性

服务器更换更强的 CPU(更多核心),系统的处理能力会几乎等比例提升(例如核心数翻倍,性能接近翻倍)。

  • CPU:核心数量与扩展性呈近线性关系
  • 内存:自动配置为系统内存的约 50%

存储影响

后端写入开销查询开销
本地 NVMe基线基线
MinIO(本地)+5-10%+2-5%
S3+20-30%+10-20%

自行测试

在本地运行基准测试:

cd iedb
make bench

后续步骤