public
Description: An open source clone of Amazon's Dynamo.
Homepage: http://project-voldemort.com
Clone URL: git://github.com/voldemort/voldemort.git
name age message
file .classpath Fri Sep 18 07:37:50 -0700 2009 Implement Issue 155: Upgrade to protobuf 2.2.0. [ijuma]
file .gitignore Thu Jun 18 10:23:05 -0700 2009 convenience for emacs users [Paul Lindner]
file .project Fri Jan 02 15:52:50 -0800 2009 Initial import [jkreps]
directory .settings/ Fri Sep 18 07:37:50 -0700 2009 Implement Issue 155: Upgrade to protobuf 2.2.0. [ijuma]
file LICENSE Tue Jan 13 14:59:15 -0800 2009 Add license header to source files. [jkreps]
file NOTES Sun Apr 26 21:25:34 -0700 2009 Add support for protocol buffers based network ... [jkreps]
file NOTICE Fri May 29 18:47:41 -0700 2009 Removed hard-coded args used for testing Added ... [eliast]
file README.md Thu Jul 16 01:46:13 -0700 2009 Small formatting changes to README. [ijuma]
directory bin/ Wed Jul 08 22:12:59 -0700 2009 Remove source zip file (we don't have source fo... [jkreps]
file build.properties Wed Oct 28 14:46:38 -0700 2009 Bumping version to 0.56.1 [bbansal]
file build.xml Thu Jul 09 22:28:28 -0700 2009 Add a compatibility test for json data. [jkreps]
directory clients/ Mon Oct 19 16:32:19 -0700 2009 Build on OS X. [Scott Wheeler]
directory config/ Tue Jul 28 20:20:32 -0700 2009 Make nio not be enabled in the example config f... [jkreps]
directory contrib/ Wed Oct 14 17:53:11 -0700 2009 Implement Issue 152: getVersion() API in Store.... [ijuma]
directory docs/ Tue Jan 13 17:58:15 -0800 2009 Fix bug in binary search in read-only store. [jkreps]
directory example/ Sun Apr 26 21:25:34 -0700 2009 Add support for protocol buffers based network ... [jkreps]
directory lib/ Fri Sep 18 07:37:50 -0700 2009 Implement Issue 155: Upgrade to protobuf 2.2.0. [ijuma]
directory src/ Loading commit data...
directory test/ Fri Oct 23 14:36:57 -0700 2009 Fixed race condition in AbstractSocketPoolTest. [bbansal]
file tomcat-tasks.properties Fri Jan 02 15:52:50 -0800 2009 Initial import [jkreps]
file web.xml Fri Jan 02 15:52:50 -0800 2009 Initial import [jkreps]
README.md

Voldemort is a distributed key-value storage system

  • Data is automatically replicated over multiple servers.
  • Data is automatically partitioned so each server contains only a subset of the total data
  • Server failure is handled transparently
  • Pluggable serialization is supported to allow rich keys and values including lists and tuples with named fields, as well as to integrate with common serialization frameworks like Protocol Buffers, Thrift, and Java Serialization
  • Data items are versioned to maximize data integrity in failure scenarios without compromising availability of the system
  • Each node is independent of other nodes with no central point of failure or coordination
  • Good single node performance: you can expect 10-20k operations per second depending on the machines, the network, the disk system, and the data replication factor
  • Support for pluggable data placement strategies to support things like distribution across data centers that are geographical far apart.

It is used at LinkedIn for certain high-scalability storage problems where simple functional partitioning is not sufficient. It is still a new system which has rough edges, bad error messages, and probably plenty of uncaught bugs. Let us know if you find one of these, so we can fix it. Comparison to relational databases

Voldemort is not a relational database, it does not attempt to satisfy arbitrary relations while satisfying ACID properties. Nor is it an object database that attempts to transparently map object reference graphs. Nor does it introduce a new abstraction such as document-orientation. It is basically just a big, distributed, persistent, fault-tolerant hash table. For applications that can use an O/R mapper like active-record or hibernate this will provide horizontal scalability and much higher availability but at great loss of convenience. For large applications under internet-type scalability pressure, a system may likely consists of a number of functionally partitioned services or apis, which may manage storage resources across multiple data centers using storage systems which may themselves be horizontally partitioned. For applications in this space, arbitrary in-database joins are already impossible since all the data is not available in any single database. A typical pattern is to introduce a caching layer which will require hashtable semantics anyway. For these applications Voldemort offers a number of advantages:

  • Voldemort combines in memory caching with the storage system so that a separate caching tier is not required (instead the storage system itself is just fast.
  • Unlike MySQL replication, both reads and writes scale horizontally
  • Data portioning is transparent, and allows for cluster expansion without rebalancing all data
  • Data replication and placement is decided by a simple API to be able to accommodate a wide range of application specific strategies
  • The storage layer is completely mockable so development and unit testing can be done against a throw-away in-memory storage system without needing a real cluster (or even a real storage system) for simple testing

The source code is available under the Apache 2.0 license. We are actively looking for contributors so if you have ideas, code, bug reports, or fixes you would like to contribute please do so.

For help please see the discussion group, or the IRC channel chat.us.freenode.net #voldemort. Bugs and feature requests can be filed on Google Code.