NoSQL Benchmarks NoSQL use cases NoSQL Videos NoSQL Hybrid Solutions NoSQL Presentations Big Data Hadoop MapReduce Pig Hive Flume Oozie Sqoop HDFS ZooKeeper Cascading Cascalog BigTable Cassandra HBase Hypertable Couchbase CouchDB MongoDB OrientDB RavenDB Jackrabbit Terrastore Amazon DynamoDB Redis Riak Project Voldemort Tokyo Cabinet Kyoto Cabinet memcached Amazon SimpleDB Datomic MemcacheDB M/DB GT.M Amazon Dynamo Dynomite Mnesia Yahoo! PNUTS/Sherpa Neo4j InfoGrid Sones GraphDB InfiniteGraph AllegroGraph MarkLogic Clustrix CouchDB Case Studies MongoDB Case Studies NoSQL at Adobe NoSQL at Facebook NoSQL at Twitter



Voldemort: All content tagged as Voldemort in NoSQL databases and polyglot persistence

Filesystem Interfaces to NoSQL Solutions

Sounds like it is becoming a trend. So far we have:

Jeff Darcy explains why having a filesystem interface to NoSQL storage can make sense:

Voldemort is pretty easy to use, but providing a filesystem interface makes it possible for even “naive” programs that know nothing about Voldemort to access data stored there. It also provides things like directories, UNIX-style owners and groups, and byte-level access to arbitrarily large files. Lastly, it handles some common contention/consistency issues in what I hope is a useful way, instead of requiring the application to deal with those issues itself.


Who gives lowest read latency? Cassandra, HBase, Hypertable, or Voldemort?

Interesting question on Hacker News with good/informed comments so far.

I’ve got a great deal of information that I need to store in a key value format. I need access to that data as quickly as possible. Writes are only going to occur quarterly. Any thoughts?


Presentation: Project Voldemort at Gilt Groupe: When Failure Isn't an Option

InfoQ posted Geir Magnusson’s presentation on Project Voldermort recorded at ☞ QCon London.

Geir Magnusson explains how Gilt Groupe is using Project Voldemort to scale out their e-commerce transactional system. The initial SQL solution had to be replaced because it could not handle the transactional spikes the site is experiencing daily due to its particular way of selling their inventory: each day at noon. Magnusson explains why they chose Voldemort and talks about the architecture.

I have recently heard about others having to deal with similar scenarios so I’m really wondering what solutions are they employing.

As a side note, ☞ QCon San Francisco 2010, coming in November 1-5, will have a full day NoSQL track hosted by yours truly. Expect more details about the presentations in this track very soon.


Project Voldemort Performance Tool

Project Voldemort gets a performance tool from Roshan Sumbaly :

  • Run using bin/
  • Has a warmup phase to insert records (—record-count)
  • Various record selection distributions
  • Can fix client throughput to measure latency under certain load


Presentation: Project Voldemort - Scaling Simple Storage

InfoQ-style video presentation on Project Voldemort:

Jay Kreps discusses the architecture, algorithms, implementation and deployment of Voldemort, a distributed storage system. He also presents the problems solved using Voldemort at LinkedIn.

Some of the features Jay is mentioning during the talk have already become available with the latest Project Voldemort releases.


Learn about Conflict Resolution and Vector Clocks

After spending some time in the NoSQL space you start hearing about conflict resolution, vector clocks, version vectors, etc. While some of the NoSQL projects do not need any of these either because they are not distributed or because they use a central node for coordinating writes, sooner or later you’ll probably still need to learn about them, so I thought I should put together a short list of resources that I’ve found interesting.

While you might be tempted to begin from Wikipedia, the conflict resolution entry[1] is not the best start and I’ve found the CouchDB book ☞ conflict management chapter to offer a good enough perspective and examples.

One closely related notion to conflict resolution is vector clocks[2]. The guys from Basho — Riak creators — have two blog posts covering different aspects of vector clocks (nb: make sure you are also reading the comment threads for both posts):

Last, but not least, you should also check Jeff Darcy’s post on ☞ conflict resolution:

The most important thing about both vector clocks and version vectors (henceforth “vectors” for both) is that they do not by themselves resolve conflicts. All they can do is detect conflicts, meaning updates whose order cannot be determined. The conflicting versions must all be saved until someone, at some time, looks at them and determines how to resolve the conflict – i.e. turn them into a single combined version.

While you’ll probably not become an expert after reading these, you’ll definitely have an idea when people around you will discuss about conflict resolution, vector clocks in Riak, Cassandra, Project Voldemort, CouchDB or any other system.


NoSQL and Animoto

No, this is not a NoSQL animated movie, but some NoSQL related comments from an ☞ interview with Dan DeMaggio from Animoto:

Currently, we are using MySQL and delayed_job as a background job system, but it gets “iffy” under high load. We are looking to replace it with Redis in conjunction with Resque. [editor’s note: The creator of Resque, @defunkt, will be at POSSDEV.]

This makes a lot of sense considering Redis Queues are hot!

We are also looking at MongoDB to possibly replace MySQL. Mostly because with our level of data it is difficult to add columns and joins are getting so expensive that we are forced to denormalize in the name of performance anyway. So, we ask ourselves why are we using a relational database. MongoDB is so much easier to use.

I am not sure denormalization is a good enough reason to move from MySQL to MongoDB, so there might be probably other aspects that are not presented in the interview. Plus, it looks like scaling out MongoDB is at least as complicated as scaling MySQL.

I have personally been playing with CouchDB and see several applications for it. For example, if you need easy replication between a laptop and headquarters or between New York and London. If you do it right, you don’t need a application server, just the database. The internal architecture is amazing.

Not to mention that replication in CouchDB got even better in 0.11.

Looking to the future, projects like Cassandra and Riak have the right architecture. You can “just add nodes” without micro-managing master/slave relationships or sharding.

  1. Both Cassandra and Riak distributed architecture is based on the ☞ Dynamo paper, which currently seems to be the most validated approach.
  2. Project Voldemort is working hard to get at the same level of ease of scaling out and down. When compared with Riak, both show interesting performance (nb the benchmark is not scientific).

Riak and Voldemort: A (Non-Scientific) Benchmark

I’m relatively OK with benchmarks detailing the scenario, limitations and not making any additional claims.

Tests run for several minutes, hundreds of thousands of request were made to both systems. Nevertheless, the test is not at all scientific, for multiple reasons: both systems weren’t primed with billions of entries (which would make a great test on its own), different clients (Erlang native for Riak and a Java one, shipped with Voldemort) were used to access the systems, etc.

The only think missing is access to the source code used to test so that others would have a chance to push it further.


NoSQL Ecosystem News & Links 2010-03-24

  1. Project Voldemort new release: ☞ Announcement: Project Voldemort 0.80.1 is released Options

    From the release notes:

    • Issue 133: Support for Apache Avro as a serialization format
    • Issue 223: Changed the default client to use TresholdFailureDetector
    • Fixed issue 222: Revised KeyedResourcePool.close(K key) to fix leaking sockets
    • Fixed issue 198: Revised ReadRepairer to use a separate copy of the vector clock, fixing a situation where NoSuchElementException would be thrown
    • Miscellaneous enhancements: support for TCP keep-alives, improved read only store utilities, command line interface to AdminClient, improved load testing tools
  2. ☞ MongoDB 1.3.5 (1.4 rc2) Released
  3. ☞ MultiExecCommand. Redis transactions. The mention here generated a fantastic conversation on Twitter between Salvatore Sanfilippo (@antirez), Sergio Bossa (@sbtoursit), tephan Schmidt (@codemonkeyism), Shay Banon (@kimchy) and yours truly Alex Popescu (@al3xandru) that I’ll post about later.
  4. ☞ MoveLens Data Sets. In case you need some test data for your NoSQL project.
  5. Kenny Gorman: ☞ Dropping ACID. Another post on MongoDB durability tradeoff (see also MongoDB and File System Durability Explained )
  6. ☞ Hypertable This is the first Hypertable release covered on myNoSQL and by looking at the release notes it is either that they’ve been extremely busy or that it hasn’t been a release in a while.

Release: Project Voldemort 0.80 - Backward compatibility restored and BDB upgrade

Project Voldemort has released version 0.80 which features among other small improvements and bug fixes two important changes:

  • restoring backward compatibility in the wire protocol between client and server (this incompatibility was introduced with the Voldemort release 0.60

    A backwards incompatibility in the wire protocol was found between releases 0.60 to 0.70.1 and releases prior to 0.60. We chose to make 0.80 compatible with 0.57.1 and earlier versions, while introducing an incompatibility with 0.60-0.70.1. What this means is that if you’re presently running 0.60 and higher, you would need to upgrade the Voldemort jar files on all servers and clients.

  • an upgrade of the BDB storage engine to the latest version (BerkleyDB-JE 4.0.92)

You can find the complete release notes ☞ here.

Quick reference to latest MongoDB, Project Voldemort, Terrastore, and Riak

After mentioning all these NoSQL releases of the most active and exciting NoSQL week, I thought MyNoSQL should provide a quick reference to all of them.

MongoDB 1.2.2

MongoDB 1.2.2 is mostly a bug fix release as can be seen from the ☞ announcement.


Project Voldemort 0.70

This new version of Project Voldemort is including one of the most awaited features: online rebalancing. While the ☞ official announcement makes it clear that rebalancing has been extensively tested, I couldn’t find a good description of the rebalancing algorithm.

There are other interesting features in the release that I’d like to mention:

  • New failure detector merged into the main branch
  • Beta mechanism for restoring all of node’s data from replicas on demand. This is an alternative to a more gradual mechanism provided by read-repair.

I’d really love to publish an article about the Voldemort rebalancing implementation, so please do forward this kind request to anyone that can help. ( @strlen, @ijuma: I hope you are reading this).


Terrastore 0.4

While version change sounded like a minor release, the latest version of Terrastore, the partitioned and elastic document database built on top of Terracotta, features quite a few interesting new things:

  • New, configurable, server-to-master reconnection procedure and improved graceful shutdown procedure for server nodes.
  • New socket-based internal communication layer, improving multi-node performances and lowering resource consumption.
  • New transparent rerouting of client requests in case of failing nodes.
  • Improved rebalancing in case of nodes leaving or failing.

I must confess that if I’d be managing Terrastore releases and knew that these features are well tested, I would definitely jumped a couple of versions!


Riak 0.7.1

Riak 0.7.1 seems to be mostly a bugfix release, with a pretty cryptic ☞ announcement (at least for someone not familiar with the Riak source code).


Characterizing Enterprise Systems using the CAP theorem

When building your next distributed system, you will have to make sure that all subsystems are able to deliver the combination of consistency-availability-partition tolerance that you are looking for.

Taylor’s article is a great start for categorizing according to the CAP theorem some of the (enterprise) systems out there: Terracota, Oracle Coherence, GigaSpaces, but also RDBMS and a couple of NoSQL solutions like Amazon Dynamo, BigTable, Cassandra, CouchDB and Project Voldemort.

Another interesting aspect of the article is that it tries to identify how these systems are coping with the missing CAP dimension. Unfortunately, there are a couple of things in the RDBMS analysis that I do not agree with.

An RDBMS provides availability, but only when there is connectivity between the client accessing the RDBMS and the RDBMS itself.

[…] there are several well-known approaches that can be employed to compensate for the lack of Partition tolerance. One of these approaches is commonly referred to as master/slave replication.

RDBMS are not available by themselves. Leaving aside the connectivity issue, RDBMS can become busy performing complex operations or run out of resources and so they can be unavailable.

What the article identifies as a solution for dealing with partition tolerance, master/slave setups are meant in fact to provide some level of availability. But with master/slave consistency becomes only “eventual consistency”.

The other approach mentioned — sharding — is indeed a solution meant to provide some level of partition tolerance. But without replication it gives up to availability.

As side notes:

  • it was interesting to learn that GigaSpaces can behave as either an CA or AP system, depending on the configurable replication scheme (sync vs async).
  • I am wondering if there are any CP solutions out there. I’d speculate that financial services would probably be required to be CP (if distributed).