这篇说说应用 YCSB 对腾讯云数据库 MongoDB 进行性能测试的完整过程。
一、测试目标
注意:说明:
注意:MongoDB 数据结构灵活,使用场景复杂多变,很难覆盖到所有场景,最终性能表现建议根据业务实际模型进行测试。
·对不同规格的 MongoDB 实例进行性能测试,包含2核4GB、4核8GB、6核16GB等。测试性能指标主要包含 throughput(ops/sec)每秒操作数、RAL(us) 平均读时延、WAL(us) 平均写时延等。
·每一种实例规格测试场景如下所示:
·50% read + 50% update:读更新比例依次为50%与50%。
·95% read + 5% update:读更新比例依次为95%和5%。
·5% read + 95% update:读更新比例依次为5%和95%。
·100% insert:仅写入数据。
·100% read:仅读取数据。
·100% update:仅更新数据。
二、步骤1:远程连接 CVM 实例,下载 YCSB 工具。
1. 使用标准登录方式登录 CVM 实例。具体操作,请参见 登录服务器。
2. 在 CVM 上进行 YCSB 下载。
三、步骤2:加载基础测试数据至 MongoDB 数据库
使用 nohup 命令,在后台运行 YCSB 工具,使用配置文件 workloada,连接到指定的 MongoDB 集群,以同步模式加载数据到 test 集合中,并将输出记录到 loadlog.txt 文件中。具体参数解释如下所示。
| 执行命令分解 | 解释说明 |
| nohup | Linux 命令通常用于运行需要长时间执行的后台进程,确保这些进程不会因为用户的注销或终端的关闭而中断。 |
| ./ycsb-0.17.0/bin/ycsb | YCSB 可执行文件路径。 |
| load | YCSB 的子命令,用于加载数据到数据库。 |
| mongodb | 指定要加载的数据库类型 MongoDB。 |
| -s | 指定同步模式,即加载操作将在所有操作完成后才返回。 |
| -P workloads/workloada | 指定要使用的 YCSB 工作负载配置文件,此处为 workloada。 |
| -p mongodb.url=mongodb://mongouser:password@10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 | 指定 MongoDB 的连接 URL 地址。连接字符串包括用户名、密码、服务器地址和端口号。w = 0表示写操作不需要确认,即不需要等待写操作的响应。 |
| -p table=test | 指定在 MongoDB 中使用的集合名称为 test。 |
| -threads 300 | 指定用于执行加载操作的线程数量,该示例为300。每一种实例规格对应测试的执行线程数不同。具体信息,请参见 测试结果。 |
| -p recordcount=10000000 | 指定要加载的记录总数。该示例为 1000 万条。每一种实例规格对应测试的数据记录总数不同,具体信息,请参见 测试结果。 |
| >loadlog.txt & | 将命令的输出重定向到 loadlog.txt 文件,并且使用 & 将命令放入后台执行。 |
nohup ./ycsb-0.17.0/bin/ycsb load mongodb -s -P workloads/workloada-p mongodb.url=mongodb://mongouser:password@10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -threads 300 -p recordcount=10000000>loadlog.txt &
四、50%update+50%read
执行总共10,000,000次操作,其中50%为读取操作,50%为更新操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。其中,关键配置参数如下:
·-p table=test: 指定在MongoDB中使用的集合名称。
·-p recordcount=10000000: 指定数据库中记录的总数。
·-p readproportion=0.5: 指定读取操作所占的比例,此处为50%。
·-p updateproportion=0.5: 指定更新操作所占的比例,此处为50%。
·-p insertproportion=0: 指定插入操作所占的比例,此处为0%,即不执行插入操作。
·-p operationcount=100000: 指定要执行的操作总数。
·-threads 100: 指定用于执行操作的线程数量。
·>runlog.txt &: 将命令的输出重定向到 runlog.txt 文件,并且使用&将命令放入后台执行。
注意:说明:
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.5 -p updateproportion=0.5 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &
五、95% update + 5% read
执行总共10,000,000次操作,其中95%为更新操作,5%为读取操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.05 -p updateproportion=0.95 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &
六、5%update + 95%read
执行总共10,000,000次操作,其中5%为更新操作,95%为读取操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &
七、100%insert
执行总共10,000,000次操作,100%插入操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadb -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0 -p updateproportion=0 -p insertproportion=1 -p operationcount=10000000 -threads 100 >runlog.txt &
八、100% read
执行总共10,000,000次操作,100%读操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadc -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=1 -p updateproportion=0 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &
九、100% update
执行总共10,000,000次操作,100% Update 操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadb -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0 -p updateproportion=1 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &
十、步骤4:获取测试数据
腾讯云 MongoDB 测试了 4.0、4.4版本,云盘版与物理版,不同实例规格的性能数据,具体测试结果,请参见 测试结果。