From 2720dba7cc51a5ec9ff8649db7463d29f3f04905 Mon Sep 17 00:00:00 2001 From: Adewumi Sunkanmi Date: Mon, 22 Jul 2024 21:58:33 +0100 Subject: [PATCH] [Docs] Experimental Release v.0.01 --- Cargo.toml | 2 +- README.md | 23 +++++++++++++---------- logo.png | Bin 25511 -> 22321 bytes 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index aeb9501..4a68a75 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "velarixdb" -version = "0.0.2" +version = "0.0.11" edition = "2021" authors = ["Adewumi Sunkanmi D."] license = "MIT" diff --git a/README.md b/README.md index 9814412..7e18706 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@

- +

+ [![codecov](https://codecov.io/gh/Gifted-s/velarixdb/branch/ft%2Ffinal/graph/badge.svg?token=01K79PJWQA)](https://codecov.io/gh/Gifted-s/velarixdb) [![Tests](https://github.com/Gifted-s/velarixdb/actions/workflows/rust.yml/badge.svg)](https://github.com/Gifted-s/velarixdb/actions/workflows/rust.yml) [![Crates.io](https://img.shields.io/crates/v/velarixdb.svg)](https://crates.io/crates/velarixdb) @@ -11,7 +12,6 @@ [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) - VelarixDB is an LSM-based storage engine designed to significantly reduce IO amplification, resulting in better performance and durability for storage devices. @@ -23,12 +23,15 @@ VelarixDB is an ongoing project (*not production ready*) designed to optimize da ## Problem -During compaction in LevelDB or RocksDB, [thesame key-value pair can be re-read and re-written from Level 1 to Level 6 in the worst case](https://github.com/facebook/rocksdb/wiki/Leveled-Compaction), the goal is to reduce size of data moved around during this process. +During compaction in LevelDB or RocksDB, in the worst case, up to 10 SSTable files needs to be read, sorted and re-written since keys are not allowed to overlapp across all the sstables from Level 1 downwards. Suppose after merging SSTables in one level, the next level exceeds its threshold, compaction can cascade from Level 0 all the way to Level 6 meaning the overall write amplification can be up to 50 (ignoring the first compaction level).[ Reference -> [Official LevelDB Compaction Process Docs](https://github.com/facebook/rocksdb/wiki/Leveled-Compaction) ]. +This repetitive data movement can cause significant wear on SSDs, reducing their lifespan due to the high number of write cycles. The goal is to minimize the amount of data moved during compaction, thereby reducing the amount of data re-written and extending the device's lifetime. ## Solution -We mostly care if the key has been deleted or updated therefore including values in the compaction process (which is often larger than the key) can unneccssarily amplify the data read and written during compaction. We therefore store keys and values separately (we map value offset to the key represented as 32 bit integer), -This reduces the amount of data read, written, and moved during compaction, leading to improved performance and reduced wear on storage devices, particularly SSDs. +To address this, we focus on whether a key has been deleted or updated. Including values in the compaction process (which are often larger than keys) unnecessarily amplifies the amount of data read and written. Therefore, we store keys and values separately. Specifically, we map value offsets to the keys, represented as 32-bit integers. + +This approach reduces the amount of data read, written, and moved during compaction, leading to improved performance and less wear on storage devices, particularly SSDs. By minimizing the data movement, we not only enhance the efficiency of the database but also significantly extend the lifespan of the underlying storage hardware. + ## Performance Benefits @@ -36,12 +39,12 @@ According to the benchmarks presented in the WiscKey paper, implementations can - **2.5x to 111x** for database loading - **1.6x to 14x** for random lookups -## Concurrency with Tokio - -To achieve high concurrency without the overhead of spawning new threads every time, velarixdb utilizes the Tokio runtime. This allows for efficient and scalable asynchronous operations, making the most of modern multi-core processors. Frankly, -most Operating System File System does not provide async API but Tokio uses a thread pool to offload blocking file system operations. When you perform an asynchronous file operation in Tokio, the operation is executed on a dedicated thread from this pool. +## Designed for asynchronous runtime +Based on the introduction and efficiency of async IO at the OS kernel level e.g **io_uring** for the Linux kernel, VelarixDB is designed for asynchronous runtime. In this case Tokio runtime. +Tokio allows for efficient and scalable asynchronous operations, making the most of modern multi-core processors. Frankly, most OS File System does not provide async API currently but Tokio uses a thread pool to offload blocking file system operations. This means that even though the file system operations themselves are blocking at the OS level, Tokio can handle them without blocking the main async task executor. -Tokio might also use [io_uring](https://docs.rs/tokio/latest/tokio/fs/index.html#:~:text=Currently%2C%20Tokio%20will%20always%20use%20spawn_blocking%20on%20all%20platforms%2C%20but%20it%20may%20be%20changed%20to%20use%20asynchronous%20file%20system%20APIs%20such%20as%20io_uring%20in%20the%20future.) in the future +Tokio might adopt [io_uring](https://docs.rs/tokio/latest/tokio/fs/index.html#:~:text=Currently%2C%20Tokio%20will%20always%20use%20spawn_blocking%20on%20all%20platforms%2C%20but%20it%20may%20be%20changed%20to%20use%20asynchronous%20file%20system%20APIs%20such%20as%20io_uring%20in%20the%20future.) in the future + ## Disclaimer diff --git a/logo.png b/logo.png index 7c7a814b8548e86ef6550824c723155191c02a15..1502817a34db9281c5676a3a9c77991d4dfbc86d 100644 GIT binary patch literal 22321 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
<$c*3l7OMLYQX&~*FzwvZ1r#TFLRHXce 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 doZ!LvCGWHQQ?w#?MYD+{tuXFON{^k