参考 https://github.com/cloudius-systems/osv/wiki/Benchmarking-Cassandra-and-other-NoSQL-databases-with-YCSB
https://github.com/brianfrankcooper/YCSB/tree/master/cassandra 创建 表头
https://gist.github.com/pbailis/3978273 设置field参数 长度和个数
启动和 redis类似,只不过,参数不同。
比如redis指定主机的参数是 -p "redis.host=127.0.0.1"
而cassandra 是 -p hosts=127.0.0.1
这里hosts为什么是复数,应该是因为cassandra可以有多个服务节点。
在运行测试之前,必须先运行cassrandra客户端手动创建供ycsb使用的数据库和表。
数据库名叫ycsb,表名叫usertable,按照上面的参考进行。
create keyspace ycsb
WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 1 };
USE 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 usertable (
y_id varchar primary key,
field0 varchar);
这样在load时需要指定 -p fieldcount=1
ALTER TABLE usertable WITH COMPRESSION = {'sstable_compression': ''};
执行load测试后,可以在客户端使用 select * from usertable 查看插入的数据
示例:bin/ycsb load cassandra-cql -P workloads/workloadc -p "hosts=127.0.0.1" -p operationcount=90 -p recordcount=1000000 -p fieldlength=100 -p fieldcount=1 -threads 28
其中 -threads 28 表示使用28个线程,注意压力测试必须使用多个线程使服务端浸满,这样才可以类比leveldb的db_bench。
如果只用一个线程,那么客服交互将非常耗时。
如果出现错误,尝试使用cassandra2
bin/ycsb load cassandra2-cql -P workloads/workloadc -p "hosts=127.0.0.1" -p operationcount=90 -p recordcount=1000000 -p fieldlength=100 -p fieldcount=1 -threads 28
注意:
如果出现类似
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
的错误,网上一般说是java没装或jdk版本配置不对。但其实可能是maven没装。
直接运行提示的 mvn 命令就知道了。