
# 性能测试方法
本章基于GeminiDB Cassandra，进行性能测试，具体包括测试环境，测试步骤，以及测试结果。
#### 测试环境
- 区域：华北-北京四
- 可用区：可用区1+可用区2+可用区3（跨3个可用区部署）
- 弹性云服务器（Elastic Cloud Server，简称ECS）：规格选择h3.4xlarge.2，16U32GB，操作系统镜像使用CentOS 7.5 64位版本。
- 被测试实例的配置：每个实例均包含3个节点。
- 被测试实例的规格：覆盖以下规格类型，详见[表1 实例规格]。
   表1实例规格 
  | 编号       | 规格       |
  |:---|:---|
  | cluster1 | 4U16GB   |
  | cluster2 | 8U32GB   |
  | cluster3 | 16U64GB  |
  | cluster4 | 32U128GB |
     
  
 
#### 测试工具
本次测试采用开源社区的YCSB 0.15.0版本的测试工具，YCSB连接GeminiDB Cassandra集群负载均衡策略需使用RoundRobinPolicy。
YCSB是一款广泛使用的数据库性能测试工具，具体使用方法请参见[YCSB](https://github.com/brianfrankcooper/YCSB/tree/master/cassandra)。
#### 测试指标
OPS：Operation Per Second，数据库每秒执行的操作数。
#### 测试步骤
1. 配置workload文件。 按照[表2 测试模型]所示的业务模型，配置workload中的"readproportion"、"insertproportion"、"updateproportion"、"scanproportion"、"readmodifywriteproportion"的值。
   按照[表3 预置数据量]所示的预置数据量，配置workload中的"recordcount"的值。
   
2. 以测试模型workload-insert-mostly为例，执行以下命令，准备数据。 **sh bin/ycsb.sh load cassandra-cql -P workloads/workload-insert-mostly -p "hosts=${ContactPoints}" -p "port=${port}" -p "cassandra.username=${username}" -p "cassandra.password=${password}" -p operationcount=400000000 -p recordcount=400000000 -p exportfile=./data_load.exp -threads ${threadNum} -s \> data_load.log 2\>\&1 \&**
   
3. 以测试模型workload-insert-mostly为例，执行以下命令，测试性能。 **sh bin/ycsb.sh run cassandra-cql -P workloads/workload-insert-mostly -p "hosts=${ContactPoints}" -p "port=${port}" -p "cassandra.username=${username}" -p "cassandra.password=${password}" -p operationcount=9000000 -p recordcount=9000000 -p maxexecutiontime=3600 -p exportfile=./workload-insert-mostly.exp -threads ${threadNum} -s \> workload-insert-mostly_run.log 2\>\&1 \&**
   
 
#### 测试模型
- workload模型
   表2测试模型 
  | 测试模型编号                                                                                                  | 测试模型                             |
  |:---|:---|
  | 读多写少场景 workload-read-mostly                   | 95% read, 5% update              |
  | 读写均衡场景 workload-read-write-combination        | 50% update, 50% read             |
  | 读改写均衡场景 workload-read-modify-write               | 50% read, 50% read-modify-write  |
  | 读更新写混合场景 workload-mixed-operational-analytical | 65% read, 25% update, 10% insert |
  | 写多读少场景 workload-insert-mostly                    | 90% insert, 10% read             |
     
  

- 数据模型 fieldlength=100, fieldcount=10
  
- 预置数据量 本次性能测试中，针对每种规格的实例，测试了如下预置数据量的性能。
  预置数据具体如下表所示：
   表3预置数据量 
  | 编号       | 规格       | 预置数据量 |
  |:---|:---|:---|
  | cluster1 | 4U16GB   | 50GB  |
  | cluster2 | 8U32GB   | 100GB |
  | cluster3 | 16U64GB  | 200GB |
  | cluster4 | 32U128GB | 400GB |
     
  
 
