There is also github.com/robaho/keydb which uses LSM and transactions and it is 
very fast :)

> On Mar 12, 2019, at 1:10 AM, xujiajun <[email protected]> wrote:
> 
> 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
> 
> 
> 
> 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. 
> 
> 
> 
> 
> 
> 
> 
> -- 
> 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.

-- 
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