Key-value workload
This page documents the preview version (v2.23). Preview includes features under active development and is for development and testing only. For production, use the stable version (v2024.1). To learn more, see Versioning.
Use this benchmark to test the performance of YugabyteDB using a key-value workload.
Recommended configuration
Cluster configuration
For this benchmark, you will set up a three-node YugabyteDB cluster with a replication factor of 3
.
Machine configuration
-
Amazon Web Services (AWS)
- Instance type: i3.4xlarge
- Storage: 2 x 1.9 TB NVMe SSD (comes preconfigured with the instance)
-
Google Cloud Platform (GCP)
- Instance type: n1-standard-16
- Storage: 2 x 375 GB SSD
-
on-premises data center
- Instance: 16 CPU cores
- Storage: 1 x 200 GB SSD (minimum)
- RAM size: 30 GB (minimum)
Benchmark tool
We will use the YugabyteDB Workload Generator to perform this benchmark.
Download the YugabyteDB workload generator JAR file (yb-sample-apps.jar
) as follows:
wget https://github.com/yugabyte/yb-sample-apps/releases/download/v1.4.1/yb-sample-apps.jar -O yb-sample-apps.jar
To run the workload generator tool, you must have:
- Java runtime or JDK installed.
- Set the environment variable $ENDPOINTS to the IP addresses (including hosts and ports) for the nodes of the cluster.
ENDPOINTS="X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042"
Run the write-heavy key-value workload
Run the key-value workload with higher number of write threads (representing write-heavy workload).
Load 1B keys of 256 bytes each across 256 writer threads
$ java -jar ./yb-sample-apps.jar \
--workload CassandraKeyValue \
--nodes $ENDPOINTS \
--nouuid \
--value_size 256 \
--num_threads_read 0 \
--num_threads_write 256 \
--num_unique_keys 1000000000
Expected results
Name | Observation |
---|---|
Write Ops/sec | ~90k |
Write Latency | ~2.5-3.0 ms/op |
CPU (User + Sys) | 60% |
Run the read-heavy key-value workload
Run the key-value workload with higher number of read threads (representing read-heavy workload).
Load 1M keys of 256 bytes and access them with 256 reader threads.
$ java -jar ./yb-sample-apps.jar \
--workload CassandraKeyValue \
--nodes $ENDPOINTS \
--nouuid \
--value_size 256 \
--num_threads_read 256 \
--num_threads_write 0 \
--num_unique_keys 1000000
Expected results
Name | Observation |
---|---|
(Read) Ops/sec | ~150k |
(Read) Latency | ~1.66 ms/op |
CPU (User + Sys) | 60% |
Batch write-heavy KV workload
Run the key-value workload in batch mode and higher number of write threads (representing batched, write-heavy workload).
Load 1B keys of 256 bytes each across 64 writer threads in batches of 25 each.
$ java -jar ./yb-sample-apps.jar \
--workload CassandraBatchKeyValue \
--nodes $ENDPOINTS \
--nouuid \
--batch_size 25 \
--value_size 256 \
--num_threads_read 0 \
--num_threads_write 64 \
--num_unique_keys 1000000000
Expected results
Name | Observation |
---|---|
(Batch Write) Ops/sec | ~140k |
(Batch Write) Latency | ~9.0 ms/op |
CPU (User + Sys) | 80% |