Skip to content

LiteKV is a fast, lightweight, and easy-to-use append-only key-value store that offers a compact and intuitive abstraction and reduced complexity.

License

Notifications You must be signed in to change notification settings

tillknuesting/litekv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LiteKV

LiteKV is a simple, lightweight, and efficient in-memory key-value store written in Go. It supports basic operations like reading, writing, deleting, and updating key-value pairs, as well as advanced features like exporting and importing index, rebuilding index, and compacting the store. LiteKV uses an append-only data structure, which provides better write performance and data durability.

Technical Aspects

Append-only Storage

LiteKV stores data in an append-only manner, which means that new key-value pairs are always added to the end of the store, even when updating and deleting existing keys. This approach provides better write performance and ensures that data remains intact even in the case of a crash or failure. Updating works because on

Compaction

As the store grows, it may accumulate duplicate or deleted entries, which can affect performance and memory usage. LiteKV provides a compaction feature that removes duplicates and deleted key-value pairs, making the store more efficient.

To compact the store, simply call the Compact method:

kvs.Compact()

Binary Storage Format

LiteKV uses a custom binary format to store key-value pairs. Each entry consists of a checksum, record type, key length, value length, key, and value. The checksum is calculated using the CRC32 algorithm and helps in detecting corruption or inconsistencies in the data. The record type indicates whether the entry is a normal key-value pair or a deleted one.

LiteKV uses byte slices as the underlying data format for storing key-value pairs. Byte slices offer versatility and flexibility, making it easier to perform various operations such as saving data to disk or using POSIX shared memory.

By using byte slices, LiteKV allows you to seamlessly integrate the stored data with various storage solutions or inter-process communication methods, enhancing the overall usability and adaptability of the library in different use cases.

Getting Started

To use LiteKV, first import the library:

import (
    "github.com/tillknuesting/litekv"
)

Then, create a new instance of KeyValueStore:

kvs := &litekv.KeyValueStore{}

You can now perform basic operations on the store:

kvs.Write([]byte("foo"), []byte("bar"))
value, err := kvs.Read([]byte("foo"))
kvs.Delete([]byte("foo"))

Running Tests

To run the tests for LiteKV, navigate to the project directory and execute:

go test ./...

Running Benchmarks

To run the benchmarks for LiteKV, navigate to the project directory and execute:

go test -bench=. ./...

Fuzz Testing

Fuzz testing is a powerful technique to uncover potential issues in your code by providing a wide range of random inputs.

To run fuzz tests for LiteKV, navigate to the project directory and execute:

go test -fuzz .

About

LiteKV is a fast, lightweight, and easy-to-use append-only key-value store that offers a compact and intuitive abstraction and reduced complexity.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages