Hi, guys. i share you a key/value store named NutsDB.

NutsDB is a simple, fast, embeddable and persistent key/value store written 
in pure Go.

It supports fully serializable transactions and many data structures such 
as list、set、sorted set. All operations happen inside a Tx. Tx represents a 
transaction, which can be read-only or read-write. Read-only transactions 
can read values for a given bucket and given key or iterate over a set of 
key-value pairs. Read-write transactions can update and delete keys from 
the DB.

This project is still in the experimental stage and has not passed the test 
of the actual production environment. Welcome to issue and contribute

<https://github.com/xujiajun/nutsdb#motivation>

see repository link: https://github.com/xujiajun/nutsdb for detail.
 

Motivation

I wanted a simple, fast, embeddable and persistent key/value store written 
in pure Go. And if it supports more data structures such as list, set, 
sorted set,it will be better.


There are some options around the embeddable kv store in Go:


1. BoltDB,it is based on B+ tree, has a good random read performance and 
awesome sequential scan performance, and it supports ACID transactions with 
serializable isolation, but it is terrible at random write performance and 
not supports more data structures such as list etc.


2. GoLevelDB is based on a log-structured merge-tree (LSM tree), but it not 
supports transactions and more data structures.


3. Badger is based on LSM tree with value log. It designed for SSDs. It 
also supports transactions. But its write performance is not as good as i 
thought.And it also not supports more data structures.


So i tried to build a kv store by myself, i wanted to find a simple store 
engine model as reference. Finally i found the bitcask model. It is simple 
and easy to implement. Howerver it has its limition,like range or prefix 
queries are not effcient. For example, you can not easily scan over all 
keys between user000000 and user999999, you had to look up each key 
individully in the hashmap.

In order to break the limition, i tried to optimize them. Finally i did it 
and named NutsDB. 


 And it still has a lot of room for optimization. Welcome contributions to 
NutsDB <https://github.com/xujiajun/nutsdb#contributing>. 




-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to