Step 1. Add the JitPack repository to your build file
Add it in your root settings.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Add it in your settings.gradle.kts at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Add to pom.xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Add it in your build.sbt at the end of resolvers:
resolvers += "jitpack" at "https://jitpack.io"
Add it in your project.clj at the end of repositories:
:repositories [["jitpack" "https://jitpack.io"]]
Step 2. Add the dependency
dependencies {
implementation 'com.github.brianfrankcooper:YCSB:0.17.0'
}
dependencies {
implementation("com.github.brianfrankcooper:YCSB:0.17.0")
}
<dependency>
<groupId>com.github.brianfrankcooper</groupId>
<artifactId>YCSB</artifactId>
<version>0.17.0</version>
</dependency>
libraryDependencies += "com.github.brianfrankcooper" % "YCSB" % "0.17.0"
:dependencies [[com.github.brianfrankcooper/YCSB "0.17.0"]]
Download the latest release of YCSB:
curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz
tar xfvz ycsb-0.17.0.tar.gz
cd ycsb-0.17.0
Set up a database to benchmark. There is a README file under each binding directory.
Run YCSB command.
On Linux:
bin/ycsb.sh load basic -P workloads/workloada
bin/ycsb.sh run basic -P workloads/workloada
On Windows:
bin/ycsb.bat load basic -P workloads\workloada
bin/ycsb.bat run basic -P workloads\workloada
Running the ycsb
command without any argument will print the usage.
See https://github.com/brianfrankcooper/YCSB/wiki/Running-a-Workload for a detailed documentation on how to run a workload.
See https://github.com/brianfrankcooper/YCSB/wiki/Core-Properties for the list of available workload properties.
YCSB requires the use of Maven 3; if you use Maven 2, you may see errors such as these.
To build the full distribution, with all database bindings:
mvn clean package
To build a single database binding:
mvn -pl site.ycsb:mongodb-binding -am clean package
In general, you shall be interested in 99% percentile (P99) of the latency distribution, and the rest of the tail - 99.9%, 99.99%, 99.999%. The difference between the amount of requests that will be observed by a user that fall into 95% (P95) percentile and 99% percentile may be sufficiently large.
For example, see "How Many Nines?" at https://bravenewgeek.com/everything-you-know-about-latency-is-wrong/. The formula to calculate probability of how many clients will observe a specific percentile is:
Probability_to_observe = 1 - Percentile ^ Requests
That is why almost 30% of the users will observe latency worse than P99 just by loading the default google.com web page:
1 - 0.99 ^ 30 = 0.27
Remember, that
If you run multiple loaders dump result histograms with:
-p hdrhistogram.fileoutput=true
-p hdrhistogram.output.path=file.hdr
merge them manually and extract required percentiles out of the joined result.
Remember that running multiple workloads may distort original workloads distributions they were intended to produce.
HdrHistogram can serialize its data to HDR files. Use CLI tool to do different operations with your saved histograms https://github.com/nitsanw/HdrLogProcessing.
You shall be interested in 3 functions:
To extract HDR content into CSV file format use from https://github.com/HdrHistogram/HdrHistogram/:
java -cp HdrHistogram-2.1.9.jar org.HdrHistogram.HistogramLogProcessor -i file.hdr -o output_${tag}.csv -csv -tag ${tag}