💯

YCSB Note (2)测试Cassandra

0. 启动Cassabdra集群

先启动种子节点worker1、worker2
# 1. 先在worker1、worker2两个种子节点上执行 cassandra -R # 2. 在其他节点master上执行 cassandra -R # 查各节点运行情况 nodetool status

1. 准备

在运行测试之前,必须先运行cassrandra客户端手动创建供ycsb使用的数据库和表。
数据库名叫ycsb,表名叫usertable,按照上面的参考进行。

连接CQLSH

cqlsh是一个命令行的shell,通过CQL与Cassandra交互。
cqlsh 192.168.92.159 9042

1.1 创建数据库

使用cassandra的cqlsh创建keyspace和cloumn family
create keyspace ycsb WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 3 };
注意:数据复制有两种策略:
  • SimpleStrategy:仅用于单个数据中心和一个机架。如果您打算使用多个数据中心,请使用NetworkTopologyStrategy
  • NetworkTopologyStrategy:强烈建议用于大多数部署,因为未来扩展需要扩展到多个数据中心时更容易。
replication_factor:复制因子。如果class是SimpleStrategy,则是必需的; 否则,不使用。多个节点上数据的复制数量。
复制因子1意味着一个节点上每行只有一个副本。复制因子2意味着每行的两个副本,其中每个副本位于不同的节点上。所有复制品都同样重要; 没有主要或主要副本。作为一般规则,复制因子不应超过群集中的节点数量。

1.2 创建表

切换到ycsb数据库
USE ycsb;
在ycsb中创建表
create table usertable ( y_id varchar primary key, field0 varchar, field1 varchar, field2 varchar, field3 varchar, field4 varchar, field5 varchar, field6 varchar, field7 varchar, field8 varchar, field9 varchar);
create table test_table ( y_id varchar primary key, id int, project varchar, category varchar, date varchar, area varchar, department varchar, level varchar, code bigint);
Cassandra CQL数据类型
数据类型
常量
描述
ascii
strings
表示ASCII字符串
bigint
bigint
表示64位有符号长
blob
blobs
表示任意字节
Boolean
booleans
表示true或false
counter
integers
表示计数器列
decimal
integers, floats
表示变量精度十进制
double
integers
表示64位IEEE-754浮点
float
integers, floats
表示32位IEEE-754浮点
inet
strings
表示一个IP地址,IPv4或IPv6
int
integers
表示32位有符号整数
text
strings
表示UTF8编码的字符串
timestamp
integers, strings
表示时间戳
timeuuid
uuids
表示类型1 UUID
uuid
uuids
表示类型1或类型4
UUID
varchar
strings
表示uTF8编码的字符串
varint
integers
表示任意精度整数

2. 测试

cd /home/liupc/ycsb/ycsb-0.14.0

2.1 单线程测试

使用默认的workloads/workloada进行测试

2.1.1 加载数据

./bin/ycsb.sh load cassandra2-cql -P workloads/workloada -p hosts=192.168.92.159 -p columnfamily=test_table -p recordcount=1000 -s > outputLoada.txt
命令参数说明:
ycsb [command] [database] [options]
  • command选项:load:载入测试数据。run:执行测试过程。shell:交互模式。
  • database选项:指定测试的数据库场景,例如mongodb, cassandra, memcached等。
  • options选项:
    • P file :指定workload文件,相对路径或者绝对路径。
    • cp path :指定额外的Java classpath。
    • jvm-args args :指定额外的JVM参数。
    • p key=value :设置ycsb配置项,会覆盖workload文件的配置项。
    • s :运行时的中间状态打印到stderr中。
    • target n :表示1s中总共的操作次数。
    • threads n :设置ycsb client的并发测试线程数,默认是1,单线程。

2.1.2 执行测试

./bin/ycsb.sh run cassandra2-cql -P workloads/workloada -p hosts=192.168.92.159 -p columnfamily=test_table -p recordcount=1000 -s > outputRun.txt
返回字段Return=OK,则表示测试完成,取“[OVERALL],Throughput”值作为测试指标。

2.1.3 测试结果

测试结果分析
  • RunTime(ms): 数据加载所用时间,单位毫秒(ms)
  • Throughput(ops/sec): 吞吐量,即ops(每秒操作次数)
  • Operations: 操作的总次数
  • AverageLatency(us): 平均响应延时,单位是微秒(us)
  • MinLatency(us): 最小响应时间,单位是微秒(us)
  • MaxLatency(us): 最大响应时间,单位是微秒(us)
  • 95thPercentileLatency(us): 95%的操作延时,单位是微秒(us)
  • 99thPercentileLatency(us): 99%的操作延时,单位是微秒(us)
  • Return=OK: 成功返回数,这个值不符合测试要求,则证明测试失败.
  • [READ]开头的代表只读的操作记录,其他还有例如[UPDATE]等
notion image

2.2 多线程测试

  1. 编辑连接cassandra的配置文件cassandra.properties
vim cassandra.properties
  • cassandra.properties 文件内容
hosts = 192.168.92.159,192.168.92.160,192.168.92.161 port = 9042 cassandra.keyspace = ycsb # cassandra.username = ershixiong #cassandra用户名 # cassandra.password = 111111 #cassandra密码 cassandra.readconsistencylevel = SERIAL cassandra.writeconsistencylevel = ANY cassandra.maxconnections = 100 cassandra.connecttimeoutmillis = 1000000000 cassandra.readtimeoutmillis = 1000000000
  • YCSB参数
  • Cassandra参数
  1. YCSB测试包括两个阶段,Load the data 和 Run the workload
load阶段:
bin/ycsb.sh load cassandra-cql -P workloads/workloada -P cassandra.properties -p columnfamily=test_table -s -threads 4 > load_4threads.txt
run阶段:
bin/ycsb.sh run cassandra-cql -P workloads/workloada -P cassandra.properties -p columnfamily=test_table -s -threads 4 > run_4threads.txt
  • ycsb [command] [database] [options]
  • 数据接口名为cassandra-cql
  • 加载ycsb的配置:workloads/workloada
  • 加载cassandra的配置:cassandra.properties
  • 加载columnfamily:名称为test_table
  • -threads 4:4个线程执行
这里可以将workloads/workloada 的参数写入cassandra.properties 中,这样就可以只加载一个文件了。
notion image

参考