"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]
Contents
1 History
2 Taxonomy
3 Classification based on data
model
4 Classification based on
feature
5 Examples
5.1 Document
store
5.2 Graph
5.3 Key–value stores
5.3.1 KV - eventually
consistent
5.3.2 KV
- hierarchical
5.3.3 KV
- cache in RAM
5.3.4 KV - solid state or
rotating disk
5.3.5 KV
- ordered
5.4 Object
database
5.5 Tabular
5.6 Tuple
store
5.7 Triple/Quad Store (RDF)
database
5.8 Hosted
5.9 Multivalue
databases
5.10 Cell
database
6 NoSQL databases on the
cloud
7 See
also
8 References
9 Further
reading
10 External
links
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. |
|
|
It
has been suggested that this article be merged into Comparison of
structured storage software. (Discuss) Proposed
since March 2011. |
See also: Comparison of
structured storage software
Examples[edit]
Document store[edit]
Main articles: Document-oriented
database and XML database
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 |
Graph[edit]
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.
Main article: Graph database
|
Name |
Language |
Notes |
|
AllegroGraph |
SPARQL |
RDF GraphStore |
|
IBM
DB2 |
SPARQL |
RDF GraphStore
added in DB2 10 |
|
DEX |
Java, C++, .NET |
High-performance graph database |
|
FlockDB |
Scala |
|
|
InfiniteGraph |
Java |
High-performance, scalable, distributed graph database |
|
Neo4j |
Java |
|
|
OpenLink Virtuoso |
C++, C#, Java, SPARQL |
middleware and database
engine hybrid |
|
OrientDB |
Java |
|
|
Sones GraphDB |
C# |
|
|
Sqrrl
Enterprise |
Java |
Distributed, real-time graph database featuring cell-level
security |
|
OWLIM |
Java, SPARQL
1.1 |
RDF graph
store with reasoning |
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]
Apache Cassandra
Dynamo
Hibari
OpenLink Virtuoso
Project Voldemort
Riak[13]
KV - hierarchical[edit]
GT.M[14]
InterSystems Caché
KV - cache in RAM[edit]
memcached
redis
OpenLink Virtuoso
Hazelcast
Oracle Coherence
KV - solid state or rotating disk[edit]
Aerospike
BigTable
CDB
Couchbase Server
Keyspace
LevelDB
MemcacheDB (using Berkeley
DB)
MongoDB
OpenLink Virtuoso
Tarantool
Tokyo Cabinet
Tuple space
Oracle NoSQL Database
KV - ordered[edit]
Berkeley DB
FoundationDB
IBM Informix C-ISAM
InfinityDB
MemcacheDB
NDBM
Object database[edit]
Main article: Object database
db4o
GemStone/S
InterSystems Caché
JADE
NeoDatis ODB
ObjectDB
Objectivity/DB
ObjectStore
ODABA
Perst
OpenLink Virtuoso
Versant Object Database
WakandaDB
ZODB
Tabular[edit]
Apache Accumulo
BigTable
Apache
Hbase
Hypertable
Mnesia
OpenLink Virtuoso
Tuple store[edit]
Apache River
OpenLink Virtuoso
Tarantool
Triple/Quad Store (RDF) database[edit]
SparkleDB
Virtuoso Universal Server
Ontotext-OWLIM
Apache JENA
Oracle NoSQL database
MarkLogic
Hosted[edit]
Freebase
OpenLink Virtuoso
Datastore on Google Appengine
Amazon DynamoDB
Cloudant
Data Layer (CouchDB)
Multivalue databases[edit]
Northgate Information
Solutions Reality, the original Pick/MV
Database
Extensible Storage
Engine (ESE/NT)
OpenQM
Revelation
Software's OpenInsight
Rocket
U2
D3 Pick database
InterSystems Caché
InfinityDB
Cell database[edit]
NoSQL databases on the cloud[edit]
Main article: Cloud database
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]
CAP
theorem
Comparison
of object database management systems
Comparison of
structured storage software
Faceted search
Triplestore
Distributed cache
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]
Pramod Sadalage
and Martin
Fowler (2012). NoSQL
Distilled: A Brief Guide to the Emerging World of Polyglot
Persistence. Addison-Wesley. ISBN 0-321-82662-0.
Christof Strauch
(2012). "NoSQL
Databases".
Moniruzzaman AB, Hossain SA
(2013). "NoSQL Database: New Era of
Databases for Big data Analytics - Classification, Characteristics
and Comparison".
Kai Orend
(2013). Analysis
and Classification of NoSQL Databases and Evaluation of their
Ability to Replace an Object-relational Persistence
Layer.
Ganesh Krishnan, Sarang Kulkarni, Dharmesh
Kirit Dadbhawala. "Method
and system for versioned sharing, consolidating and reporting
information".
Sugam Sharma. "A Brief Review on
Modern NoSQL Data Models, Handling Big Data".
External links[edit]
Christoph
Strauch. "NoSQL
whitepaper". Hochschule der Medien, Stuttgart.
Stefan Edlich. "NoSQL database List".
Peter Neubauer
(2010). "Graph Databases,
NOSQL and Neo4j".
Sergey Bushik
(2012). "A
vendor-independent comparison of NoSQL databases: Cassandra, HBase,
MongoDB, Riak". NetworkWorld.
|
v
t
e
Database management systems
|
|
|
Database models
Database normalization
Database storage
Distributed
DBMS
Federated database system
Referential integrity
Relational algebra
Relational calculus
Relational database
Relational
DBMS
Relational model
Object-relational database
Transaction processing
|
|
|
Concepts |
Database
ACID
CRUD
Null
Candidate key
Foreign key
Primary key
Superkey
Surrogate key
Armstrong's axioms
|
|
|
Objects |
Relation
table
column
row
View
Transaction
Log
Trigger
Index
Stored procedure
Cursor
Partition
|
|
|
Components |
Concurrency control
Data dictionary
JDBC
XQJ
ODBC
Query language
Query optimizer
Query
plan
|
|
|
Functions |
Administration and
automation
Query optimization
Replication
|
|
-
Database products
-
-
Object-oriented
-
comparison
-
Relational
-
comparison
-
Document-oriented
-
Graph database
-
NoSQL
-
NewSQL
|
|