MongoDB Time Series 数据库性能测试报告
2025-12-11
| 2025-12-11
字数 6481阅读时长 17 分钟
type
status
date
slug
summary
tags
category
icon
password

MongoDB Time Series 数据库性能测试报告

1. MongoDB安装

1. 1 安装MongoDB

按照以下步骤使用 apt 软件包管理器安装 安装 MongoDB 8.0 Community Edition。
  1. 从终端安装 gnupgcurl(如果尚未安装):
  1. 要导入 MongoDB 公共 GPG 密钥,请运行以下命令:
为您的 Ubuntu 版本创建列表文件 /etc/apt/sources.list.d/mongodb-org-8.0.list
为Ubuntu 22.04 (Jammy) 创建列表文件:
  1. 要安装最新的稳定版本,请执行以下命令:

1.2 初始化系统

  1. 您可以通过发出以下命令来启动进程:
如果收到类似下方的错误
Failed to start mongod.service: Unit mongod.service not found.
首先运行以下命令:
然后再次运行上面的启动命令。
  1. 您可以通过选择执行以下命令,来确保 MongoDB 将在系统 重新启动后启动:
  1. 您可以根据需要,通过发出以下命令来停止进程:
  1. 您可以通过发出以下命令来重启进程:

2. MongoDB写入压测试软件

为了尽可能的模拟中微的应用场景,我基于 influx-stress 软件进行大幅的改动来适配MongoDB, 进行压力测试。 压力测试代码在Mongo-stress仓库
This repository is forked from influxdata/influx-stress. It is modified to support MongoDB.

2.1 Build Instructions

Building mongo-stress requires the Golang toolchain. If you do not have the Golang toolchain installed please follow the instructions golang.org/doc/install

2.2 Top Level Command

2.3 Insert Subcommand

2.4 Example Usage

Writing an example series key with 2000 series and 400000 points per second

3. 查询性能测试

同时为了测试 MongoDB 在同一个数据库中,随着数据量的增大,对查询的反应速度进行测试,我也写了相关的测试代码来进行测试,测试代码在mongo-query-test

3.1 硬件平台及OS

CPU:Intel(R) Core(TM) Ultra 5 125H,只开启了一个大核和 8 个 Ecore
内存:16G
OS:Ubuntu 22.04.3 LTS (Jammy Jellyfish)

3.2 说明

  • 监控 MongoDB 数据库大小
  • 超过阈值时触发查询性能测试
  • 支持统计指标:平均时间、最小、最大、P95、有效查询次数
  • 查询结果保存 CSV 文件在 results/ 目录

3.3 使用示例

3.4 查询结果统计

我采用以下命令对 MongDB 进行写入压力测试,模拟 2000 个 sensor,每个 sensor 每隔 5ms 产生一次数据,那么 1 秒钟就产生 400000 条记录,写入 stress 数据中的 sensor collection中,不限定写入时长。
同时,我运行以下命令来同时对数据库进行查询操作,每当数据库大小达到设定的阈值,则触发查询操作,分别基于当前的时间向前推 10s,30 分钟、1 小时,在 2000 个 sensor 中随机产生 10 个 sensor-id,进行 10 次查询,同时统计平均查询时间,最小时间,最大时间,P95 等性能指标,P95 表示在所有统计数据中,95% 的数据值小于或等于该数值,而剩余 5% 的数据值大于该数值。具体统计结果见以下的表格。
10s 时间段
1G
5G
10G
20G
30G
40G
50G
60G
70G
80G
90G
100G
Average (s)
0.3512
1.3937
4.0583
2.4407
1.3154
1.2776
2.3305
1.8650
2.6243
4.6139
1.2521
2.1927
Min (s)
0.1458
0.7509
0.7897
0.6552
0.6341
0.5816
0.8039
0.7183
0.7951
2.0932
0.7720
0.8494
Max (s)
1.3952
6.1856
13.1426
10.5259
5.9725
4.6300
5.0000
8.5092
6.7577
12.1943
4.3669
5.8105
P95 (s)
0.3270
1.0159
9.5251
4.7775
1.0932
2.0993
3.9062
3.6753
5.7049
6.0203
1.1528
3.2225
Count
2000
2000
2000
2000
2000
2000
2000
2000
2000
2000
2000
2000
30m 时间段
1G
5G
10G
20G
30G
40G
50G
60G
70G
80G
90G
100G
Average (s)
1.1594
3.1383
9.0631
8.7559
6.8877
6.8288
6.6249
6.8938
6.3927
6.1310
6.2705
7.4086
Min (s)
1.1213
2.7605
6.2486
5.8120
4.8335
4.4621
5.0528
5.1933
4.8526
5.3093
4.9620
6.0582
Max (s)
1.3019
3.5102
14.1607
13.0477
10.8189
13.9983
10.3266
10.1829
11.0410
9.9066
9.8741
11.3243
P95 (s)
1.1887
3.4492
10.9949
9.4700
8.5692
7.1224
7.1637
9.3052
6.7361
6.4221
7.7417
9.5229
Count
174385
360000
360000
360000
360000
360000
360000
360000
360000
360000
360000
360000
1h 时间段
1G
5G
10G
20G
30G
40G
50G
60G
70G
80G
90G
100G
Average (s)
1.1059
5.3430
24.4075
18.6093
16.9998
15.5227
18.0480
16.6850
14.6864
14.8598
13.5039
16.4913
Min (s)
1.0498
4.9404
18.6505
12.6668
13.9997
12.0181
14.8242
11.6221
12.1664
11.9098
11.3289
11.9415
Max (s)
1.1971
6.3785
30.2033
23.4632
19.9779
19.1033
20.4751
22.4361
17.4949
18.5662
16.6517
23.2216
P95 (s)
1.1692
5.8464
26.9017
21.1006
19.8289
17.4038
19.7387
20.4293
17.0868
17.0413
16.4445
21.9530
Count
176704
720000
720000
720000
720000
720000
720000
720000
720000
720000
720000
720000
根据上面的 测试结果显示:数据的查询速度与数据库的大小无非常明显的相关性
CPU 利用率
notion image
 
磁盘IO 情况
notion image

3.5 查询程序执行log

  • 开发
  • ubuntu22.04编译实时内核Intel® OneAPI Install guide and image resize demo
    Loading...