性能测试
大约 4 分钟约 1214 字
openGemini作为一款开源的时序数据库系统,社区蓬勃发展是广大开发者共同的心愿。性能作为数据库最为关键指标之一,很大程度上决定了社区未来能走多远。另一方面,数据库已经成为了企业信息化建设的重要组成部分,而数据库的性能则是企业信息化建设的关键因素之一。数据库性能的好坏直接影响到企业的业务流程和效率,因此,对于数据库的性能优化是非常重要的。正是如此,社区一直以来都将性能优化工作作为社区长期工作来抓。
提示
数据库性能数据受机器规格、数据量、时间线数量、数据模型等多种因素影响,不同并发,不同机器规格,不同数据量,不同时间线规模和不同的数据模型,所表现出来的性能数据也将有所不同。
以下测试数据可以作为数据库选型的参考,但不建议用于任何业务决策,出现任何问题与本社区无关。任何决策或者商业活动,都必须根据实际业务场景进行测试评估。
由于openGemini兼容InfluxDB接口和数据协议,因此TSBS测试时,使用InfluxDB的相关命令和操作即可。
测试场景
项目 | 说明 |
---|---|
压测工具 | TSBS (https://github.com/timescale/tsbs) |
测试模型 | Devops, IoT |
数据模型 | Devops: 1个DB ,2个PT,1个表,一行10个tags和10 fields IoT: 1个DB 2个表,表1一行5个tags和10个fields,表2一行5个tags和6个fields |
数据量 | Devops: 30万时间线;25.92亿points,原始数据大小(gzip压缩) 88G IoT: 4000时间线,4天数据量 |
节点数 | 单机 |
机器规格 | 32U128G |
Devops场景
写性能
数据库 | 并发数 | 30万时间线(rows/sec) | 磁盘大小 |
---|---|---|---|
openGemini v1.2.0 OSS | 32 | 464,311.21 | 11GB |
InfluxDB 2.x OSS | 32 | 87,196.63 | 14GB |
国内其他 OSS | 32 | 361,871.25 | 20GB |
1 row = 10tag + 10field, 这里1个field类似于一个设备上的点位,换算为metrics,1 row = 10 metrics
纵向对比
对比指标:平均时延,单位:ms
场景 | 并发数 | openGemini v1.2.0 | openGemini v1.0.1 |
---|---|---|---|
single-groupby-1-1-12 | 32 | 7.17 | 17.07 |
single-groupby-1-1-1 | 32 | 3.12 | 6.67 |
single-groupby-1-8-1 | 32 | 7.3 | 13.35 |
single-groupby-5-1-12 | 32 | 13.35 | 36.37 |
single-groupby-5-1-1 | 32 | 4.55 | 12.41 |
single-groupby-5-8-1 | 32 | 10.1 | 23.01 |
cpu-max-all-1 | 32 | 6.89 | 19.54 |
cpu-max-all-8 | 32 | 16.88 | 40.01 |
double-groupby-1 | 8 | 24,719 | 30,408.05 |
double-groupby-5 | 8 | 51,478.43 | 67,023.02 |
double-groupby-all | 8 | 77,594.52 | 85,673.76 |
lastpoint | 8 | 54,672.35 | 64,107.8 |
groupby-orderby-limit | 2 | 9,225.74 | 116,212.15 |
high-cpu-1 | 32 | 19.99 | 37.65 |
high-cpu-all | 1 | 35,201.1 | 109,319.78 |
场景说明,比如single-groupby-1-1-12 代表什么意思,见TSBS 基准测试场景介绍。
横向对比
对比指标:平均时延,单位:ms
场景 | 并发 | openGemini v1.2.0 OSS | InfluxDB 2.x OSS | 国内其他 OSS |
---|---|---|---|---|
single-groupby-1-1-12 | 32 | 7.17 | 24.89 | 14.18 |
single-groupby-1-1-1 | 32 | 3.12 | 4.28 | 10.72 |
single-groupby-1-8-1 | 32 | 7.3 | 12.17 | 80.05 |
single-groupby-5-1-12 | 32 | 13.35 | 101.63 | 19.75 |
single-groupby-5-1-1 | 32 | 4.55 | 12.04 | 13.67 |
single-groupby-5-8-1 | 32 | 10.1 | 48.6 | 109.96 |
cpu-max-all-1 | 32 | 6.89 | 13.86 | 17.84 |
cpu-max-all-8 | 32 | 16.88 | 91.8 | 213.23 |
double-groupby-1 | 8 | 24,719 | 243,356.06 | 141,016.09 |
double-groupby-5 | 8 | 51,478.43 | 122,317.54 | 205,317.78 |
double-groupby-all | 8 | 77,594.52 | OOM | >5min |
lastpoint | 8 | 54,672.35 | OOM | 826,563.36 |
groupby-orderby-limit | 2 | 9,225.74 | OOM | 503,419.97 |
high-cpu-1 | 32 | 19.99 | 23.41 | 19.78 |
high-cpu-all | 1 | 35,201.1 | OOM | - 查询失败 |
总结
- 相比v1.0.1版本,简单查询场景(single-*,cpu-*)提升200%-300%。复杂查询场景(double-*, last-*, high-cpu-all)提升20%-30%,即10秒左右,虽然提升幅度看似不大,但对于应用来说,这个结果是一个非常可观的性能提升。
- 相比其他时序数据库,openGemini具有明显性能优势。
IoT场景
写性能
数据库 | 并发数 | 4000时间线(rows/sec) | 磁盘大小 |
---|---|---|---|
openGemini v1.2.0 OSS | 32 | 710,820 | 3.3GB |
InfluxDB 2.x OSS | 32 | 290,995 | 4.2GB |
国内其他 OSS | - | - 写入的数据模型不一致 | 3.5GB |
查询性能
对比指标:平均时延,单位:ms
场景 | 并发 | openGemini v1.2.0 OSS | InfluxDB 2.x OSS | 国内其他 OSS |
---|---|---|---|---|
last-loc | 4 | 22.99 | 475.23 | 66.85 |
low-fuel | 4 | 13.68 | 790.02 | 87.03 |
high-load | 4 | 15.90 | 664.51 | 59.58 |
stationary-trucks | 4 | 332.60 | 2710.7 | - 语义不同 |
long-driving-sessions | 4 | 111.06 | 311.47 | 179.22 |
long-daily-sessions | 4 | 241.16 | 1,350.97 | 538.14 |
avg-vs-projected-fuel-consumption | 4 | 6,406.26 | 22,783.61 | 8,378.42 |
avg-daily-driving-duration | 4 | 3,334.83 | 36,544.96 | 7,133.09 |
avg-daily-driving-session | 4 | 4,787.19 | 6,920.01 | 8,155.22 |
avg-load | 4 | 9,824.51 | 620,172.08 | - 语义不同 |
daily-activity | 4 | 1,486.71 | 8,615.31 | 4,072.54 |
single-last-loc | 4 | 1.51 | 1.51 | 5.23 |
总结
- 相比InfluxDB OSS v2.x版本,openGemini在如上12个典型场景的查询性能大幅领先,最大提升60倍
- 相比其他时序数据库,openGemini同样具有明显的性能优势