YB Sample Apps

Sample applications for benchmarking YugaByte DB functionality on various workload types.

License

License

GroupId

GroupId

com.yugabyte
ArtifactId

ArtifactId

yb-sample-apps
Last Version

Last Version

1.0.11
Release Date

Release Date

Type

Type

jar
Description

Description

YB Sample Apps
Sample applications for benchmarking YugaByte DB functionality on various workload types.
Project URL

Project URL

https://github.com/YugaByte/yb-sample-apps
Source Code Management

Source Code Management

https://github.com/yugabyte/yb-sample-apps

Download yb-sample-apps

How to add to project

<!-- https://jarcasting.com/artifacts/com.yugabyte/yb-sample-apps/ -->
<dependency>
    <groupId>com.yugabyte</groupId>
    <artifactId>yb-sample-apps</artifactId>
    <version>1.0.11</version>
</dependency>
// https://jarcasting.com/artifacts/com.yugabyte/yb-sample-apps/
implementation 'com.yugabyte:yb-sample-apps:1.0.11'
// https://jarcasting.com/artifacts/com.yugabyte/yb-sample-apps/
implementation ("com.yugabyte:yb-sample-apps:1.0.11")
'com.yugabyte:yb-sample-apps:jar:1.0.11'
<dependency org="com.yugabyte" name="yb-sample-apps" rev="1.0.11">
  <artifact name="yb-sample-apps" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.yugabyte', module='yb-sample-apps', version='1.0.11')
)
libraryDependencies += "com.yugabyte" % "yb-sample-apps" % "1.0.11"
[com.yugabyte/yb-sample-apps "1.0.11"]

Dependencies

compile (10)

Group / Artifact Type Version
com.yugabyte : cassandra-driver-core jar 3.2.0-yb-19
log4j : log4j jar 1.2.17
org.slf4j : slf4j-log4j12 jar 1.7.12
org.slf4j : slf4j-api jar 1.7.12
commons-cli : commons-cli jar 1.2
commons-codec : commons-codec jar 1.10
com.yugabyte : jedis jar 2.9.0-yb-16
org.apache.commons : commons-math3 jar 3.5
com.google.code.gson : gson jar 2.8.0
org.postgresql : postgresql jar 42.2.2

Project Modules

There are no modules declared in this project.

YugabyteDB workload generator

This repository emulates various workloads against YugabyteDB. YugabyteDB is a multi-model database that supports:

  • YSQL (Distributed SQL API with joins. Compatible with PostgreSQL)
  • YCQL (Flexible-schema API with indexes, transactions and the JSONB data type. Roots in Cassandra QL)
  • YEDIS (Transactional KV API with elasticity and persistence. Compatible with Redis)

The workloads here have drivers compatible with the above and emulate a number of real-work scenarios.

Running the generator

Download yb-sample-apps JAR

$ wget https://github.com/yugabyte/yb-sample-apps/releases/download/1.3.7/yb-sample-apps.jar

For help, simply run the following:

$ java -jar yb-sample-apps.jar --help

You should see the set of workloads available in the app.

To get details on running any app, just pass the app name as a parameter to the --help flag:

$ java -jar yb-sample-apps.jar --help CassandraKeyValue
1 [main] INFO com.yugabyte.sample.Main  - Starting sample app...
Usage and options for workload CassandraKeyValue in YugabyteDB Sample Apps.

 - CassandraKeyValue :
   -----------------
		Sample key-value app built on Cassandra with concurrent reader and writer threads.
		 Each of these threads operates on a single key-value pair. The number of readers
		 and writers, the value size, the number of inserts vs updates are configurable.
                 By default number of reads and writes operations are configured to 1500000 and 2000000 respectively.
		 User can run read/write(both) operations indefinitely by passing -1 to --num_reads or --num_writes or both
        
		Usage:
			java -jar yb-sample-apps.jar \
			--workload CassandraKeyValue \
			--nodes 127.0.0.1:9042

		Other options (with default values):
			[ --num_unique_keys 2000000 ]
			[ --num_reads 1500000 ]
			[ --num_writes 2000000 ]
			[ --value_size 0 ]
			[ --num_threads_read 24 ]
			[ --num_threads_write 2 ]
			[ --table_ttl_seconds -1 ]

Building the generator

You need the following to build:

  • Java 1.8 or above
  • Maven version 3.3.9 or above

To build, simply run the following:

$ mvn -DskipTests -DskipDockerBuild package

You can find the executable one-jar at the following location:

$ ls target/yb-sample-apps.jar
target/yb-sample-apps.jar

To docker image with the package, simply run the following:

$ mvn package

Supported Workloads

Below is a list of workloads.

App Name Description
CassandraHelloWorld A very simple app that writes and reads one employee record into an 'Employee' table
CassandraKeyValue Sample key-value app built on Cassandra with concurrent reader and writer threads.
CassandraBatchKeyValue Sample batch key-value app built on Cassandra with concurrent reader and writer threads.
CassandraBatchTimeseries Timeseries/IoT app built that simulates metric data emitted by devices periodically.
CassandraEventData A sample IoT event data application with batch processing.
CassandraTransactionalKeyValue Key-value app with multi-row transactions. Each write txn inserts a pair of unique string keys with the same value.
CassandraTransactionalRestartRead This workload writes one key per thread, each time incrementing it's value and storing it in array.
CassandraStockTicker Sample stock ticker app built on CQL. Models stock tickers each of which emits quote data every second.
CassandraTimeseries Sample timeseries/IoT app built on CQL. The app models users with devices, each emitting multiple metrics per second.
CassandraUserId Sample user id app built on Cassandra. The app writes out 1M unique user ids
CassandraPersonalization User personalization app. Writes unique customer ids, each with a set of coupons for different stores.
CassandraSecondaryIndex Secondary index on key-value YCQL table. Writes unique keys with an index on values. Query keys by values
CassandraUniqueSecondaryIndex Sample key-value app built on Cassandra. The app writes out unique string keys
RedisKeyValue Sample key-value app built on Redis. The app writes out unique string keys each with a string value.
RedisPipelinedKeyValue Sample batched key-value app built on Redis. The app reads and writes a batch of key-value pairs.
RedisHashPipelined Sample redis hash-map based app built on RedisPipelined for batched operations.
RedisYBClientKeyValue Sample key-value app built on Redis that uses the YBJedis (multi-node) client instead
SqlInserts Sample key-value app built on PostgreSQL with concurrent readers and writers. The app inserts unique string keys
SqlUpdates Sample key-value app built on PostgreSQL with concurrent readers and writers. The app updates existing string keys
SqlSecondaryIndex Sample key-value app built on postgresql. The app writes out unique string keys
SqlSnapshotTxns Sample key-value app built on postgresql. The app writes out unique string keys
com.yugabyte

yugabyte

The high-performance distributed SQL database for global, internet-scale apps.

Versions

Version
1.0.11
1.0.10
1.0.9
1.0.8
1.0.6
1.0.4
1.0.3