# YCSB-cpp **Repository Path**: lwhay/YCSB-cpp ## Basic Information - **Project Name**: YCSB-cpp - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: blsm - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-28 - **Last Updated**: 2025-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YCSB-cpp Yahoo! Cloud Serving Benchmark([YCSB](https://github.com/brianfrankcooper/YCSB/wiki)) written in C++. This is a fork of [YCSB-C](https://github.com/basicthinker/YCSB-C) with some additions * Tail latency report using [HdrHistogram_c](https://github.com/HdrHistogram/HdrHistogram_c) * Modified the workload more similar to the original YCSB * Supported databases: LevelDB, RocksDB, LMDB, WiredTiger, SQLite # Build YCSB-cpp ## Build with Makefile on POSIX Initialize submodule and use `make` to build. ``` git clone https://github.com/ls4154/YCSB-cpp.git cd YCSB-cpp git submodule update --init make ``` Databases to bind must be specified as build options. You may also need to add additional link flags (e.g., `-lsnappy`). To bind LevelDB: ``` make BIND_LEVELDB=1 ``` To build with additional libraries and include directories: ``` make BIND_LEVELDB=1 EXTRA_CXXFLAGS=-I/example/leveldb/include \ EXTRA_LDFLAGS="-L/example/leveldb/build -lsnappy" ``` Or modify config section in `Makefile`. RocksDB build example: ``` EXTRA_CXXFLAGS ?= -I/example/rocksdb/include EXTRA_LDFLAGS ?= -L/example/rocksdb -ldl -lz -lsnappy -lzstd -lbz2 -llz4 BIND_ROCKSDB ?= 1 ``` ## Build with CMake on POSIX ```shell git submodule update --init mkdir build cd build cmake -DBIND_ROCKSDB=1 -DBIND_WIREDTIGER=1 -DBIND_LMDB=1 -DBIND_LEVELDB=1 -DWITH_SNAPPY=1 -DWITH_LZ4=1 -DWITH_ZSTD=1 .. make ``` ## Build with CMake+vcpkg on Windows see [BUILD_ON_WINDOWS](BUILD_ON_WINDOWS.md) ## Running Load data with leveldb: ``` ./ycsb -load -db leveldb -P workloads/workloada -P leveldb/leveldb.properties -s ``` Run workload A with leveldb: ``` ./ycsb -run -db leveldb -P workloads/workloada -P leveldb/leveldb.properties -s ``` Load and run workload B with rocksdb: ``` ./ycsb -load -run -db rocksdb -P workloads/workloadb -P rocksdb/rocksdb.properties -s ``` Pass additional properties: ``` ./ycsb -load -db leveldb -P workloads/workloadb -P rocksdb/rocksdb.properties \ -p threadcount=4 -p recordcount=10000000 -p leveldb.cache_size=134217728 -s ```