An experimental KV store, which implements an LSM on top of Bolt segments.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd/cellar
.gitignore
.travis.yml
LICENSE
README.md
cellar.go
cellar_test.go
cursor.go
cursor_merge.go
cursor_test.go
errors.go
merge.go
merge_manager.go
merge_policy.go
merge_policy_test.go
merge_test.go
reader.go
segment.go
segment_builder.go
segment_list.go
segment_list_test.go
smat.go
smat_test.go
stats.go
tx.go
tx_test.go

README.md

Cellar

An experimental KV store, which implements an LSM on top of Bolt segments.

Status

EXPERIMENTAL – the API is evolving and the implementation is new

Build Status Coverage Status GoDoc codebeat badge Go Report Card

High Level Concept

  • Data coming into Cellar is batched. Each batch is written out to its own Bolt segment.
  • Reads from Cellar must navigate all the live Bolt segments.
  • Over time, you have too many segments, and must merge segments.

NOTE: if you can arrange to write all keys in a batch in sorted order, we can take advantage of Bolt's strengths. One way to build batches and write them to Cellar in sorted order is to place moss in front of Cellar. In the future we may offer another package to combine these two projects seamlessly.

Features

  • API inspired by Bolt
  • But, only 1 bucket. Support for nested or multiple buckets was removed.
  • Configurable merge policies. Currently only one really dumb implementation.

Performance

Is this actually faster for any use cases?

We don't know yet. This is an ongoing experiment.

License

Apache 2.0