Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: ab8e0f65f1

Fetching latest commit…

Cannot retrieve the latest commit at this time

Key-Value application

This example application demonstrates how to create a "Key-Value" store in VoltDB.

Many attributes of the application are customizable through arguments passed to the client, including:

  - The maximum number of transactions the client will attempt per second
  - How long the sample client runs
  - When to start recording performance statistics
  - How frequently to report those statistics
  - "Key" size
  - Minimum and Maximum "Value" size (Value sizes will be randomly distributed between min and max)
  - Percentage of transactions that are "Gets" (out of 100%, the rest are "Puts")
  - Store the "Value" as is, or compress the "Value" (compressible binary)

These attributes can be adjusted by modifying the arguments to the "async-benchmark" and "sync-benchmark" targets in

Additional arguments allow the client to automatically tune itself for optimal performance ("client" target only).

  - Whether auto-tuning should be turned on, allowing the benchmark to determine an optimal TPS for a given target latency
  - Target average transaction call latency (in milliseconds)


This application supports logging using log4j and is delivered with log4j configuration files for both the client (log-client.xml) and server (log-server.xml).

Interpreting the Results

The default client configuration will allow the system to automatically tune itself for optimal performance, regardless of your underlying hardware and cluster deployment.

The client starts "fire-hosing" the VoltDB server by attempting to submit transactions faster than the server can possibly process them (1 billion transactions per second, or 1B TPS).  Within 5 seconds, the automated tuning should be able to figure out an optimized throughput (TPS) that maintains transaction latency within 6 ms.

You can also turn auto-tuning off to experiment with different loads or to better understand why proper tuning is key to getting the most of your specific VoltDB deployment.

Rate-limiting your clients (or adding cluster nodes) is essential to preventing "fire-hosing" your server (cluster) and will ensure you get proper application responsiveness (latency) while maximizing througput (TPS) for your hardware configuration.

While the "Key-Value" application is designed with benchmarking in mind, it is essentially a network-bound application: you will generally find that you max-out your network bandwidth long before you exhaust VoltDB's throughput processing capability.

For a better feel for the type of performance VoltDB is capable of on your hardware, check out the "Voter" application sample.

For more on benchmarking and tips on application tuning, make sure you visit the VoltDB blog:
 - actions described
---------------------                 : compile all Java clients and stored procedures, build the catalog, and start the server server          : start the server client          : start the async client benchmark, [if needed, initialize the given number of key-value pairs (puts),] begin normal client processing (gets and puts) async-benchmark : same as client sync-benchmark  : start the multi-threaded sync client, [if needed, initialize the given number of key-value pairs (puts),] begin normal client processing (gets and puts) jdbc-benchmark  : start the JDBC client benchmark catalog         : compile sources and build the catalog clean           : remove compiled files
Something went wrong with that request. Please try again.