nessDB is an embedded key-value DBMS written in ANSI C with BSD license. It does not require any external dependencies and works in most POSIX systems.[03][04]
- Source Code
- https://github.com/BohuTANG/nessDB[01]
- Developer
- Country of Origin
- CN
- Start Year
- 2011 [16]
- End Year
- 2016
- Project Type
- Open Source
- Written in
- C
- License
- BSD License
As for storage engine, nessDB used LSM-tree (Log-Structured Merge Tree) in v1.8, B-Epsilon-tree in v2.0, and will use fractal-tree in v3.0. nessDB also used fractional cascading to speed up query.
nessDB is an embedded key-value DBMS written in ANSI C with BSD license. It does not require any external dependencies and works in most POSIX systems.
As for storage engine, nessDB used LSM-tree (Log-Structured Merge Tree) in v1.8, B-Epsilon-tree in v2.0, and will use fractal-tree in v3.0. nessDB also used fractional cascading to speed up query.[03][04]
History[03]
It has released two main versions (v1.8 and v2.0), while v3.0 is still work in progress.
Checkpoints[05][06]
It does not fully support no redo log and recovery. nessDB v3.0 will support sharp checkpoint with a 60 seconds period according to the code, but the recovery part has not been finished.
Compression[07][08]
nessDB v3.0 used Snappy, a data compression and decompression library written in C++ by Google, to compress the buffered-tree node data when serializing the node to disk and decompress it when deserializing. nessDB v2.0 used QuickLZ, a compression library written in C, to compress the key-value pair.
Concurrency Control[09][10][11]
nessDB v3.0 will use two-phase locking with deadlock detection, but this part does not finish yet. For deadlock detection, nessDB v3.0 will use Helgrind, a thread error detector that can detect potential deadlocks arising from lock ordering problems.
For nessDB v2.0, it is a single-thread engine. The engine can process a single request at a time.
Data Model[12][13][14]
nessDB is a key-value DBMS, which supports Redis-like protocol, such as SET, GET, DEL, EXISTS. To be specific, both key and value are general raw data and are represented by a pointer with length.
Indexes[03][04]
nessDB used LSM-tree (Log-Structured Merge Tree) in v1.8, Small-Splittable Tree in v2.0, and will use fractal-tree in v3.0 for key-value storage. Those data structures are suitable for high-performance insertion compared to B-tree.
Isolation Levels[15]
nessDB v3.0 support four isolation levels: read uncommitted, read committed, repeatable read and serializable.
Joins[12]
nessDB does not support join. It is a key-value DBMS with only interfaces such as SET, GET, DEL, EXISTS.
Citations
16 sources- https://github.com/BohuTANG/nessDB github.com
- Pages · bohutang/nessDB Wiki · GitHub github.com
- https://github.com/BohuTANG/nessDB/blob/master/README github.com
- https://sec.douban.com/c?_s=a5944e68702a7900175abcb708be87fbf81a50088f6836e62e70fdc48d72ba13&a=1&r=https://www.douban.com/note/257014437 douban.com
- nessDB/db/env.c at 4c36de92ef238bf9449993e6b3b5c09994860af3 · bohutang/nessDB · GitHub github.com
- nessDB/txn/recovery.c at master · bohutang/nessDB · GitHub github.com
- nessDB/tree/layout.c at 4c36de92ef238bf9449993e6b3b5c09994860af3 · bohutang/nessDB · GitHub github.com
- nessDB/engine/index.c at 6de40ee7d75f8c0c3b71082e05f1f79abebb7bb0 · bohutang/nessDB · GitHub github.com
- nessDB/docs/lock.txt at master · bohutang/nessDB · GitHub github.com
- Single threaded? google.com
- Valgrind valgrind.org
- nessDB/README at 6de40ee7d75f8c0c3b71082e05f1f79abebb7bb0 · bohutang/nessDB · GitHub github.com
- nessDB v1.8 with LSM-Tree « Another Word For It durusau.net
- nessDB/util/msg.h at 4c36de92ef238bf9449993e6b3b5c09994860af3 · bohutang/nessDB · GitHub github.com
- nessDB/txn/txn.h at 4c36de92ef238bf9449993e6b3b5c09994860af3 · bohutang/nessDB · GitHub github.com
- add github.com