The ReductStore Client SDK for C++ is an open source client for ReductStore written in C++20. It allows developers to easily interact with the database from their C++ applications.
- Written in C++20
- Support ReductStore https://www.reduct.store/docs/http-api
- Support HTTP and HTTPS protocols
- Support Linux AMD64 and Windows
Here is a simple example of how to use the ReductStore Client SDK for C++ to create a bucket, write data to it, and read the data back:
#include <reduct/client.h>
#include <iostream>
#include <cassert>
using reduct::IBucket;
using reduct::IClient;
using reduct::Error;
using sec = std::chrono::seconds;
int main() {
// 1. Create a ReductStore client
auto client = IClient::Build("http://127.0.0.1:8383",{
.api_token = "my-token"
});
// 2. Get or create a bucket with 1Gb quota
auto [bucket, create_err] = client->GetOrCreateBucket("my-bucket", {
.quota_type = IBucket::QuotaType::kFifo,
.quota_size = 1'000'000'000
});
if (create_err) {
std::cerr << "Error: " << create_err;
return -1;
}
// 3. Write some data with timestamps and labels to the 'entry-1' entry
IBucket::Time start = IBucket::Time::clock::now();
auto write_err =
bucket->Write("sensor-1", {
.timestamp = start,
.labels = {{"score", "10"}}
}, [](auto rec) { rec->WriteAll("<Blob data>"); });
assert(write_err == Error::kOk);
write_err = bucket->Write("sensor-1", {
.timestamp = start + sec(1),
.labels = {{"score", "20"}}
}, [](auto rec) { rec->WriteAll("<Blob data>"); });
assert(write_err == Error::kOk);
// 4. Query the data by time range and condition
auto err = bucket->Query("sensor-1", start, start + sec(2), {
.when = R"({"&score": {"$gt": 10}})"
}, [](auto&& record) {
std::cout << "Timestamp: " << record.timestamp.time_since_epoch().count() << std::endl;
std::cout << "Content Length: " << record.size << std::endl;
auto [blob, read_err] = record.ReadAll();
if (!read_err) {
std::cout << "Read blob: " << blob << std::endl;
}
return true;
});
if (err) {
std::cerr << "Error: " << err;
return -1;
}
return 0;
}
- GCC 11.2 or higher (support C++20)
- CMake 3.18 or higher
- OpenSSL 1.1 or 3.0
- Conan >=2.0 (optionally)
To build the library, follow these steps:
git clone https://github.com/reductstore/reduct-cpp.git
cd reduct-cpp
# Run cmake configuration
cmake -S . -B build # for linux
cmake -S . -B build -DREDUCT_CPP_USE_STD_CHRONO=ON -DOPENSSL_ROOT_DIR="<path>" # for windows
# Build
cmake --build build # for linux
cmake --build build --config Release # for windows
# Install
sudo cmake --install build
CMake downloads all dependencies using FetchContent
except OpenSLL which needs to be installed in the system.
Now to use the SDK in your C++ project, you need to add the find_package
to CMakeLists.txt:
cmake_minimum_required(VERSION 3.22)
project(ReductCppExample)
set(CMAKE_CXX_STANDARD 20)
find_package(ZLIB)
find_package(OpenSSL)
find_package(ReductCpp)
add_executable(quick_start quick_start.cc)
target_link_libraries(quick_start ${REDUCT_CPP_LIBRARIES} ${ZLIB_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto)
Alternatively, you can use Conan to install the dependencies and build the library:
conan install . --build=missing
cmake --preset conan-release -DREDUCT_CPP_USE_CONAN=ON
cmake --build --preset conan-release --config Release
For more examples, see the Guides section in the ReductStore documentation.
The library is backward compatible with the previous versions. However, some methods have been deprecated and will be removed in the future releases. Please refer to the Changelog for more details. The SDK supports the following ReductStore API versions:
- v1.15
- v1.14
- v1.13
It can work with newer and older versions, but it is not guaranteed that all features will work as expected because the API may change and some features may be deprecated or the SDK may not support them yet.