
# 测试方法
本章基于文档数据库服务社区版4.0、4.2和4.4版本的通用型规格和增强Ⅱ型规格进行性能测试，具体包括测试环境和测试步骤。
以下测试过程以集群和副本集实例类型为例。
#### 测试环境
- 区域：华北-北京四
- 可用区：可用区一
- 弹性云服务器（Elastic Cloud Server，简称ECS）：
  - 通用型规格选择通用计算型s3.2xlarge.2，8U16GB，操作系统镜像使用CentOS 7.5 64位版本。
  
  - 增强Ⅱ型规格选择通用计算增强型c3.2xlarge.2，8U16GB，操作系统镜像使用CentOS 7.6 x86_64位版本。
   
- 被测试实例的配置：
  - 集群实例包含2个mongos节点、2个shard节点，存储空间选择600GB。
  
  - 副本集实例包含3个节点，存储空间选择600GB。
   
 
#### 测试工具
本次测试采用开源社区的YCSB [0.17.0](https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz)版本的测试工具。
YCSB是一款广泛使用的数据库性能测试工具，具体使用方法请参见[YCSB](https://github.com/brianfrankcooper/YCSB/tree/master/mongodb)。
#### 测试指标
OPS：Operation Per Second，数据库每秒执行的操作数。
#### 测试步骤
1. 使用YCSB执行如下命令，加载测试数据： **./bin/ycsb load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=${recordcount} -p mongodb.url="mongodb://${userName}:${password}@${mongosIP}:${port}/ycsb?authSource=admin" -threads ${threadNum}**
   ![](https://support.huaweicloud.com/pwp-dds/public_sys-resources/note_3.0-zh-cn.png)
   - recordcount=${recordcount}：加载至DDS实例的数据总量。
   
   - mongodb.url="mongodb://${userName}:${password}@${mongosIP}:${port}/ycsb?authSource=admin"：DDS实例的高可用连接地址。
   
   - threads ${threadNum} ：客户端的并发线程数。
     
2. 使用YCSB执行如下命令，进行性能压测：
   **./bin/ycsb run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=${recordcount} -p operationcount=${operationcount} -p insertproportion=0 -p readproportion=1 -p updateproportion=0 -p requestdistribution=zipfian -p mongodb.url="mongodb://${userName}:${password}@${mongosIP}:${port}/ycsb?authSource=admin" -threads ${threadNum}**
   ![](https://support.huaweicloud.com/pwp-dds/public_sys-resources/note_3.0-zh-cn.png)
   - recordcount=${recordcount}：加载至DDS实例的数据总量。
   
   - operationcount=${operationcount}：执行读写测试的总操作次数。
   
   - insertproportion=0：加载数据的操作比例。
   
   - readproportion=1：读操作比例。
   
   - updateproportion=0：更新操作比例。
   
   - mongodb.url="mongodb://${userName}:${password}@${mongosIP}:${port}/ycsb?authSource=admin"：DDS实例的高可用连接地址。
   
   - threads ${threadNum} ：客户端的并发线程数。
   
   - recordcount和operationcount的值一致。
   
   - insertproportion、readproportion、updateproportion的值的总和为1。
     
 
#### 测试模型
- 业务模型
   表1业务模型 
  | 业务模型编号 | 业务模型                             |
  |:---|:---|
  | S1     | 100% insert                      |
  | S2     | 90% update ,10% read             |
  | S3     | 65% read ,25% insert, 10% update |
  | S4     | 90% read ,5% insert, 5% update   |
  | S5     | 50% update, 50% read             |
  | S6     | 100% read                        |
  | S7     | 95% read ,5% update              |
  | S8     | 5% read ,95% update              |
  | S9     | 100% update                      |
     
  

- 文档模型 使用YCSB默认配置，每个文档大小1KB，默认"_id"索引。
  
- 预置数据量 本次性能测试中，针对每种规格的集群，测试了2种预置数据量下的性能。
  不同规格集群的预置数据量不同，具体如下表所示。
   表2预置数据量 
  | 规格       | 预置小数据量               | 预置大数据量                | 测试并发数 |
  |:---|:---|:---|:---|
  | 1U4GB    | RecordCount：1000000  | RecordCount：10000000  | 100   |
  | 2U4GB    | RecordCount：1000000  | RecordCount：10000000  | 100   |
  | 2U8GB    | RecordCount：2000000  | RecordCount：20000000  | 100   |
  | 2U16GB   | RecordCount：4000000  | RecordCount：40000000  | 100   |
  | 4U8GB    | RecordCount：2000000  | RecordCount：20000000  | 100   |
  | 4U16GB   | RecordCount：4000000  | RecordCount：40000000  | 100   |
  | 4U32GB   | RecordCount：10000000 | RecordCount：100000000 | 100   |
  | 8U16GB   | RecordCount：4000000  | RecordCount：40000000  | 100   |
  | 8U32GB   | RecordCount：10000000 | RecordCount：100000000 | 100   |
  | 8U64GB   | RecordCount：10000000 | RecordCount：100000000 | 100   |
  | 16U32GB  | RecordCount：10000000 | RecordCount：100000000 | 100   |
  | 16U64GB  | RecordCount：10000000 | RecordCount：100000000 | 100   |
  | 16U128GB | RecordCount：10000000 | RecordCount：100000000 | 100   |
  | 32U64GB  | RecordCount：10000000 | RecordCount：100000000 | 200   |
  | 32U128GB | RecordCount：10000000 | RecordCount：100000000 | 200   |
  | 64U256GB | RecordCount：10000000 | RecordCount：100000000 | 400   |
     
  

- 数据一致性模型 弱一致性：Write Concern为{w : 1, j : false}，数据写入单个节点磁盘，将返回结果。后台异步持久化下盘，为默认的Write Concern设置。
  
 
