性能白皮书

云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。

测试环境

配置项

压测ECS实例

MongoDB物理机架构实例

MongoDB云盘架构实例

地域及可用区

华东1(杭州)可用区H

华东1(杭州)可用区H

华东1(杭州)可用区H

网络类型

专有网络VPC

专有网络VPC

专有网络VPC

实例规格族

计算平衡增强型c6e

通用型和独享型

独享型

实例规格

ecs.c6e.2xlarge(8核 16 GB)

包含多种在售规格,详情请参见测试结果

包含多种在售规格,详情请参见测试结果

存储类型

ESSD PL1云盘

SSD本地盘

ESSD PL1云盘

拓扑结构

-

标准副本集实例(三节点,一个主节点、一个从节点和一个隐藏节点)

标准副本集实例(三节点,一个主节点、一个从节点和一个隐藏节点)

镜像版本

Alibaba Cloud Linux 3.2104 LTS 64

3.10.0-327.ali2017.alios7.x86_64

4.19.81-17.2.al7.x86_64

实例内核版本

-

MongoDB 4.2(小版本基线4.2.13)

MongoDB 4.4(小版本基线4.4.1)

可调一致性配置

-

Default read/write concern

Default read/write concern

说明

压测ECS实例和云数据库MongoDB实例在同一地域及可用区,RTT(Round-Trip Time)大概在0.104ms左右。

测试工具

本文将采用开源社区的YCSB 0.17.0压测工具进行压测。

说明

YCSB是一款Java编写的支持多种数据库的性能测试工具,具体安装和使用方法请参见YCSB

测试方案

  1. ECS实例的主私网IP添加到云数据库MongoDB实例的白名单中。如何添加,请参见修改白名单

    说明

    您可以登录ECS控制台,在实例详情页面的网络信息区域查看ECS实例的主私网IP

  2. 远程连接ECS实例。如何连接,请参见连接ECS实例

  3. 使用YCSB工具加载测试数据。

    ./bin/ycsb load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=1000000 -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -threads 8

    您需要修改如下参数值:

    • recordcount=1000000:加载至云数据库MongoDB实例的数据总数。

    • mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin":云数据库MongoDB实例的连接地址。本文使用的数据库账号为test,所属数据库为admin。

      说明

      您可以登录云数据库MongoDB控制台,在数据库连接页面的私网连接 - 专有网络区域查看连接地址。

    • threads 8:客户端的并发线程数。

  4. 执行如下测试命令,进行性能压测。

    ./bin/ycsb run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=1000000 -p operationcount=5000000 -p insertproportion=0 -p readproportion=50 -p updateproportion=50 -p requestdistribution=zipfian -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -threads 8

    您需要修改如下参数值:

    • recordcount=1000000:加载至云数据库MongoDB实例的数据总数。
    • operationcount=5000000:执行读写测试的总次数。

    • insertproportion=0:加载数据操作比例。

    • readproportion=50:读操作比例。

    • updateproportion=50:更新操作比例。

    • mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin":云数据库MongoDB实例的连接地址。本文使用的数据库账号为test,所属数据库为admin。
      说明 您可以登录云数据库MongoDB控制台,在数据库连接页面的私网连接 - 专有网络区域查看连接地址。
    • threads 8:客户端的并发线程数。

测试结果

场景说明

  • r:w=100:0:读写比例依次为100%和0。

  • r:w=95:5:读写比例依次为95%和5%。

  • r:w=50:50:读写比例依次为50%和50%。

  • r:w=5:95:读写比例依次为5%和95%。

  • r:w=0:100:读写比例依次为0100%。

参数说明

  • recordcount:加载至云数据库MongoDB实例的数据总数。

  • operationcount:执行读写测试的总次数。

  • threads:客户端的并发线程数。

  • throughput:吞吐量,以每秒操作数(OPS,Operation per second)为单位。

  • RAL:读操作平均延迟,单位:微秒(us)。

  • WAL:写操作平均延迟,单位:微秒(us)。

说明

本文中RALWAL取值为0,表示不涉及读操作或写操作。

如下为物理机架构实例和云盘架构实例在不同读写比下的测试结果以及性能对比图。

物理机架构实例(MongoDB 4.2)

加载测试数据

CPU:Memory

实例规格

recordcount

threads

throughput

RAL

WAL

1:2

1核 2 GB(通用型)

1000000

4

3589

0

1110

2核 4 GB(通用型)

2000000

8

7629

0

521

4核 8 GB(通用型)

4000000

16

24300

0

654

8核 16 GB(通用型)

8000000

32

26745

0

1191

1:4

8核 32 GB(通用型)

16000000

32

29090

0

1095

16核 64 GB(通用型)

32000000

128

41098

0

3033

1:8

2核 16 GB(独享型)

8000000

8

6553

0

1217

4核 32 GB(独享型)

16000000

16

14526

0

1097

8核 64 GB(独享型)

32000000

32

35437

0

899

16核 128 GB(独享型)

64000000

160

60078

0

2658

r:w=100:0

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

1核 2 GB(通用型)

1000000

4

6387

623

0

2核 4 GB(通用型)

2000000

8

12893

616

0

4核 8 GB(通用型)

4000000

16

37016

427

0

8核 16 GB(通用型)

8000000

32

48014

658

0

1:4

8核 32 GB(通用型)

16000000

32

44251

1589

0

16核 64 GB(通用型)

32000000

128

57252

2226

0

1:8

2核 16 GB(独享型)

8000000

8

12436

641

0

4核 32 GB(独享型)

16000000

16

20551

773

0

8核 64 GB(独享型)

32000000

32

50246

632

0

16核 128 GB(独享型)

64000000

160

66876

2385

0

r:w=95:5

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

1核 2 GB(通用型)

1000000

4

4556

864

1079

2核 4 GB(通用型)

2000000

8

10391

757

914

4核 8 GB(通用型)

4000000

16

34411

453

561

8核 16 GB(通用型)

8000000

32

41095

763

925

1:4

8核 32 GB(通用型)

16000000

32

39920

785

926

16核 64 GB(通用型)

32000000

128

55148

2305

2381

1:8

2核 16 GB(独享型)

8000000

8

8869

871

1394

4核 32 GB(独享型)

16000000

16

18206

856

1192

8核 64 GB(独享型)

32000000

32

47111

664

861

16核 128 GB(独享型)

64000000

160

68801

2312

2449

r:w=50:50

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

1核 2 GB(通用型)

1000000

4

3062

1207

1399

2核 4 GB(通用型)

2000000

8

6610

1128

1318

4核 8 GB(通用型)

4000000

16

19743

743

864

8核 16 GB(通用型)

8000000

32

22750

987

1809

1:4

8核 32 GB(通用型)

16000000

32

21763

1010

1907

16核 64 GB(通用型)

32000000

128

43498

2162

3696

1:8

2核 16 GB(独享型)

8000000

8

5680

1345

1930

4核 32 GB(独享型)

16000000

16

10470

1064

1971

8核 64 GB(独享型)

32000000

32

20427

790

2329

16核 128 GB(独享型)

64000000

160

29445

2944

7891

r:w=5:95

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

1核 2 GB(通用型)

1000000

4

2431

1511

1649

2核 4 GB(通用型)

2000000

8

5336

1406

1608

4核 8 GB(通用型)

4000000

16

14496

858

1110

8核 16 GB(通用型)

8000000

32

14573

958

2253

1:4

8核 32 GB(通用型)

16000000

32

13812

995

2377

16核 64 GB(通用型)

32000000

128

20663

2831

6348

1:8

2核 16 GB(独享型)

8000000

8

4079

3201

8066

4核 32 GB(独享型)

16000000

16

7154

1080

2288

8核 64 GB(独享型)

32000000

32

12585

783

2626

16核 128 GB(独享型)

64000000

160

17083

4241

9615

r:w=0:100

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

1核 2 GB(通用型)

1000000

4

2429

0

1642

2核 4 GB(通用型)

2000000

8

5238

0

1643

4核 8 GB(通用型)

4000000

16

13794

0

1154

8核 16 GB(通用型)

8000000

32

14566

0

2189

1:4

8核 32 GB(通用型)

16000000

32

13485

0

2361

16核 64 GB(通用型)

32000000

128

19758

0

6461

1:8

2核 16 GB(独享型)

8000000

8

3939

0

8097

4核 32 GB(独享型)

16000000

16

6940

0

2298

8核 64 GB(独享型)

32000000

32

12567

0

2539

16核 128 GB(独享型)

64000000

160

16325

0

9770

云盘架构实例(MongoDB 4.4)

加载测试数据

CPU:Memory

实例规格

recordcount

threads

throughput

RAL

WAL

1:2

4核 8 GB(独享型)

4000000

16

18235

0

871

8核 16 GB(独享型)

8000000

32

35643

0

891

16核 32 GB(独享型)

16000000

64

65345

0

971

1:4

2核 8 GB(独享型)

4000000

8

6613

0

1202

8核 32 GB(独享型)

16000000

64

45952

0

1385

16核 64 GB(独享型)

32000000

96

61973

0

1539

1:8

2核 16 GB(独享型)

8000000

8

6224

0

1280

4核 32 GB(独享型)

16000000

16

18603

0

857

r:w=100:0

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

4核 8 GB(独享型)

4000000

16

24945

634

0

8核 16 GB(独享型)

8000000

32

33270

938

0

16核 32 GB(独享型)

16000000

64

55703

1136

0

1:4

2核 8 GB(独享型)

4000000

8

10989

723

0

8核 32 GB(独享型)

16000000

64

36039

1740

0

16核 64 GB(独享型)

32000000

96

59960

1585

0

1:8

2核 16 GB(独享型)

8000000

8

11298

703

0

4核 32 GB(独享型)

16000000

16

24306

653

0

r:w=95:5

CPU:Memory

实例规格

operatiocount

threads

throughput

RAL

WAL

1:2

4核 8 GB(独享型)

4000000

16

22471

797

1161

8核 16 GB(独享型)

8000000

32

29543

1064

1199

16核 32 GB(独享型)

16000000

64

53466

1178

1300

1:4

2核 8 GB(独享型)

4000000

8

8986

854

1480

8核 32 GB(独享型)

16000000

64

34128

1829

1970

16核 64 GB(独享型)

32000000

96

78363

1196

1420

1:8

2核 16 GB(独享型)

8000000

8

8806

867

1619

4核 32 GB(独享型)

16000000

16

20132

770

1181

r:w=50:50

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

4核 8 GB(独享型)

4000000

16

14127

1009

1238

8核 16 GB(独享型)

8000000

32

19887

1496

1670

16核 32 GB(独享型)

16000000

64

23120

2680

2819

1:4

2核 8 GB(独享型)

4000000

8

5132

1370

1735

8核 32 GB(独享型)

16000000

64

18929

2930

3615

16核 64 GB(独享型)

32000000

96

25612

3675

4363

1:8

2核 16 GB(独享型)

8000000

8

4841

1438

1855

4核 32 GB(独享型)

16000000

16

13051

1080

1356

r:w=5:95

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

4核 8 GB(独享型)

4000000

16

10266

1141

1570

8核 16 GB(独享型)

8000000

32

13556

2141

2351

16核 32 GB(独享型)

16000000

64

14447

4295

4412

1:4

2核 8 GB(独享型)

4000000

8

4226

1591

1902

8核 32 GB(独享型)

16000000

64

12055

5109

5210

16核 64 GB(独享型)

32000000

96

15216

5877

8503

1:8

2核 16 GB(独享型)

8000000

8

3874

1792

2072

4核 32 GB(独享型)

16000000

16

10083

1106

1605

r:w=0:100

CPU:Memory

实例规格

operationcount

threads

throughput

RAL

WAL

1:2

4核 8 GB(独享型)

4000000

16

9960

0

1592

8核 16 GB(独享型)

8000000

32

13064

0

2423

16核 32 GB(独享型)

16000000

64

13743

0

4615

1:4

2核 8 GB(独享型)

4000000

8

4287

0

1860

8核 32 GB(独享型)

16000000

64

11611

0

5441

16核 64 GB(独享型)

32000000

96

14391

0

8746

1:8

2核 16 GB(独享型)

8000000

8

3854

0

2067

4核 32 GB(独享型)

16000000

16

9711

0

1638

性能对比图

CPU:Memory=1:2

  • 实例规格为4核 8 GB:4核8GB数据

  • 实例规格为8核 16 GB:8核16GB

CPU:Memory=1:4

  • 实例规格为8核 32 GB:8核32GB数据

  • 实例规格为16核 64 GB:16核64GB数据

CPU:Memory=1:8

  • 实例规格为2核 16 GB:2核16GB数据

  • 实例规格为4核 32 GB:4核32GB数据

测试结果分析

  • CPU:Memory=1:2:物理机架构的实例性能优于云盘架构的实例性能。不同的读写比测试环境下,性能差异大约在7%~50%之间,其中4核 8 GB规格最为明显。

  • CPU:Memory=1:4:物理机架构和云盘架构的实例性能差异缩小到了10%左右。其中,物理机架构实例更适用于写场景,云盘架构实例更适用于读场景。

  • CPU:Memory=1:8

    • 物理机架构和云盘架构的实例性能基本无差异。

    • 随着内存的增高,云盘架构的实例性能明显优于物理机架构,其中4核 32 GB规格最为明显。

说明

云盘架构具有如下优势:

  • 所有资源都是独享的,不存在物理机架构下资源抢占的情况。

  • 计算和存储可以分别进行弹性伸缩,无需数据迁移。

  • 具有不同的性能等级,包括ESSD PL1、ESSD PL2ESSD PL3,按量付费的性价比更高。