The traditional ACID guarantees in databases have
given way to newer approaches in the cloud emphasizing higher
availability/scalability.

LWN has an article
discussing alternatives to SQL databases: (Multiple extracts which have
been reformatted for readability follows)
Cassandra is a data store written in Java that
was open-sourced by Facebook and is now part of the Apache Incubator. Cassandra
was originally designed to solve Facebook's in-box searching problem. Email
reverse indexes were growing much faster than their databases could keep up
with and they needed a affordable way to continue to grow.
Perhaps the simplest key-value store is Memcached.
Memcached is widely used to to speed up web applications by caching dynamic content.
Part or all of the web pages are served from the cache instead of generating
them at each request. Unlike in-process or shared memory caches, Memcached
listens on a network socket and can be shared by many servers. Memcached may
also be run on multiple servers and it will spread the keys across those
servers and transparently fall back to servers that are still available when
one goes down.
For
a key-value data store that won't throw out data, Tokyo
Cabinet is
a good choice. Like Berkeley DB, it uses either a hash table, B+ tree or a
array of fixed-length records to store data on disk, but Tokyo Cabinet performs
better and is thread safe. Tokyo Cabinet also promises to never corrupt data
even in a "catastrophic situation". Tokyo Cabinet is actively
maintained, and data stored is not limited by system RAM.
Redis is a disk-backed, in-memory key-value
store with a number of additional features. Redis supports master-slave
replication for redundancy, but not sharding, so all data must fit in a single
system's RAM. Redis values may be binary strings, lists or sets. Redis provides
atomic addition to/subtraction from integer values stored as decimal strings
and push/pop/replacement of values in lists. The intersection of set values
stored may also be calculated.
CouchDB is a JSON-based document
database written in Erlang. CouchDB gives access to the database over HTTP with
a RESTful
API. Views of the database may be created on demand using Javascript to collect
and filter document contents and are updated as documents change. Indexes are
not maintained outside of views, so there is a start-up cost associated with
constructing a new view.
MongoDB is a document database written in C++. MongoDB uses a binary-encoded JSON format that shrinks the data size and allows for faster searching and indexing. Large binary data, such as video files, can also be stored more efficiently in this format. Data is updated in place and MongoDB will automatically run a repair procedure on the database in the event of an unclean shutdown.
The new NoSQL community :) recently met - slides from their recent meeting go into details of a few alternatives:
Presentation slides and videos
Intro session - Todd Lipcon, Cloudera (slides, video1, video2)
Voldemort - Jay
Kreps, Linkedin (slides, video1, video2)
Cassandra - Avinash
Lakshman, Facebook (slides, video)
Dynomite - Cliff
Moon, Powerset (slides, video)
HBase - Ryan
Rawson, Stumbleupon (slides, video)
Hypertable - Doug
Judd, Zvents (slides, video1, video2)
CouchDB - Chris
Anderson, couch.io (slides, video1, video2)
VPork - Jon
Travis, Springsource (slides, video)
MongoDb - Dwight
Merriman, 10gen (slides, video)
Infinite Scalability - Jonas S Karlsson, Google
(slides, video)
Additional Commentary:
Is the Relational Database Doomed ?
Anti-RDBMS: A list of distributed key-value stores
The current database debate and graph databases
Trading Consistency for
Scalability in Distributed Architectures






Comments