YCSB工具使用说明

1. 属性

1.1 核心YCSB属性

所有工作量文件可以指定以下属性:

参数名 意义 默认值
workload 要使用的工作量类,如com.yahoo.ycsb.workloads.CoreWorkload
db 要使用的数据库类。可选地,这在命令行可以指定 com.yahoo.ycsb.BasicDB
exporter 要是用的测量结果的输出类 com.yahoo.ycsb.measurements.exporter.TextMeasurementsExporter
exportfile 用于替代stdout的输出文件路径 未定义/输出到stdout
threadcount YCSB客户端的线程数。可选地,这可以在命令行指定 1
measurementtype 支持的测量结果类型有直方图和时间序列 直方图

1.2 核心工作量包属性

和核心工作量构造器一起使用的属性文件可以指定以下属性及值

1.2.1 重要参数
参数名 意义 默认值 有效取值
recordcount 数据行数,装载进数据库的初始记录数 0
operationcount 要进行的操作数数量
fieldcount 每行的qualifier个数 10
fieldlength 100
requestdistribution 随机读的数据分布 uniform uniform、zipfian、latest
insertorder 写入顺序,ordered是顺序写,hashed是随机写 hashed ordered、hashed
readallfields 读取所有qualifier还是只读一个qualifier true true、false
readproportion 随机读占所有操作的比例 0.95
readproportion 更新(写入)占所有操作的比例 0.05
target 每秒总共操作的次数 unthrottled
thread 客户端线程数 1
1.2.2 非必需参数(对tera测试意义不大,用默认值即可)
参数名 意义 默认值 有效取值
insertproportion 插入(写入)占所有操作的比例 0
scanproportion scan占所有操作的比例,tera_mark不支持 0
readmodifywriteproportion readmodifywrite占所有操作的比例,tera不支持该操作 0
maxscanlength 每次scan需要读取的行数,tera不支持指定行数的scan 1000
scanlengthdistribution scan的行数选择策略 uniform
maxexecutiontime 最大执行时间,超过此时间会强行结束测试(单位为秒)
table 表名,tera_mark不支持 usertable

1.3 测量结果属性

每一个测量结果类型可以为如下属性形式:

类型 参数名 意义 默认值 有效取值
直方图 histogram.buckets 直方图输出的区间数 1000
时间序列 timeseries.granularity 时间序列输出的粒度 1000

2 运行时参数

即使工作负载类和参数文件定义了一个特定的工作负载,在运行基准测试时你还是想指定一些额外的设置。当你运行YCSB客户端时命令行提供了这些设置。这些设置包括:

  • -threads :客户端的线程。默认地,YCSB客户端使用一个工作者线程,但是额外的线程可以被指定。当需要增加对数据库的装载数量时这是经常使用的。
  • -target:每秒的目标操作数。默认地,YCSB客户端将试图尽可能地执行最多操作。例如,如果每个操作平均使用了100ms,客户端每个工作者线程每秒将执行10个操作。然而,你可以限制每秒的目标操作数。比如,为了生成一条延迟-吞吐量曲线,你可以指定不同的目标吞吐量,以测试每种吞吐量下的延迟。
  • -s:状态。对于一个运行时间长的工作负载,让客户端报告状态是有用的,这可以让你知道它并没有挂掉,并且给你某些对它的执行过程的想法。通过在命令行指定“-s”,客户端将每10秒输出状态到stderr。

3 用法

3.1 相关命令

  • load: 执行加载命令
  • run: 执行工作负载
  • shell: 交互式模式
    1. basic参数告诉客户端使用哑BasicDB层。你也可以在你的参数文件中使用“db”属性指定它(例如,“db=com.yahoo.ycsb.BasicDB”)
    2. ./bin/ycsb shell basic
    3. > help
    4. Commands:
    5. read key [field1 field2 ...] // Read a record
    6. scan key recordcount [field1 field2 ...] // Scan starting at key
    7. insert key name1=value1 [name2=value2 ...] // Insert a new record
    8. update key name1=value1 [name2=value2 ...] // Update a record
    9. delete key // Delete a record
    10. table [tablename] // Get or [set] the name of the table
    11. quit // Quit

3.2 使用方法

使用时,先建表,再加载数据,最后执行相关事务。

3.2.1 建表

ycsb的生成的row都是“user”+19位数字的格式,如 user9105318085603802964。 因此,如果需要预分表,必须以“user”+N个数字作为分隔,建议选择2个数字。 例如要预分4个tablet,分隔字符串为:user25、user50、user75

  1. create 'usertable','f1','f2','f3'
3.2.2 向tera中加载测试数据
  1. bin/ycsb load tera -p workload=com.yahoo.ycsb.workloads.CoreWorkload \ //load参数告诉客户端执行工作负载的装载阶段。
  2. -p recordcount=$(ROW_NUM) \ //-p参数被用于设置参数,-P参数用于装载属性文件。
  3. -p fieldlength=$(QUALIFIER_NUM) \
  4. -p fieldcount=$(VALUE_SIZE)
3.2.3 执行测试
  1. bin/ycsb run tera -p workload=com.yahoo.ycsb.workloads.CoreWorkload \
  2. -p recordcount=$(ROW_NUM) \
  3. -p operationcount=$(ROW_NUM) \
  4. -p requestdistribution=$(DIST) \
  5. -p fieldlength=$(QUALIFIER_NUM) \
  6. -p fieldcount=$(VALUE_SIZE) \
  7. -p updateproportion=$(WRITE_PROP) \
  8. -p readproportion=$(READ_PROP)