NoSQL
"Structured storage" redirects here. For the Microsoft technology also known as structured storage, see COM
Structured Storage.
A NoSQL or Not Only SQL 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. The data structure (e.g. key-value, graph, or
document) differs from the RDBMS, and therefore some operations are faster in NoSQL and some in RDBMS.
There are differences though, and the particular suitability of a given NoSQL DB depends on the problem it must
solve (e.g., does the solution use graph algorithms?).
NoSQL databases are increasingly used in big data and real-time web applications. NoSQL systems are also called
"Not only SQL" to emphasize that they may also support SQL-like query languages. Many NoSQL stores
compromise consistency (in the sense of the CAP theorem) in favor of availability and partition tolerance. Barriers to
the greater adoption of NoSQL stores include the use of low-level query languages, the lack of standardized
interfaces, and huge investments in existing SQL. Most NoSQL stores lack true ACID transactions, although a few
recent systems, such as FairCom c-treeACE, Google Spanner and FoundationDB, have made them central to their
designs.
History
Carlo Strozzi used the term NoSQL in 1998 to name his lightweight, open-source relational database that did not
expose the standard SQL interface. Strozzi suggests that, as the current NoSQL movement "departs from the
relational model altogether; it should therefore have been called more appropriately 'NoREL'", referring to 'No
Relational'.
Eric Evans reintroduced the term NoSQL in early 2009 when Johan Oskarsson of Last.fm wanted to organize an
event to discuss open-source distributed databases. The name attempted to label the emergence of an increasing
number of non-relational, distributed data stores. Most of the early NoSQL systems did not attempt to provide
atomicity, consistency, isolation and durability guarantees, contrary to the prevailing practice among relational
database systems.
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, a basic classification is based on data model. A few examples in each category are:
Column: Accumulo, Cassandra, Druid, HBase
Document: Clusterpoint, Apache CouchDB, Couchbase, MarkLogic, MongoDB
Key-value: Dynamo, FoundationDB, MemcacheDB, Redis, Riak, FairCom c-treeACE
Graph: Allegro, Neo4J, InfiniteGraph, OrientDB, Virtuoso, Stardog
A more detailed classification is the following, by Stephen Yen:
NoSQL 2
Key-Value Cache Coherence, eXtreme Scale, GigaSpaces, GemFire, Hazelcast, Infinispan, JBoss Cache, Memcached,
Repcached, Terracotta, Velocity
Key-Value Store (Ordered) Actord, FoundationDB, Lightcloud, Luxio, MemcacheDB, NMDB, Scalaris, TokyoTyrant
Wide Columnar Store BigTable, Cassandra, Druid, HBase, Hypertable, KAI, KDI, OpenNeptune, Qbase
Performance
Ben Scofield rated different categories of NoSQL databases as follows:
Examples
Document store
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 analogous to tables and documents
analogous to 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.
NoSQL 3
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 using the simple key-document (or key-value) lookup
to retrieve a document, the database offers an API or query language that retrieves documents based on their
contents.
Document store databases and their query language
Clusterpoint C, C++, REST, XML, full text search XML database with support for JSON, text, binaries
Couchbase Server C, C++, Erlang Support for JSON and binary documents
IBM Notes and IBM Domino LotusScript, Java, IBM X Pages, others MultiValue
MarkLogic Server Java, REST, XQuery XML database with support for JSON, text, and binaries
OpenLink Virtuoso C++, C#, Java, SPARQL middleware and database engine hybrid
Graph
Main article: Graph database
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.
Graph databases and their query language
NoSQL 4
FlockDB Scala
Neo4j Java
OrientDB Java
Sones GraphDB C#
Sqrrl Enterprise Java Distributed, real-time graph database featuring cell-level security
OpenLink Virtuoso C++, C#, Java, SPARQL middleware and database engine hybrid
Key-value stores
Key-value (KV) stores use the associative array (also known as a map or dictionary) as their fundamental data
model. In this model, data is represented as a collection of key-value pairs, such that each possible key appears at
most once in the collection.
The key-value model is one of the simplest non-trivial data models, and richer data models are often implemented on
top of it. The key-value model can be extended to an ordered model that maintains keys in lexicographic order. This
extension is powerful, in that it can efficiently process key ranges.
Key-value stores can use consistency models ranging from eventual consistency to serializability. Some support
ordering of keys. Some maintain data in memory (RAM), while others employ solid-state drives or rotating disks.
Here is a list of key-value stores:
KV - eventually consistent
Dynamo
Riak
KV - immediately consistent
FairCom c-treeACE
KV - ordered
Berkeley DB
FairCom c-treeACE/c-treeRTG
FoundationDB
IBM Informix C-ISAM
InfinityDB
MemcacheDB
NDBM
NoSQL 5
KV - RAM
Coherence
FairCom c-treeACE
GemFire [1]
Hazelcast
memcached
redis
OpenLink Virtuoso
XAP
Object database
Main article: Object database
db4o
GemStone/S
InterSystems Cach
JADE
NeoDatis ODB
ObjectDatabase++
ObjectDB
Objectivity/DB
ObjectStore
ODABA
Perst
OpenLink Virtuoso
Versant Object Database
ZODB
NoSQL 6
Tabular
Apache Accumulo
BigTable
Apache Hbase
Hypertable
Mnesia
OpenLink Virtuoso
Tuple store
GigaSpaces
Apache River
Tarantool
OpenLink Virtuoso
TIBCO ActiveSpaces
Hosted
Amazon DynamoDB
Cloudant Data Layer (CouchDB)
Datastore on Google Appengine
Freebase
OpenLink Virtuoso
Multivalue databases
D3 Pick database
Extensible Storage Engine (ESE/NT)
InfinityDB
InterSystems Cach
Northgate Information Solutions Reality, the original Pick/MV Database
OpenQM
Revelation Software's OpenInsight
Rocket U2
NoSQL 7
References
[1] http:/ / www. gopivotal. com/ big-data/ pivotal-gemfire
Further reading
Pramod Sadalage and Martin Fowler (2012). NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot
Persistence. Addison-Wesley. ISBN0-321-82662-0.
Dan McCreary & Ann Kelly (2013). Making Sense of NoSQL: A guide for managers and the rest of us.
ISBN9781617291074.
Christof Strauch (2012). "NoSQL Databases" (http://www.christof-strauch.de/nosqldbs.pdf).
Moniruzzaman AB, Hossain SA (2013). "NoSQL Database: New Era of Databases for Big data Analytics -
Classification, Characteristics and Comparison" (http://arxiv.org/abs/1307.0191).
Kai Orend (2013). Analysis and Classification of NoSQL Databases and Evaluation of their Ability to Replace an
Object-relational Persistence Layer (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.184.483&
rep=rep1&type=pdf).
Ganesh Krishnan, Sarang Kulkarni, Dharmesh Kirit Dadbhawala. "Method and system for versioned sharing,
consolidating and reporting information" (https://www.google.com/patents/US7383272?pg=PA1&
dq=ganesh+krishnan&hl=en&sa=X).
Sugam Sharma. "A Brief Review on Modern NoSQL Data Models, Handling Big Data" (http://www.cs.iastate.
edu/~sugamsha/articles).
External links
Christoph Strauch. "NoSQL whitepaper" (http://www.christof-strauch.de/nosqldbs.pdf). Hochschule der
Medien, Stuttgart.
Stefan Edlich. "NoSQL database List" (http://nosql-database.org/).
Peter Neubauer (2010). "Graph Databases, NOSQL and Neo4j" (http://www.infoq.com/articles/
graph-nosql-neo4j).
Sergey Bushik (2012). "A vendor-independent comparison of NoSQL databases: Cassandra, HBase, MongoDB,
Riak" (http://www.networkworld.com/news/tech/2012/102212-nosql-263595.html). NetworkWorld.
Article Sources and Contributors 8
License
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/