An embedded, in-memory, zero-copy, atomicity, consistency, isolation, MVCC, almost lock-free and serializable snapshot isolation database engine.
APACHE-2.0 License
This repository the implementation:
English | 简体中文
This repository contains a transaction framework (async-txn
and txn
) based on optimistic concurrency control, which is inspired by foundationdb
's paper and badger
.
This repository contains two kinds of in-memory key-value database which supports both async (async-skipdb
) and sync (skipdb
):
SerializableDb
Supports both concurrent execution of full serializable snapshot isolation transactions and optimistic concurrency control transactions.
Transactions are created by SerializableDb::serializable_write
can handle all kinds of write skew correctly.
Transactions are created by SerializableDb::optimistic_write
can handle all kinds of direct dependent write skew, but cannot handle all kinds of indirect dependent write skew e.g. https://wiki.postgresql.org/wiki/SSI#Intersecting_Data.
OptimisticDb
Only support oncurrent execution of optimistic concurrency control, which means the write transaction cannot detect all kinds of write skew.
All kinds of direct dependent write skew can be handled correctly, but cannot handle all kinds of indirect dependent write skew e.g. https://wiki.postgresql.org/wiki/SSI#Intersecting_Data.
Arc
wrapper for both key and value stored in the database, which means that users provide K
and V
, and database store K
and V
directly.Send + Sync + 'static
, which means you do not need to handle annoying lifetime problem anymore.BTreeMap
like user friendly API and all iterators implement Iterator
trait, which means users use Rust powerful conbinators when iterating over the database.tokio
, async-std
, smol
, wasm-bindgen-futures
and any other async runtime.[forbid(unsafe_code)]
.For sync
[dependencies]
skipdb = "0.2"
For async
tokio
[dependencies]
async-skipdb = { version = "0.2", features = ["tokio"] }
async-std
[dependencies]
async-skipdb = { version = "0.2", features = ["async-std"] }
smol
[dependencies]
async-skipdb = { version = "0.2", features = ["smol"] }
wasm-bindgen-futures
[dependencies]
async-skipdb = { version = "0.2", features = ["wasm"] }
Please see skipdb or async-skipdb.
skipdb
is under the terms of both the MIT license and the
Apache License (Version 2.0).
See LICENSE-APACHE, LICENSE-MIT for details.
Copyright (c) 2024 Al Liu.