https://github.com/project-tsurugi/yakushima
Concurrent tree structure for in-memory index
https://github.com/project-tsurugi/yakushima
concurrent-data-structure key-value-store many-core tsurugidb
Last synced: 7 months ago
JSON representation
Concurrent tree structure for in-memory index
- Host: GitHub
- URL: https://github.com/project-tsurugi/yakushima
- Owner: project-tsurugi
- License: apache-2.0
- Created: 2020-04-28T00:54:08.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2025-07-29T11:30:07.000Z (7 months ago)
- Last Synced: 2025-07-29T13:51:49.268Z (7 months ago)
- Topics: concurrent-data-structure, key-value-store, many-core, tsurugidb
- Language: C++
- Homepage:
- Size: 1.31 MB
- Stars: 8
- Watchers: 6
- Forks: 2
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# yakushima - Concurrent data structure (Concurrent Tree).
* In-memory key value store
* concurrent tree based on Masstree
* Easy to use due to Header only libirary.
## Requirements
* CMake `>= 3.10`
* C++ Compiler `>= C++17`
* build related libararies - on Ubuntu, you can install with following command.
Please check in advance whether ubuntu.deps is correct.:
```
sudo apt update -y && sudo apt install -y $(cat build_tools/ubuntu.deps)
```
```sh
# retrieve third party modules
git submodule update --init --recursive
```
## Dockerfile
```dockerfile
FROM ubuntu:22.04
RUN sudo apt update -y && sudo apt install -y $(cat build_tools/ubuntu.deps)
```
## How to build
```sh
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ..
ninja
```
available options:
* `-DBUILD_BENCHMARK=OFF`
* Never build benchmark programs (default: `ON`)
* `-DBUILD_TESTS=OFF` : never build test programs
default : `ON`
* `-DBUILD_DOCUMENTS=OFF` : never build documents by doxygen
default : `ON`
* `-DBUILD_STRICT=OFF` - don't treat compile warnings as build errors
default : `ON`
* `-DCMAKE_INSTALL_PREFIX=/path/to/yakushima/installed`
* `-DFORMAT_FILES_WITH_CLANG_FORMAT_BEFORE_EACH_BUILD=ON` : use formatting for source files
default : `OFF`
* for debugging only
* `-DENABLE_SANITIZER=OFF` : disable sanitizers (requires `-DCMAKE_BUILD_TYPE=Debug`)
default : `ON`
* `-DENABLE_UB_SANITIZER=OFF` : enable undefined behavior sanitizer (requires `-DENABLE_SANITIZER=ON`)
default : `ON`
* `-DENABLE_COVERAGE=ON` : enable code coverage analysis (requires `-DCMAKE_BUILD_TYPE=Debug`)
default : `OFF`
* for bench
* `-DENABLE_JEMALLOC=ON` : enable including jemalloc header for using as memory allocator via ld_preload.
default : `OFF`
* `-DPERFORMANCE_TOOLS=ON` : enable tooling to measure benchmark performance.
default : `OFF`
You can use one sanitizer from
* address for AddressSanitizer
* leak for LeakSanitizer
* thread for ThreadSanitizer
* undefined for UndefinedBehaviorSanitizer
* memory for MemorySanitizer.
### run tests
```sh
ctest -V
```
### How to use
See [how_to_use.md](./docs/how_to_use.md) for details on how to use.
### generate documents
```sh
ninja doxygen
```
### code coverage
Run cmake with `-DENABLE_COVERAGE=ON` and run tests.
Dump the coverage information into html files with the following steps:
```
cd build
mkdir gcovr-html
GCOVR_COMMON_OPTION='-e ../third_party -e ../test -e ../bench'
gcovr -r .. --html --html-details ${GCOVR_COMMON_OPTION} -o gcovr-html/yakushima-gcovr.html
```
Open gcovr-html/yakushima-gcovr.html to see the coverage report.
## License
[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)