NANVEL

DynamoDB in examples, Example 1.6: DynamoDB alternatives

List of databases allows to store data so huge that it doesn't fit on server.

I worked only with DynamoDB and Cassandra, information about all other databases was taken from the internet (don't verified).

DynamoDB

License: Proprietary

Interface: HTTP/REST/JSON, console, web interface

Written in: Java

The biggest advantage of DynamoDB that it is easy to maintain for end user, in fact, You need only to configure table structure in DynamoDB web interface or using API and to set provisioned throughput. And instead of spin up more servers, You need only to increase provisioned throughput, it takes less then minute.

Features:

  • Master-less replication
  • Replication across data centers
  • Schema-less: (except primary key fields)
  • Pay for storage + provisioned throughput
  • Secondary indexes (limited)
  • Strong consistency (optional)
  • AWS management console
  • Amazon Elastic MapReduce, Lambda and other Amazon services integration

Cassandra

License: Apache

Interface: CQL (similar to SQL)

Written in: Java

Features:

  • Tunable trade-offs for distribution and replication (consistency)
  • Time to live
  • Blazing fast writes
  • Reliable cross-datacenter replication
  • Counter datatype
  • Secondary index
  • Master-less replication (peer-to-peer architecture)
  • Efficient compaction
  • Static field as join replacement (efficient denormalization)
  • Compound key implementation
  • List, map, set, time UUID, custom object data types

MongoDB

License: AGPL (Drivers: Apache)

Interface: Custom, binary (BSON)

Written in: C++

Features:

  • Master/slave replication + built-in sharding
  • Server-side javascript functions
  • Integrated text search
  • Geospatial indexing
  • Allows to execute complex queries (uses map/reduce tasks on each node)

CouchDB

License: Apache

Interface: HTTP/REST

Written in: Erlang

Features:

  • Master-master replication
  • Embedded mapreduce

JS uses for mapreduce functions:

module.exports = {
  /* let us find items by a particular author */
  by_author: {
    map: function(doc) {
      if ('author' in doc) {
        doc.authors.forEach(emit)
      }
    }
  }.toString(),
  reduce: '_count'
}

HBase

License: Apache

Interface: HTTP/REST

Written in: Java

Features:

  • Hadoop's HDFS as storage
  • Mapreduce with Hadoop
  • A cluster consists of several different types of nodes

Riak

License: Apache

Interface: HTTP/REST or custom binary

Written in: Erlang & C, some JavaScript

Features:

  • Tunable trade-offs for distribution and replication
  • Pre- and post-commit hooks in JavaScript or Erlang, for validation and security
  • Mapreduce in JavaScript or Erlang

Licensed under CC BY-SA 3.0