Giter VIP home page Giter VIP logo

honu's Introduction

Honu

Go Reference Go Report Card GitHub Actions CI

HonuDB is a replicated key-value store intended for large systems that are distributed globally. Although HonuDB uses an eventually consistent gossip protocol for replication, it uses reinforcement learning with multi-armed bandits to optimize replication. Adaptive consistency reduces costs (ingress and egress data transfer) as well as improves consistency by lowering the likelihood of stale reads or forked writes.

Benchmarks

Baseline comparison of honu database vs. pure leveldb performance to determine the overhead that honu adds:

BenchmarkHonuGet-8         	  466665	      2405 ns/op
BenchmarkLevelDBGet-8      	 1243785	       955.3 ns/op
BenchmarkHonuPut-8         	   21448	     55125 ns/op
BenchmarkLevelDBPut-8      	   24276	     52422 ns/op
BenchmarkHonuDelete-8      	   42298	     25136 ns/op
BenchmarkLevelDBDelete-8   	   76857	     16101 ns/op
BenchmarkHonuIter-8        	   63772	     18349 ns/op
BenchmarkLevelDBIter-8     	  255319	      4271 ns/op
BenchmarkHonuObject-8      	  480555	      2362 ns/op

Baseline Benchmarks

honu's People

Contributors

bbengfort avatar danielsollis avatar pdeziel avatar rebeccabilbro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

honu's Issues

Readme - Getting Started Guide

We should create a preliminary getting started guide in the readme so that people will understand how to use honu; e.g how to use it if they are already, say, a levelDB user.

Spike: Investigate Rocks, Badger and Pebble

Investigate what transactions look for each database and how much work would need to be done to implement in Honu

What other features do these other databases offer vs. level db

what are best practices for database optimization

Research namespaces/indices/buckets with each database (how does it support groupings of objects)

etc.

REF: SC-1275

Store tombstone in parent on update

Reference lines -

honu/versions.go

Lines 56 to 61 in d13a85a

if meta.Version != nil && !meta.Version.IsZero() {
meta.Version.Parent = &pb.Version{
Pid: meta.Version.Pid,
Version: meta.Version.Version,
Region: meta.Version.Region,
}

Implementation does not copy tombstone data into the parent version. This creates a problem when backtracking through history. A deleted object will not have a stored tombstone transition and can only be identified by looking at nil data.

Storing the tombstone allows for a reconstruction of the history of the object, which is necessary when defining expected behavior for users.

Line 61 just needs:

Tombstone: meta.Version.Tombstone,

Bonus points for adding a complete clone() method for taking care of Version copying. :D

namespaces with double colons bug.

Fix the issue where LevelDBEngine.Iter currently grabs the namespace by splitting on double colons (::). In the case of a namespace called for example "namespace::with::colons", Iter considers the namespace to be "namespace" and will not access the database correctly. As for a possible solution, with PR #12 the namespace is stored in the iterator, meaning we would no longer need to split on double colons. The following tests are currently skipping double colon test cases and need to be amended:

  • engines/leveldb/leveldb_test: TestLevelDBIter line 163
  • honu_test: TestLevelDBInteractions line 119

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.