"Structured storage" redirects here. For the Microsoft technology
also known as structured storage, see
COM Structured Storage.
A NoSQL database provides
a mechanism for storage and retrieval of data that
is modeled in means other than the tabular relations used
in relational databases. Motivations for
this approach include simplicity of
design, horizontal
scaling and finer control over availability.
NoSQL databases are often highly optimizedkey–value
stores intended primarily for simple retrieval
and appending operations, whereas an RDBMS is intended as a general purpose
data store. There will thus be some operations where NoSQL is
faster and some where an RDBMS is faster. NoSQL databases are
finding significant and growing industry use
in big dataand real-time
web applications.[1] NoSQL
systems are also referred to as "Not only SQL" to emphasize that
they may in fact allow SQL-like query
languages to be used. In the context of
the CAP
theorem, NoSQL stores often compromise consistency in favor of
availability and partition tolerance. Barriers to the greater
adoption of NoSQL data stores in practice include: the lack of
full ACID transaction support, the use
of low-level query languages, the lack of standardized interfaces,
and the huge investments already made in SQL by
enterprises. [2]
History[edit]
Carlo
Strozzi used the
term NoSQL in 1998 to name
his lightweight, open-source relational
database that did not expose the standard SQL
interface.[3] Strozzi
suggests that, as the current NoSQL movement "departs from the
relational model altogether; it should therefore have been called
more appropriately 'NoREL'.[4]
Eric Evans
(then a Rackspace employee) reintroduced
the term NoSQL in early
2009 when Johan Oskarsson of Last.fm wanted to organize an event
to discuss open-source distributed databases.[5] The
name attempted to label the emergence of a growing number of
non-relational, distributed data stores that often did not attempt
to provide atomicity,
consistency, isolation and
durability guarantees that are key attributes
of classic relational database systems.[6]
Taxonomy[edit]
There have
been various approaches to classify NoSQL databases, each with
different categories and subcategories. Because of the variety of
approaches and overlaps it is difficult to get and maintain an
overview of non-relational databases. Nevertheless, the basic
classification that most would agree on is based on data model. A
few of these and their prototypes are:
- Column: HBase, Accumulo, Cassandra
- Document: MarkLogic, MongoDB, Couchbase
-
Key-value: Dynamo, Riak, Redis, MemcacheDB, Project Voldemort
-
Graph: Neo4J, OrientDB, Allegro, Virtuoso
Classification based on data model[edit]
Stephen Yen
in his blog post "NoSQL is a Horseless Carriage" suggests the
following:[7]
|
Term |
Matching Database |
|
KV Cache |
Memcached, Repcached, Coherence,
Infinispan, eXtreme Scale, JBoss
Cache, Velocity, Terracotta, Gigaspaces XAP |
|
KV Store |
Keyspace, Flare, SchemaFree, RAMCloud |
|
KV Store - Eventually consistent |
Dynamo, Voldemort, Dynomite,
SubRecord, MotionDb, DovetailDB |
|
Data-structures server |
Redis |
|
KV Store - Ordered |
TokyoTyrant, Lightcloud, NMDB, Luxio, MemcacheDB, Actord |
|
Tuple Store |
Gigaspaces, Coord, Apache
River |
|
Object Database |
ZopeDB, DB4O,
Shoal, Perst |
|
Document Store |
MarkLogic, CouchDB, MongoDB, Jackrabbit, XML-Databases, ThruDB,
CloudKit, Persevere, Riak Basho, Scalaris |
|
Wide Columnar Store |
BigTable, HBase, Cassandra, Hypertable, KAI, OpenNeptune, Qbase, KDI |
Classification based on feature[edit]
Ben
Scofield categorized NoSQL databases based on nonfunctional
categories (“(il)ities“) plus a rating of their feature
coverage:[citation
needed]
|
Data Model |
Performance |
Scalability |
Flexibility |
Complexity |
Functionality |
|
Key–value Stores |
high |
high |
high |
low |
variable (none) |
|
Column Store |
high |
high |
moderate |
low |
minimal |
|
Document Store |
high |
variable (high) |
high |
low |
variable (low) |
|
Graph Database |
variable |
variable |
high |
high |
graph theory |
|
Relational Database |
variable |
variable |
low |
moderate |
relational algebra. |
Examples[edit]
Document store[edit]
The central
concept of a document store is the notion of a "document". While
each document-oriented database implementation differs on the
details of this definition, in general, they all assume that
documents encapsulate and encode data (or information) in some
standard formats or encodings. Encodings in use include
XML, YAML, and JSON as well as binary forms
like BSON, PDF and Microsoft Office documents (MS
Word, Excel, and so on).
Different
implementations offer different ways of organizing and/or grouping
documents:
- Collections
- Tags
- Non-visible Metadata
- Directory hierarchies
Compared to
relational databases, for example, collections could be considered
as tables as well as documents could be considered as records. But
they are different: every record in a table has the same sequence
of fields, while documents in a collection may have fields that are
completely different.
Documents
are addressed in the database via a
unique key that represents
that document. One of the other defining characteristics of a
document-oriented database is that, beyond the simple key-document
(or key–value) lookup that you can use to retrieve a document, the
database will offer an API or query language that will allow
retrieval of documents based on their contents.
|
Name |
Language |
Notes |
|
BaseX |
Java, XQuery |
XML database |
|
Cloudant |
Erlang, Java, Scala, C |
JSON store (online service) |
|
Clusterpoint |
C++ |
XML, geared for Full text search |
|
Couchbase Server |
Erlang, C, C++ |
Support for JSON and binary documents |
|
Apache CouchDB |
Erlang |
JSON database |
|
djondb[8][9][10] |
C++ |
JSON,
ACID Document Store |
|
ElasticSearch |
Java |
JSON,
Search engine |
|
eXist |
Java, XQuery |
XML database |
|
Jackrabbit |
Java |
Java Content
Repository implementation |
|
IBM Lotus
Notes and Lotus Domino |
LotusScript, Java, IBM X Pages, others |
MultiValue |
|
MarkLogic Server |
XQuery, Java, REST |
XML database with support
for JSON, text, and binaries |
|
MongoDB |
C++, C#, Go |
BSON store (binary
format JSON) |
|
Oracle NoSQL Database |
Java, C |
|
|
OrientDB |
Java |
JSON,
SQL support |
|
CoreFoundation Property list |
C, C++, Objective-C |
JSON, XML, binary |
|
Sedna |
XQuery, C++ |
XML database |
|
SimpleDB |
Erlang |
online service |
|
TokuMX |
C++, C#, Go |
MongoDB with Fractal Tree
indexing |
|
OpenLink Virtuoso |
C++, C#, Java, SPARQL |
middleware and database
engine hybrid |
This kind
of database is designed for data whose relations are well
represented as a graph (elements interconnected with an
undetermined number of relations between them). The kind of data
could be social relations, public transport links, road maps or
network topologies, for example.
Key–value stores[edit]
Key–value
stores allow the application to store its data in a schema-less
way. The data could be stored in a datatype of a programming
language or an object. Because of this, there is no need for a
fixed data model.[11][12] The
following types exist:
KV - eventually consistent[edit]
KV - hierarchical[edit]
KV - cache in RAM[edit]
KV - solid state or rotating disk[edit]
KV - ordered[edit]
Object database[edit]
Tabular[edit]
Tuple store[edit]
Triple/Quad Store (RDF) database[edit]
Multivalue databases[edit]
Cell database[edit]
NoSQL databases on the cloud[edit]
NoSQL
databases can be run on-premises, but are also often run
on IaaS or PaaS platforms
like Amazon Web
Services, RackSpace or Heroku. There are three common deployment models
for NoSQL on the cloud:
- Virtual
machine image - cloud
platforms allow users to rent virtual machine instances for a
limited time. It is possible to run a NoSQL database on these
virtual machines. Users can upload their own machine image with a
database installed on it, use ready-made machine images that
already include an optimized installation of a database, or install
the NoSQL database on a running machine instance.
- Database as a
service - some cloud platforms offer
options for using familiar NoSQL database products as a service,
such as MongoDB, Redis and Cassandra, without physically launching a
virtual machine instance for the database. The database is provided
as a managed service, meaning that application owners do not have
to install and maintain the database on their own, and pay
according to usage. Some database as a service providers provide
additional features, such as clustering or high availability, that
are not available in the on-premise version of the database (see
the table below for several examples).
- Native cloud NoSQL
databases - some providers offer a NoSQL
database service which is available only on the cloud. A well-known
example is Amazon’sSimpleDB, a simple NoSQL key-value store.
SimpleDB cannot be installed on a local machine and cannot be used
on any cloud platform except Amazon’s.
The
following table provides notable examples of NoSQL databases
available on the cloud in each of these deployment models:
|
Deployment Model |
Database Technology |
Provider |
Cloud-Specific Features |
Pricing Model |
|
Virtual machine image |
MongoDB |
MongoDB - machine images for Amazon
EC2[15] and
Windows Azure[16] |
None |
- Database and machine image - open
source
- Amazon/Azure instances - pay per
use
|
|
Virtual Machine Image |
Redis |
- Redis - standard open source
installation
- Script for installation on Amazon
EC2 [17]
- Recommended installation on
Windows Azure [18]
|
None |
- Database and machine image - open
source
- Amazon/Azure instances - pay per
use
|
|
Virtual machine image |
Cassandra |
Apache Cassandra - machine
image for Amazon EC2[19] |
None |
- Database and machine image - open
source
- Amazon instances - pay per
use
|
|
Database as a Service |
MongoDB |
Mongolab[20] -
available on Amazon, Google, Joyent, Rackspace and Windows
Azure |
- Managed service
- High availability
- Automatic failover
- Pre-configured clustering
|
- Free up to 500MB (on
disk)[21]
- Paid plans based on architecture
and storage size
|
|
Database as a Service |
Redis/Memcached |
Amazon Web Services -
ElastiCache[22] |
- Managed service
- Automatic healing of failed
nodes
- Resilient system to prevent
overloaded DBs
- Performance monitoring
|
- Free for 750 hours on micro
instance[23]
- Pay per use for machine
utilization, no separate charge for data usage[24]
|
|
Database as a Service |
Redis |
RedisToGo[25] -
available on Amazon EC2, RackSpace, Heroku, AppHarbor,
Orchestra |
- Managed service
- Daily backups
- API enabling creation, deletion,
or download of Redis instances
|
- Free up to 5MB (memory)
- Paid plans based on memory
usage
|
|
Database as a Service |
Redis |
Redis Cloud (Garantia Data)[26] -
available on Amazon EC2, Windows Azure, Heroku, Cloud Foundry,
OpenShift, AppFog, AppHarbor |
- Managed service
- Automatic scaling, unlimited
Redis nodes
- High availability
- Built-in clustering
|
- Free up to 25MB
(memory)[27]
- Pay per use
|
|
Database as a Service |
Cassandra |
InstaClustr[28] -
available on Amazon EC2, RackSpace, Windows Azure, Joyent, Google
Compute Engine |
- Managed service
- Performance tuning
- Monitoring
- Automated backups
- DataStax OpsCenter for cluster
admin
|
Paid plans
based on disk storage, memory usage and CPU cores[29]
|
|
Native cloud NoSQL database |
Amazon SimpleDB |
Amazon Web Services |
- Managed service
- High availability
- Unlimited scale
- Data durability
|
- Free for 750 hours on micro
instance[30]
- Pay per use - separate charge for
machine utilization and data usage[30]
|
|
Native cloud NoSQL database |
Google App Engine Datastore[31] |
Google |
- No planned downtime
- Atomic transactions
- High availability of reads and
writes
|
- Free with quota system limiting
instance hours, storage and throughput[32]
- Pay per use based on instance
hours, storage, throughput and other parameters
|
|
Native cloud NoSQL database |
SalesForce Database.com[33] |
SalesForce |
- Unlimited scale
- Access to SalesForce meta
data
- Social API
- Support for mobile clients
- Multi-tenancy
|
- Free up to 100K records and 50K
transactions[34]
- Pay per use based on users,
number of records and transactions
|
See also[edit]
References[edit]
-
^ "RDBMS
dominate the database market, but NoSQL systems are catching
up". DB-Engines.com. 21 Nov 2013. Retrieved 24 Nov
2013.
-
^ K.
Grolinger, W.A. Higashino, A. Tiwari, M.A.M. Capretz
(2013). "Data
management in cloud environments: NoSQL and NewSQL data
stores". JoCCASA, Springer. Retrieved 8 Jan
2014.
-
^ Lith,
Adam; Jakob Mattson (2010). "Investigating
storage solutions for large data: A comparison of well performing
and scalable data storage solutions for real time extraction and
batch insertion of data" (PDF). Göteborg:
Department of Computer Science and Engineering, Chalmers University
of Technology. p. 70. Retrieved 12 May
2011. "Carlo Strozzi first used the term NoSQL in 1998 as a
name for his open source relational database that did not offer a
SQL interface[...]"
-
^ "NoSQL
Relational Database Management System: Home Page". Strozzi.it.
2 October 2007. Retrieved 29 March
2010.
-
^ "NoSQL
2009". Blog.sym-link.com. 12 May 2009. Retrieved 29 March
2010.
-
^ Mike
Chapple. "The
ACID Model".
-
^ A
Yes for a NoSQL Taxonomy. High Scalability (2009-11-05).
Retrieved on 2013-09-18.
-
^ The
enterprise class NoSQL database. djondb. Retrieved on
2013-09-18.
-
^ http://tinman.cs.gsu.edu/~raj/8711/sp13/djondb/Report.pdf
-
^ Undefined
Blog: Meeting with DjonDB. Undefvoid.blogspot.com. Retrieved on
2013-09-18.
-
^ Sandy
(14 January 2011). "Key Value stores and the
NoSQL movement".http://dba.stackexchange.com/questions/607/what-is-a-key-value-store-database:
Stackexchange. Retrieved 1 January 2012. "Key–value
stores allow the application developer to store schema-less data.
This data usually consists of a string that represents the key, and
the actual data that is considered to be the value in the
"key–value" relationship. The data itself is usually some kind of
primitive of the programming language (a string, an integer, or an
array) or an object that is being marshaled by the programming
language's bindings to the key–value store. This structure replaces
the need for a fixed data model and allows proper
formatting."
-
^ Marc
Seeger (21 September 2009). "Key-Value
Stores: a practical overview".http://blog.marc-seeger.de/2009/09/21/key-value-stores-a-practical-overview/:
Marc Seeger. Retrieved 1 January 2012. "Key–value
stores provide a high-performance alternative to relational
database systems with respect to storing and accessing data. This
paper provides a short overview of some of the currently available
key–value stores and their interface to the Ruby programming
language."
-
^ "Riak:
An Open Source Scalable Data Store". 28 November 2010.
Retrieved 28 November 2010.
-
^ Tweed,
Rob; George James (2010). "A Universal
NoSQL Engine, Using a Tried and Tested
Technology" (PDF). p. 25.
"Without exception, the most successful and well-known of the NoSQL
databases have been developed from scratch, all within just the
last few years. Strangely, it seems that nobody looked around to
see whether there were any existing, successfully implemented
database technologies that could have provided a sound foundation
for meeting Web-scale demands. Had they done so, they might have
discovered two products, GT.M and Caché.....*"
-
^ "Neo4J
in the Cloud", Neo4J Wiki, Retrieved
2011-11-10.
-
^ "MongoDB
on Azure, MongoDB.org, Retrieved
2011-11-10.
-
^ "Install
Redis.sh", GitHub Gist, Retrieved
2013-12-29.
-
^ "Running
Redis on a CentOS Linux VM in Windows
Azure", Thomas Conté's MSDN Weblog,
Retrieved 2013-12-29.
-
^ "Setting
up Cassandra in the Cloud", Cassandra Wiki, Retrieved
2011-11-10.
-
^ "MongoLab
Product Overview", MongoLab.com, Retrieved
2013-12-29.
-
^ "MongoLab
Plans and Pricing", MongoLab.com, Retrieved
2013-12-29.
-
^ "Amazon
ElastiCache", Amazon Web Services, Retrieved
2013-12-29.
-
^ "Amazon
ElastiCache Free Usage Tier", Amazon Web Services, Retrieved
2013-12-29.
-
^ "Amazon
ElastiCache Pricing", Amazon Web Services, Retrieved
2013-12-29.
-
^ "RedisToGo
Documentation", RedisToGo.com, Retrieved
2013-12-29.
-
^ Redis
Cloud by Garantia Data, Redis-Cloud.com, Retrieved
2013-12-29.
-
^ "Garantia
Data Pricing", GarantiaData.com, Retrieved
2013-12-29.
-
^ "InstaClustr
Frequently Asked Questions", Instaclustr.com, Retrieved
2013-12-29.
-
^ Instaclutr
Providers & Pricing, Instaclustr.com, Retrieved
2013-12-29.
-
^ a b Amazon
SimpleDB Pricing, Amazon Web Services, Retrieved
2013-12-29.
-
^ "Java
Datastore API", Google App Engine,
Retrieved 2013-12-29.
-
^ App
Engine Pricing, Google Cloud Platform, Retrieved
2013-12-29.
-
^ "How
it works", Database.com, Retrieved
2013-12-29.
-
^ "Database.com
Pricing", Database.com, Retrieved
2013-12-29.
Further reading[edit]
External links[edit]