因为数据集的参数属性必须在两个阶段被获得,在loading阶段用于构造和插入适当类型的记录,在transaction阶段用于指定正确的记录id和field,所以参数文件在两个阶段都会使用。workload java class使用这些属性插入记录(loading phase)或操作那些记录(transaction phase)。选择哪个阶段要看你运行YCSB命令行时指定的参数。
在运行YCSB客户端的命令行时,你可以指定java class和参数文件。客户端将动态加载你的workload class,从参数文件解析参数(和任何命令行的附加参数)并执行workload。在loading和transaction两个阶段,需要同样的属性和workload逻辑应用。例如,如果loading阶段创建10个field的记录,而后在transaction阶段必须知道有10个field可以被查询和修改。
YCSB自带的CoreWorkload 是标准workload包可以直接使用。CoreWorkload定义了简单的read/insert/update/scan操作组合。在参数文件中定义了每种操作的相应频率,以及其他workload属性。这样,修改参数文件可以执行不同的workload。更多CoreWorkload的细节,可以查看Core Workloads
如果CoreWorkload不能满足你的需求,你可以基于com.yahoo.ycsb.Workload定义自己的workload子类。细节可以查看 Implementing New Workloads
Step 4 选择适当的运行参数虽然workload class和参数文件定义了具体的workload,还有一些在运行特定测试时,你可能希望指定附加的设置。这些设置可以通过YCSB客户端命令行实现。设置包括
-threads: 客户端线程数量。默认,YCSB客户端使用一个worker线程,但可以指定。这通常用来根据数据库增加负载数量。
-target:每秒操作目标数量。默认,YCSB客户端会尝试尽可能多的操作。例如,每个操作平均花费100ms,客户端将在每个线程中每秒执行10个操作。然而,你可以限流每秒操作的数量。例如,产生一个延迟与吞吐量的曲线,你可以尝试不同的目标吞吐量,衡量每次产生的延迟。
-s :status. 对于一个长时间运行的workload,它是有用的,可以获得客户端状态报告,判断他是否崩溃并给你一些过程中的信息。通过命令行指定"-s",客户端可以每10秒报告状态到stderr。
Step 5. 加载数据Workload有两个执行阶段:loading阶段(定义待插入的数据)和transaction阶段(定义数据集上的操作)。为了加载数据,你要运行YCSB客户端并告诉它执行loading阶段。
例如,考虑workload A的benchmark(更多标准workloads细节在Core Workloads)。加载标准数据集
$ ./bin/ycsb load basic -P workloads/workloada
这个命令的关注点
load 参数告诉客户端执行loading 阶段
basic 参数告诉客户端使用BasicDB层。你可以在参数文件中指定这个属性,使用'db'属性(例如db=com.yahoo.ycsb.BasicDB)
-P参数用来加载property文件。这个例子中,我们用来加载workload参数文件。
加载HBase数据集:
$ ./bin/ycsb load hbase -P workloads/workloada -p columnfamily=family
这个命令的关注点
如果你使用BasicDB,你将看到数据库的insert语句。如果是你用一个实际的DB接口层,记录会被加载到数据库中。
标准workload参数文件创建很小的数据库,例如,workload仅创建1000条记录。这用于调试你的安装。然而,运行一个实际的benchmark你需要创建一个更大的数据库。例如,想象你需要加载100百万记录。然后,你需要修改workload文件中默认的“recordcount”属性。有两个办法实现。
指定一个新的属性文件,包含recordcount的新值。在命令行中,如果这个文件在workload文件后被指定,它会覆盖workload的任何属性。例如创建"large.dat"文件,仅有一行内容
recordcount=100000000
然后,client执行以下内容
$ ./bin/ycsb load basic -P workloads/workloada -P large.dat
Client会加载所有的属性文件,但使用最后加载的一个文件large.dat中的recordcount值,
通过命令行指定recordcount属性的新值。在命令行指定的任何属性都会覆盖配置文件中的属性。如下执行
$ ./bin/ycsb load basic -P workloads/workloada -p recordcount=100000000
一般来说,好的实践是在新的参数文件中存储任何重要的参数,代替通过命令行指定它们。这使得你的benchmark结果可以被复现。不用必须重建你使用的命令行,你重用参数文件即可。注意,当它开始执行时,YCSB Client会打印处他的命令行,所以如果你将Client的输出存储到一个数据文件,你可以很容易重新执行命令行。
因为一个大数据库加载需要很长时间,你可能希望1.需要Client输出状态,2.直接将输出写入数据文件。这样,你可以执行以下命令加载数据库。
$ ./bin/ycsb load basic -P workloads/workloada -P large.dat -s > load.dat
-s 参数将要求Client向stderr输出状态报告。这样命令行的输出可能是这样