Jump to content

NoSQL: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Tgrall (talk | contribs)
Tgrall (talk | contribs)
Line 68: Line 68:
| [[Clusterpoint]] || [[C++]] || geared for [[Full text search]]
| [[Clusterpoint]] || [[C++]] || geared for [[Full text search]]
|-
|-
| [[CouchBase|CouchBase (2.0)]] || [[Erlang (programming language)|Erlang]],[[C++]] || [[JSON]] store
| [[Couchbase|CouchBase (2.0)]] || [[Erlang (programming language)|Erlang]],[[C++]] || [[JSON]] store
|-
|-
| [[CouchDB|Apache CouchDB]] || [[Erlang (programming language)|Erlang]] || [[JSON]] store
| [[CouchDB|Apache CouchDB]] || [[Erlang (programming language)|Erlang]] || [[JSON]] store

Revision as of 09:56, 8 August 2012

In computing, NoSQL (mostly interpreted as "not only SQL"[1]) is a broad class of database management systems identified by its non-adherence to the widely used relational database management system RDBMS model, that is NoSQL databases are not primarily built on tables. The following characteristics are often associated with a NoSQL database:

  • It does not use SQL as its query language
NoSQL database systems rose alongside major internet companies, such as Google, Amazon, and Facebook, which had significantly different challenges in dealing with huge quantities of data that the traditional RDBMS solutions could not cope with (although most of Facebook's infrastructure is based on MySQL databases[2] and so is Twitter's[3]). NoSQL database systems are developed to manage large volumes of data that do not necessarily follow a fixed schema. Data is partitioned among different machines (for performance reasons and size limitations) so JOIN operations are not usable.
  • It may not give full ACID guarantees
Usually only eventual consistency is guaranteed or transactions limited to single data items. This means that given a sufficiently long period of time over which no changes are sent, all updates can be expected to propagate eventually through the system.
  • It has a distributed, fault-tolerant architecture
Several NoSQL systems employ a distributed architecture, with the data held in a redundant manner on several servers. In this way, the system can easily scale out by adding more servers, and failure of a server can be tolerated. This type of database typically scales horizontally and is used for managing big amounts of data, when the performance and real-time nature is more important than consistency (as indexing a large number of documents, serving pages on high-traffic websites, and delivering streaming media).

NoSQL database systems are often highly optimized for retrieve and append operations and often offer little functionality beyond record storage (e.g. key-value stores). The reduced run time flexibility compared to full SQL systems is compensated by significant gains in scalability and performance for certain data models.

In short, NoSQL database management systems are useful when working with a huge quantity of data and the data's nature does not require a relational model for the data structure. The data could be structured, but it is of minimal importance and what really matters is the ability to store and retrieve great quantities of data, and not the relationships between the elements. For example, to store millions of key-value pairs in one or a few associative arrays or to store millions of data records. This is particularly useful for statistical or real-time analyses for growing list of elements (such as Twitter posts or the Internet server logs from a big group of users).

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.[4] (Strozzi suggests that, as the current NoSQL movement "departs from the relational model altogether; it should therefore have been called more appropriately 'NoREL', or something to that effect.")[5]

Eric Evans, 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.[6] The name attempted to label the emergence of a growing number of non-relational, distributed data stores that often did not attempt to provide ACID (atomicity, consistency, isolation, durability) guarantees, which are the key attributes of classic relational database systems.

In 2011, work began on UnQL (Unstructured Query Language), a specification for a query language for NoSQL databases.[7] Like XQuery it is designed to query collections (versus tables) of documents (versus rows) with loosely defined fields (versus columns). UnQL is claimed[by whom?] to be a superset of SQL within which SQL is a very constrained type of UnQL for which the queries always return the same fields (same number, names and types). However, UnQL does not cover the data definition language (DDL) SQL statements like CREATE TABLE or CREATE INDEX.[8]

Taxonomy

Often, NoSQL databases are categorized according to the way they store the data and fall under categories such as key-value stores, BigTable implementations, document store databases, and graph databases. With the rise of the real-time web, there was a need to provide curated information out of large volumes of data which more or less followed similar horizontal structures. As such, NoSQL databases are often highly optimized for retrieve and append operations and often offer little functionality beyond record storage (e.g. key-value stores). The reduced run time flexibility compared to full SQL systems is compensated by significant gains in scalability and performance for certain data models.[citation needed]

NoSQL implementations can be categorized by their manner of implementation:

Document store

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 documents encapsulate and encode data (or information) in some standard formats or encodings. Encodings in use include XML, YAML, JSON, and BSON, as well as binary forms like 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 we could say, for example, that collections are to tables as documents are to records. But there is one big difference: every record in a table has the same number of fields, while documents in a collection could have completely different fields.

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 you to retrieve documents based on their contents.

Name Language Notes
BaseX Java, XQuery XML database
Clusterpoint C++ geared for Full text search
CouchBase (2.0) Erlang,C++ JSON store
Apache CouchDB Erlang JSON store
eXist XQuery XML database
Jackrabbit Java
Lotus Notes and IBM Lotus Domino LotusScript, Java, IBM X Pages, others MultiValue
MarkLogic Server C++ XML database with support for JSON, text, and binaries
MongoDB C++ BSON store (binary format JSON)
OpenLink Virtuoso C++, C#, Java, SPARQL middleware and database engine hybrid
OrientDB Java
SimpleDB Erlang
Terrastore Java

Graph

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, by example.

Name Language Notes
AllegroGraph SPARQL RDF GraphStore
DEX Java, C++ 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
Pregel
Sones GraphDB C#
OWLIM Java, SPARQL 1.1 RDF graph store with reasoning

Key-value store

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.[9][10] The following types exist:

Eventually‐consistent key‐value store

Hierarchical key-value store

Hosted services

Key-value cache in RAM

Key-value stores on solid state or rotating disk

Ordered key-value stores

Multivalue databases

Object database

RDF database

Tabular

Tuple store

See also

References

  1. ^ "NoSQL Definition".
  2. ^ Callaghan, Mark. "MySQL and Database Engineering". Retrieved 7 March 2012.
  3. ^ Cole, Jeremy. "MySQL at Twitter". Retrieved 16 April 2012.
  4. ^ Lith, Adam (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[...] {{cite web}}: Unknown parameter |coauthors= ignored (|author= suggested) (help)
  5. ^ "NoSQL Relational Database Management System: Home Page". Strozzi.it. 2 October 2007. Retrieved 29 March 2010.
  6. ^ "NOSQL 2009". Blog.sym-link.com. 12 May 2009. Retrieved 29 March 2010.
  7. ^ "Home — UnQL Specification — Confluence". Unqlspec.org. 16 August 2011. Retrieved 1 May 2012.
  8. ^ Avram, Abel (04). "Interview: Richard Hipp on UnQL, a New Query Language for Document Databases". http://www.infoq.com. Retrieved 7 September 2011. {{cite web}}: Check date values in: |date= and |year= / |date= mismatch (help); External link in |publisher= (help); Unknown parameter |month= ignored (help)
  9. ^ 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 is usually consisting 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, an array) or an object that is being marshalled by the programming languages bindings to the key value store. This replaces the need for fixed data model and makes the requirement for properly formatted. {{cite web}}: External link in |location= (help)CS1 maint: location (link)
  10. ^ Marc Seeger (21 September 2009). "Key-Value Stores: a practical overview" (PDF). 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 when it comes to storing and accessing data. This paper provides a short overview over some of the currently available key-value stores and their interface to the Ruby programming language. {{cite web}}: External link in |location= (help)CS1 maint: location (link)
  11. ^ "Riak: An Open Source Scalable Data Store". 28 November 2010. Retrieved 28 November 2010.
  12. ^ Tweed, Rob (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é... {{cite web}}: Unknown parameter |coauthors= ignored (|author= suggested) (help); line feed character in |quote= at position 82 (help)