# NoSQL

Una base de dades NoSQL (sovint interpretat com a Not only SQL i significa 'No només SQL') proporciona un mecanisme per emmagatzemar i recuperar dades que es modelen mitjançant relacions tabulars diferents a les utilitzades en les bases de dades relacionals. Aquest canvi de model està motivat per la simplicitat de disseny, l'escalabilitat horitzontal i un major control de la disponibilitat. Les estructures de dades utilitzades per les bases de dades NoSQL (p. ex. clau-valor, graf i document) difereixen de les relacionals, fet que possibilita que algunes operacions siguin més ràpides en les NoSQL que en les relacionals. L'elecció d'una o altra base de dades NoSQL depèn del problema a solucionar.
L'ús de bases de dades NoSQL ha augmentat notablement en sistemes Big Data i en aplicacions web a temps real. Als sistemes NoSQL se'ls anomena també "No només SQL" per emfatitzar que aquest tipus d'eines poden admetre llenguatges d'interrogació estructurats (SQL). Molts gestors NoSQL comprometen la consistència (en el sentit del teorema CAP) a favor de disponibilitat i la tolerància a la partició. Les reticències principals a adoptar sistemes NoSQL són l'ús de llenguatges d'interrogació de baix nivell, la manca d'interfícies estandarditzades i les grans inversions prèvies fetes en les bases de dades SQL existents. Gran part dels gestors NoSQL no compleixen completament les propietats ACID, i així doncs, no garanteixen transaccions realment fiables, tot i que diversos sistemes recents, com FairCom c-treeACE, Google Spanner (encara que tècnicament és una base de dades NewSQL), FoundationDB i OrientDB, ho compleixen.

## Història

Carlo Strozzi va utilitzar el terme NoSQL per designar el 1998 la seva base de dades relacional, lleugera i de codi obert que no oferia una interfície SQL estàndard. Strozzi suggereix que l'actual moviment NoSQL s'aparta totalment del model relacional i per això hauria estat més apropiat anomenar-lo 'NoREL' (referint-se a "no relacional").
Eric Evans va reintroduir el terme NoSQL a principis de 2009 quan Johan Oskarsson de Last.fm va organitzar un esdeveniment de debat dedicat a les bases de dades distribuïdes de codi obert. El terme provava d'etiqueta l'aparició d'un nombre creixent de bases de dades distribuïdes no relacionals. La majoria dels primers sistemes NoSQL no tenien gaire cura a l'hora de garantir atomicitat, consistència, aïllament i definitivitat (ACID), que era contrari a la pràctica prevalent entre sistemes relacionals.

## Tipus de NoSQL

Hi ha hagut diverses aproximacions per classificar les BD NoSQL, cadascuna amb categories i subcategories diferents. A causa de la varietat de categoritzacions i solapaments és difícil aconseguir i mantenir una visió de conjunt de les bases de dades no relacionals. No obstant això, una classificació bàsica és la basada en el model de dades. El següent llistat són els diferents models de dades seguits d'uns quants exemples de cada categoria:

### Columna

Emmagatzema la informació utilitzant un model orientat en columnes (agrupades en files) en comptes d'un model orientat en files. Això permet que l'accés a les dades, al moment de fer una consulta, sigui més eficient, ja que per a fer-ho únicament serà necesari accedir a la clau de la fila que guardi la informació desitjada. Aquest fet és beneficiós a l'hora d'emmagatzemar dades, ja que es redueix el nombre de recursos que ha d'utilitzar el disc a la vegada que es guarda una gran quantitat d'informació en una sola columna. Per aquesta mateixa raó, és possible fer un gran nombre de consultes en un temps reduït. A més, aquest tipus de base de dades NoSQL ofereix una excel·lent escalabililtat, cosa que fa que es pugui processar informació en paral·lel.
No obstant, dissenyar aquest model consumeix molt de temps en comparació amb el que s'utilitza al relacional. Un altre inconvenient és la vulnerabilitat de la seguretat.
S'utilitza el concepte de 'keyspace' per visualitzar i representar com és tota l’estructura d’emmagatzematge d’aquesta base de dades distribuïda. Conté famílies de columnes (el que equivaldria a taules en el model relacional) que contenen un cert nombre de columnes, on cadascuna és tractada per separat. No és necessari que les columnes d'una fila siguin iguals a les d'una altra, és a dir, que el nom i el tipus de dades poden ser diferents, a l'igual que el nombre d'aquestes. Generalment, sol haver un únic 'keyspace' per aplicació.

#### Apache Accumulo

Accumulo és un magatzem de clau-valor ordenat i distribuït altament escalable basat en Bigtable (sistema de gestió de base de dades) de Google. S'emmagatzema informació en taules multidimensionals on les seves cel·les, en gran part, estan sense utilitzar. A més, aquestes cel·les disposen de versions temporals dels seus valors, fet que permet fer un seguiment dels valors que han près històricament.
Accumulo es un sistema construït sobre Apache Hadoop, Apache ZooKeeper i Apache Thrift.
Escrit en Java, Accumulo té etiquetes d'accés a nivell de cel·la i mecanismes de programació (iteradors) per modificar conjunts clau-valor a diferents punts del procés de tractament d'informció. És considerat el tercer model més utilitzat en la columna NoSQL per darrere de Apache Cassandra i HBase.

#### Apache Cassandra

Cassandra és un sistema d'administració de bases de dades distribuïdes de codi obert dissenyat per manipular grans quantitats de dades en diversos servidors, oferint una alta disponibilitat sense un únic punt de fallada. Cassandra ofereix un suport robust per a 'clusters' que abasteixen diversos centres de dades, amb replicació asíncrona que permet a tots els clients realitzar operacions amb una baixa latència.
Característiques
* Descentralitzat
* Admet la replicació i replicació de múltiples centres de dades
* L'escalabilitat i rendiment aumenten a mesura de que ho faci el nombre de nodes.
* Elecció de la consistència en lectures i escriptures
* Té integrat Apache Hadoop, Apache Pig i Apache Hive.
* Com a llenguatge de consulta té CQL (Cassandra Query Language)

#### Apache Druid

Druid és un magatzem de dades distribuïdes, de codi obert i orientat en columnes escrit en Java. Druid ha estat dissenyat per tractar massives quantitats de dades i proporcionar consultes de baixa latència. L'arquitectura del seu sistema pot canviar per resoldre diferents tipus de problemes. El seu nom es veu reflectit en aquesta característica.
Druid s'utilitza majoritàriament en aplicacions OLAP d'intel·ligència empresarial per analitzar grans volums de dades històriques o en temps real.
Druid és utilitzat en la producció per empreses tecnològiques conegudes com eBay, Netflix, PayPal, Twitter, Walmart i Yahoo.
Característiques
* Sistema escalable distribuït.
* Processament massiu en paral·lel.
* Arquitectura tolerant als errors; no es perdran dades.
* Utilitza índexs per fer un fltratge ràpid.

#### Apache HBase

HBase és un sistema de gestió de bases de dades distribuïdes de codi obert modelada a partir de Google BigTable, escrita en Java i s'executa sobre Hadoop Distributed File System (HDFS).
Característiques
* Tolerant a errors.
* Escalabilitat lineal.
* Es basa en ZooKeeper per una coordinació d'alt rendiment.
* Funciona bé amb Hive. És un motor de consulta pel processament per lots del Big Data.

#### Vertica

Vertica és la plataforma d'anàlisi unificada, basada en una arquitectura massivament escalable amb el conjunt més ampli de funcions analítiques que inclouen sèries temporals i d'esdeveniments, concordança de patrons, aprenentatge automàtic geoespacial i d'extrem a extrem a la base de dades. Permet que el client tingui coneixements ctius de negoci més ràpid que qualsevol magatzem de dades analítiques del mercat. L'emagatzematge es d'objectes es fa al núvol.
Característiques
* Càrrega i consulta de dades en temps real
* Analítica de base de dades avançada
* Informació estructurada i semi-estructurada
* Processament massiu en paral·lel
* Analitza les dades d'Apache Hadoop

### Document

Una base de dades documental està constituïda per un conjunt de programes que emmagatzemen, recuperen i gestionen dades de documents o dades estructurades d'alguna manera. Aquest tipus de bases de dades constitueixen una de les principals subcategories dins de les anomenades bases de dades NoSQL. A diferència de les bases de dades relacionals, aquestes bases de dades estan dissenyades al voltant d'una noció abstracta de "Document".
El concepte central d'una base de dades orientada a documents és el mateix concepte de Document. Mentre cada implementació de base de dades orientada a documents difereix en els detalls, en general totes comparteixen el principi que els documents encapsulen i codifiquen dades o informació seguint algun format estàndard. Entre les codificacions usades actualment es troben XML, YAML i JSON, així com formats binaris com BSON.
Els documents dins una base de dades orientada a documents són similars, d'alguna manera, a registres, tuples o files en una base de dades relacional però menys rígides. No cal ajustar-se a un esquema estàndard ni tenir totes les mateixes seccions, atributs, claus o coses per l'estil.
Tipus: Notes de Lotus, Clusterpoint, apatxe CouchDB, Couchbase, HyperDex, MarkLogic, MongoDB, OrientDB, Qizx

#### Notes de Lotus

Lotus Notes és un sistema client-servidor de col·laboració i correu electrònic, desenvolupat per Lotus Software, una filial d'IBM. La part del servidor rep el nom de Lotus Domino, mentre que el client s'anomena Lotus Notes.
Lotus Domino/ Notes és un sistema de comunicació que permet enviar correu electrònic i gestionar calendaris i agendes. També és una plataforma de col·laboració que permet compartir bases de dades amb informació, com bases documentals, de procediments, manuals o fòrums de discussió. I finalment és una plataforma de coordinació - utilitzant aplicacions Notes amb fluxos de treball. Un exemple en seria qualsevol procés d'una empresa que requereix que un document flueixi entre diverses persones o departaments per a la seva autorització, com ara una sol·licitud de vacances, de bestretes o comptes de despeses, etc. Tot això és susceptible de gestionar-se de forma electrònica mitjançant Lotus Notes.
Característiques
La plataforma IBM Lotus Notes/Domino està integrada per 4 components principals:
* Lotus Domino - servidor
* Lotus Notes - client de correu i col·laboració
* Domino Administrator - client per administrar el servidor Domino
* Domino Designer - ambient integrat de desenvolupament (IDE) per crear aplicacions
* Compatibilitat amb LotusScript, Llenguatge de fórmules, Java, JavaScript, AJAX i XML.

#### Clusterpoint

Clusterpoint és una base de dades de documents lliure d'esquemes que unifica dades estructurades i no estructurades a escala, sense comprometre la necessitat de cercar i consultar ràpidament.
Ofereix un valor excepcional allà on els volums de dades són elevats, moltes d'aquestes dades no està estructurat i moltes d'aquestes dades no estructurades són text.
Les solucions de Clusterpoint s'apliquen a les empreses de la banca, les assegurances i les telecomunicacions i sectors sanitaris; així com a governs i empreses de mitjans.
Característiques
* Les dades es gestionen en format obert, multiplataforma, estàndard de la indústria XML o JSON mitjançant l'API oberta, per exemple, l'API Python o l'API JavaScript Node.js.
* Les dades SQL RDBMS s'utilitzen en combinació amb un motor de cerca empresarial per abordar les necessitats de rendiment i escalabilitat d'aplicacions web i mòbils, o on es poden necessitar eines d'anàlisi i gestió de dades grans.
* Arquitectura de programari de clúster multimaster: no hi ha cap punt de fallada únic, qualsevol node de clúster pot servir com a mestre i executar l'aplicació de gestió
* Escalabilitat horitzontal de la base de dades: s'escala des d'un únic servidor a uns quants milers de servidors connectats en xarxa en una infraestructura de clúster.
* Compatibilitat amb documents XML o JSON, sistemes Linux, FreeBSD, Mac OS X i Windows, i el suport d'idiomes cobreix Java, Python, PHP, C, C++ i ASP.

#### Apatxe Couch DB

Apache CouchDB és una base de dades NoSQL de codi obert orientada a documents, implementada en Erlang.
Característiques
* CouchDB utilitza múltiples formats i protocols per emmagatzemar, transferir i processar les seves dades. Utilitza JSON per emmagatzemar dades, JavaScript com a llenguatge de consulta mitjançant MapReduce i HTTP per a una API.
* Cada base de dades és una col·lecció de documents independents. Cada document manté les seves pròpies dades i un esquema autònom. Una aplicació pot accedir a diverses bases de dades, com una emmagatzemada al telèfon mòbil d'un usuari i una altra en un servidor. Les metadades del document contenen informació de revisió, cosa que permet combinar les diferències que s'hagin pogut produir mentre les bases de dades estaven desconnectades.
* CouchDB implementa una forma de control de concurrència multiversió (MVCC) de manera que no bloqueja el fitxer de base de dades durant les escriptures. Els conflictes es deixen a l'aplicació per resoldre. La resolució d'un conflicte implica, en general, la fusió de dades en un dels documents, i després l'eliminació del document obsolet.
* Altres característiques inclouen semàntica ACID a nivell de document amb consistència eventual, MapReduce (incremental) i replicació (incremental). Una de les característiques distintives de CouchDB és la replicació multi-master, que li permet escalar entre màquines per construir sistemes d'alt rendiment. Una aplicació web integrada anomenada Fauxton (abans Futon) ajuda amb l'administració.
* Compatibilitat amb:
| Component | Descripció | Llicencia |
| Erlang | Erlang és un llenguatge de programació concurrent de propòsit general i un sistema d'execució. El subconjunt seqüencial d'Erlang és un llenguatge funcional amb avaluació estricta, assignació única i mecanografia dinàmica. | Apache 2.0 (Release 18.0 and later) Erlang Public License (Earlier releases) |
| ICU | International Components for Unicode (ICU) és un projecte de codi obert de biblioteques C/C++ i Java madures per al suport Unicode, la internacionalització del programari i la globalització del programari. | Unicode License |
| jQuery | jQuery és una biblioteca de JavaScript lleugera entre navegadors que emfatitza la interacció entre JavaScript i HTML. | MIT License |
| OpenSSL | OpenSSL és una implementació de codi obert dels protocols SSL i TLS. La biblioteca bàsica (escrita en el llenguatge de programació C) implementa les funcions criptogràfiques bàsiques i proporciona diverses funcions d'utilitat. | Apache 1.0 and the four-clause BSD License |
| SpiderMonkey | SpiderMonkey és un motor JavaScript eficient que manté la Fundació Mozilla. Conté un intèrpret, un compilador JIT i un col·lector d'escombraries. | MPL 2.0 |

#### Couchbase

Couchbase Server, conegut originalment com a Membase, és un paquet de programari de bases de dades NoSQL de codi obert i distribuït multimodel, optimitzat per a aplicacions interactives. Aquestes aplicacions poden servir a molts usuaris simultàniament creant, emmagatzemant, recuperant, agregant, manipulant i presentant dades. Per donar suport a aquest tipus de necessitats d'aplicacions, el servidor Couchbase està dissenyat per proporcionar un accés de valor-clau o documents JSON fàcil d'escalar amb una latència baixa i un alt rendiment sostingut. Està dissenyat per agrupar-se des d'una única màquina fins a desplegaments a gran escala que abasten moltes màquines.
Couchbase Server va proporcionar compatibilitat amb el protocol del client amb memcached, però va afegir persistència del disc, replicació de dades, reconfiguració de clúster en directe, reequilibri i multiarrendament amb particions de dades.
Característiques
* Cada node de Couchbase consta d'un servei de dades, un servei d'índex, un servei de consultes i un component de gestor de clúster. A partir de la versió 4.0, els tres serveis es poden distribuir per executar-se en nodes separats del clúster si cal.
* En el llenguatge del teorema CAP d'Eric Brewer, Couchbase és normalment un sistema de tipus CP, el que significa que proporciona coherència i tolerància a les particions, o es pot configurar com un sistema AP amb múltiples clústers.
* El gestor de clúster supervisa la configuració i el comportament de tots els servidors d'un clúster de Couchbase. La rèplica de dades dins dels nodes d'un clúster es pot controlar amb diversos paràmetres.
* El gestor de dades emmagatzema i recupera documents en resposta a les operacions de dades de les aplicacions. Escriu dades de manera asíncrona al disc després de reconèixer-ho al client. El servidor Couchbase té un disseny d'emmagatzematge de cua que és immune a la corrupció de dades, als assassins OOM o a la pèrdua sobtada d'energia.
* Compatibilitat amb sistemes operatius Ubuntu, Debian, Red Hat, SUSE, Oracle Linux, Microsoft Windows i macOS i amb llenguatges de programació .NET, PHP, Ruby, Python, C, Node.js, Java, Go i Scala.

#### HyperDex

HyperDex és una botiga de valors-clau distribuïda, cercable i coherent. Està desenvolupat principalment per Robert Escriva a la Universitat de Cornell. HyperDex proporciona consistència de serialització i tolera un llindar d'errors del servidor. Un altre aspecte destacat és una nova primitiva de cerca que admet la consulta d'atributs secundaris. Les principals tècniques que utilitza HyperDex són el hashing hiperespai i l'encadenament depenent del valor. HyperDex té una extensió comercial anomenada HyperDex Warp, que admet transaccions ACID que involucren diversos objectes. Si no s'especifica, "HyperDex" es refereix a la versió bàsica sense warp.
Característiques
* HyperDex conté tres components: el coordinador, els clients i els servidors d'emmagatzematge.
* El coordinador és responsable de mantenir l'estat del sistema, com ara el mapeig regió-servidor, errors del servidor, el número de versió més recent. Tot i que està lògicament centralitzat, s'implementa com una màquina replicada.
* Els clients envien peticions directament als servidors corresponents.
* Els servidors es despleguen al clúster i cada servidor emmagatzema una dada.
* Tots els missatges s'envien mitjançant TCP.
* HyperDex té una capa d'emmagatzematge incrustable anomenada HyperDisk, que aplica recursivament la tècnica de hash de l'hiperespai a l'emmagatzematge. Una regió assignada a un servidor es divideix a més en subregions que no es superposen i els objectes de cada subregió s'emmagatzemen en un fitxer al disc.
* En quant al tractament de l’emmagatzament, HyperDex considera les taules com a espais euclidians multidimensionals i cada dimensió correspon a un atribut. Un objecte s'assigna a una posició de l'hiperespai fent hash de cada valor d'atribut a una coordenada de l'eix corresponent. A cada servidor se li assigna una regió al mateix hiperespai i s'encarrega d'emmagatzemar les dades que cauen dins de la seva regió.
* Compatibilitat amb llenguatges de programació C. C++ i Python, i enllaços parcials per a Java, Node.JS i Ruby.

#### MarkLogic

MarkLogic Server és una base de dades orientada a documents desenvolupada per MarkLogic. És una base de dades multimodel NoSQL que va evolucionar a partir d'una base de dades XML per emmagatzemar de forma nativa documents JSON i triples RDF, el model de dades per a la semàntica. MarkLogic està dissenyat per ser un centre de dades per a dades operatives i analítiques.
Característiques
* MarkLogic utilitza documents sense esquemes inicials per mantenir un model de dades flexible.
* Utilitza una arquitectura distribuïda i escalable que pot gestionar centenars de milers de milions de documents i centenars de terabytes de dades.
* Ha rebut la certificació de Common Criteria i té una alta disponibilitat i recuperació de desastres.
* Està dissenyat per executar-se a les instal·lacions i en entorns de núvol públics o privats com Amazon Web Services.
* Indexa el contingut i l'estructura dels documents, incloses paraules, frases, relacions i valors en més de 200 idiomes amb tokenització, intercalació i derivació dels idiomes bàsics. La funcionalitat inclou la possibilitat d'activar o desactivar els índexs d'interval, els índexs geoespacials, l'índex triple RDF i els índexs inversos en funció de les vostres dades, els tipus de consultes que executareu i el rendiment desitjat.
* A diferència d'altres bases de dades NoSQL, MarkLogic manté la coherència ACID per a les transaccions.
* Compatibilitat amb JavaScript, XQuery, SPARQL i SQL.

#### MongoDB

MongoDB (de l'anglès humongous i DB Data Base) és un programari de codi obert, per a la creació i gestió de base de dades orientada a documents, escalable, d'alt rendiment i lliure d'esquema programada en C++. La base de dades és orientada a documents. D'aquesta manera gestiona col·leccions de documents similars al format de dades JSON. Això permet que moltes aplicacions puguin gestionar les dades de manera més natural (indexació, consulta), encara que aquestes siguin imbricades en jerarquies complexes. El desenvolupament de MongoDB va començar a l'octubre del 2007 per 10gen (actualment MongoDB Inc.), la primera versió de codi lliure va ser llançada el febrer del 2009. Des de llavors MongoDB ha estat implementada per diverses webs i serveis com ara Craigslist, eBay, Foursquare, SourceForge i el The New York Times, entre d'altres. MongoDB és el sistema de base de dades més popular de tipus NoSQL. A diferència dels sistemes tradicionals de gestió de bases de dades que emmagatzemen dades en taules, MongoDB és un sistema de configuració de bases de dades orientat a documents multiplataforma per emmagatzemar dades.
Característiques
* El nucli de la plataforma de dades per a desenvolupadors és un servei de base de dades multinúvol creat per a la resiliència, l'escala i els nivells més alts de privadesa i seguretat de les dades. Amb MongoDB Atlas, la base de dades és una base de confiança que permet treballar amb dades de manera lliure i fàcilment.
* El model de dades de document semblant a JSON s'assigna als objectes del codi de l'aplicació. La seva flexibilitat permet modelar per a una gran varietat de casos d'ús alhora que permet fer evolucionar fàcilment les estructures de dades.
* L’API de consulta unificada és la forma més natural de treballar amb dades de qualsevol forma. Atlas amplia la flexibilitat i la facilitat d'ús de MongoDB per crear cerca de text complet, anàlisis en temps real i experiències basades en esdeveniments.
* MongoDB es compatible amb les llibreries de C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala i Swift.

#### Qizx

El programari Qualcomm Qizx és una base de dades XML nativa orientada a documents NoSQL que s'utilitza per emmagatzemar, recuperar i manipular fitxers XML, documents i dades semiestructurades. Qizx està preparat per a empreses i s'adapta perfectament per a entorns de flux de treball d'alt volum, alt rendiment i projectes intensius de text on els documents s'han de carregar i indexar ràpidament per a la cerca. Qizx és escalable i demostrat per gestionar dipòsits de dades de diversos terabytes de mida que contenen milions de documents.
Característiques
* La base de dades Qizx es pot configurar per executar-se incrustada en una aplicació, en un entorn client-servidor allotjat o com a servei de programari allotjat a Amazon Web Services.
* La versió client-servidor admet l'agrupació de bases de dades tant per a l'equilibri de càrrega com per a la redundància de dades. Qizx s'inclou amb un client GUI multiplataforma i també es pot accedir mitjançant una API RESTful que inclou documentació en línia incrustada.
* El suport d'ACID Transactions permet transaccions i actualitzacions concurrents; les consultes es completen sense interferir amb les actualitzacions concurrents; les còpies de seguretat es realitzen mentre el motor Qizx està en funcionament; i les modificacions es registren en un diari, permetent la recuperació d'accidents.
* Gràcies a la indexació automàtica, les consultes són ràpides. La definició del tipus de document (DTD) i l'esquema són opcionals. Qizx aprofita l'estructura XML per optimitzar les consultes automàticament.
* Qizx inclou enllaços en Java, Python, C i C#, així com suport natiu per XPath i XQuery. Qizx també ofereix una sèrie d'extensions a l'idioma XQuery per actualitzar documents, accedir a les metadades de documents i altres tasques.

### Clau-valor

Una base de dades de clau-valor, o magatzem de clau-valor, és un paradigma d'emmagatzematge de dades dissenyat per emmagatzemar, recuperar i administrar arranjaments associatius, una estructura de dades més comunament coneguda avui en dia com un diccionari o taula hash. Els diccionaris contenen una col·lecció d'objectes, o registres, que alhora tenen molts camps diferents dins d'ells, cadascun dels quals conté dades. Aquests registres s'emmagatzemen i es recuperen utilitzant una clau que identifica de manera única el registre i s'utilitza per trobar ràpidament les dades dins la base de dades.

#### Dynamo

Dynamo és un conjunt de tècniques que juntes poden formar un sistema d'emmagatzematge estructurat de clau-valor d'alta disponibilitat o un magatzem de dades distribuïdes. Té propietats tant de bases de dades com de taules hash distribuïdes. Dynamo va ser creat per ajudar a abordar alguns problemes d'escalabilitat que va experimentar el lloc web d'Amazon.com.
Característiques:
* Escalabilitat incremental.
* Simetria: cada node a Dynamo ha de tenir el mateix conjunt de responsabilitats que els seus parells.
* Descentralització.
* Heterogeneïtat.

#### Riak

Riak és com un magatzematge de dades de clau-valor NoSQL distribuït que proporciona alta disponibilitat, tolerància a falles, simplicitat operativa i escalabilitat.
Característiques:
* Té implmentat els principis del document Dynamo d'Amazon amb influència del teorema CAP.
* Té replicació de dades tolerant a falles i distribució automàtica de dades a tot el clúster per al rendiment.
* codi obert
* Té un backend connectable per al seu emmagatzematge central
* Riak té controladors oficials per a Ruby, Java, Erlang i Python. També hi ha nombrosos controladors compatibles amb la comunitat per a altres llenguatges de programació.
FairCom c-treeACE
FairCom c-treeACE és un motor de base de dades multimodel, desenvolupat per FairCom Corporation. Els desenvolupadors de programari generalment incorporen el motor c-treeACE dins de les aplicacions que creen i després implementen l'aplicació i el motor junts com una solució integrada.
Característiques:
* Utilitza una estructura de mètode d'accés seqüencial indexat (ISAM) orientada a registres
* Permeten que les dades bloquejades a l'arquiterctura de base de dades heretada estiguin disponibles per a les API modernes
* Alt rendiment
* Baixa latència
* Control accés dades de manera precisa
* Flexibilitat entre les interfícies

#### Aerospike

Aerospike és una solució de base de dades NoSQL de classe empresarial que ofereix un rendiment previsible a escala, un temps de funcionament superior i una alta disponibilitat amb el cost total de propietat (TCO) més baix en comparació amb les bases de dades relacionals o NoSQL de primera generació.
Aerospike es va crear específicament amb una arquitectura altament paral·lelitzada per donar suport a aplicacions en temps real basades en Big Data. Aerospike pot funcionar amb memòria RAM pura, però és el primer que està optimitzat de manera única per utilitzar-lo amb discs durs d'estat sòlid (SSD).
La plataforma de dades en temps real d'Aerospike permet a les organitzacions actuar de manera instantània a través de milers de milions de transaccions alhora que redueix l'empremta del servidor fins a un 80 per cent. La plataforma multinúvol alimenta aplicacions en temps real amb un rendiment previsible de menys de mil·lisegons fins a una escala de petabytes amb dades distribuïdes globalment i molt consistents.
Característiques
* La base de dades Aerospike està modelada sota l'arquitectura de “shared-nothing” i escrita en C. Funciona en tres capes: una capa d'emmagatzematge de dades, una capa de distribució autogestionada i una capa de client conscient del clúster.
* Aerospike utilitza una arquitectura de memòria híbrida: els índexs de la base de dades s'emmagatzemen completament a la memòria principal d'accés aleatori, mentre que les dades s'emmagatzemen en un dispositiu persistent utilitzant la capa de dades.
* La capa de dades emmagatzema les dades a la unitat d'estat sòlid.
* La lectura de les dades es fa mitjançant un accés directe a la posició de registre al disc mitjançant un punter directe de l'índex primari, i les escriptures de dades s'optimitzen mitjançant escriptures de blocs grans per reduir la latència.
* Aerospike també ofereix la possibilitat d'emmagatzemar les dades completament a la memòria RAM actuant així com una base de dades a la memòria.
* Aerospike ofereix transaccions ACID d'un sol registre.
* La capa de distribució és responsable de replicar les dades entre nodes per garantir la durabilitat i les propietats de coherència immediata de la transacció. Això permet que la base de dades es mantingui operativa fins i tot quan falla un node de servidor individual o s'elimina manualment del clúster.
* La capa de client conscient del clúster s'utilitza per fer un seguiment de la configuració del clúster a la base de dades i gestiona les comunicacions directes del client amb tots els nodes del clúster.
* El programari utilitza dos subprogrames que s'anomenen Defragmenter i Evictor.
* El desfragmentador elimina els blocs de dades que s'han suprimit i Evictor allibera espai RAM eliminant les referències als registres caducats.
* Aerospike es compatible amb els llenguatges de programació .Net, C, C#, C++, Erlang, Go, Java, JavaScript (Node.js), Lua, Perl, PHP, Python i Ruby.

#### OrientDB

OrientDB és un sistema de gestió de bases de dades NoSQL de codi obert escrit en Java. És una base de dades que admet models de grafs, documents, clau/valor i objectes, però les relacions es gestionen com a les bases de dades de grafs amb connexions directes entre registres. Admet models sense esquemes, esquemes complets i esquemes mixts. Té un fort sistema de perfils de seguretat basat en usuaris i rols i admet consultes amb Gremlin juntament amb SQL estès. OrientDB utilitza diversos mecanismes d'indexació basats en l'arbre B i el hash extensible. Cada registre té una clau substituta que indica la posició del registre dins de la llista de matrius, els enllaços entre registres s'emmagatzemen com a valor únic de la posició del registre emmagatzemat dins de la referència o com a arbre B de posicions de registre (els anomenats ID de registre o RID) que permet navegació ràpida (amb complexitat O(1)) de relacions d'un a molts i addició/eliminació ràpida de nous enllaços. OrientDB és la cinquena base de dades de grafs més popular segons el rànquing de bases de dades de gràfics de DB-Engines, a desembre de 2021.
El desenvolupament d'OrientDB encara es basa en una comunitat de codi obert liderada per l'empresa OrientDB LTD creada pel seu autor original Luca Garulli. El projecte utilitza GitHub per gestionar les fonts, els col·laboradors i el control de versions, Google Grou i Stack Overflow per oferir suport gratuït als usuaris de tot el món. OrientDB també ofereix un curs Udemy gratuït per a aquells que desitgin aprendre els conceptes bàsics i començar amb OrientDB.
Característiques
* OrientDB es construeix amb un motor de grafs/documents multimodel.
* Sembla primer una base de dades de grafs, però no hi ha cap motiu pel qual la botiga de valors-clau no es pugui utilitzar per si sola. Tot i que OrientDB inclou una capa SQL, el suport per a les vores significa efectivament que aquestes es poden utilitzar per examinar relacions en lloc d'utilitzar una instrucció JOIN.
* OrientDB gestiona tots els registres/documents com a objecte i l'enllaç entre objectes/documents no es fa mitjançant referències, és enllaç directe (desant un punter a l'objecte). Això condueix a la recuperació ràpida de dades relacionades en comparació amb les unions en un RDBMS.
* La configuració amb Java pur permet que s'executi a Linux, OS X, Windows o qualsevol sistema compatible amb JVM.
* OrientDB també es pot implementar al núvol i és compatible amb els proveïdors següents: Amazon Web Services, Microsoft Azure, Cloud Qwest, Jelastic, DigitalOcean.

#### MUMPS

MUMPS ("Massachusetts General Hospital Utility Multi-Programming System"), o M, és una base de dades de valor-clau de processament de transaccions d'alt rendiment amb llenguatge de programació integrat. Va ser desenvolupat originalment a l'Hospital General de Massachusetts per gestionar els sistemes d'informació del laboratori hospitalari.
Des de llavors, la tecnologia MUMPS s'ha expandit com la base de dades predominant per als sistemes d'informació sanitària i els registres electrònics de salut als Estats Units.
Una característica única de la tecnologia MUMPS és el seu llenguatge de base de dades integrat, que permet un accés directe i d'alta velocitat de lectura i escriptura a l'emmagatzematge permanent del disc. Això proporciona una integració estreta d'aplicacions il·limitades dins d'una base de dades única i proporciona un rendiment i una fiabilitat extremadament elevats com a sistema de processament de transaccions en línia.
Característiques:
* MUMPS és un llenguatge pensat i dissenyat per construir aplicacions de bases de dades.
* Es van incloure funcions d'idioma secundari per ajudar els programadors a fer aplicacions utilitzant recursos informàtics mínims.
* Els "programes" individuals s'executen a les "particions" de memòria. Les primeres particions de memòria MUMPS estaven limitades a 2048 bytes, de manera que l'abreviatura agressiva va ajudar molt a la programació múltiple en maquinari molt limitat de recursos, perquè més d'un treball MUMPS podia cabre en les memòries molt petites existents al maquinari en aquell moment.
* La capacitat de proporcionar sistemes multiusuari va ser una altra característica del disseny d'idiomes. Amb el canvi de mini-ordinadors a micro-ordinadors uns anys més tard, fins i tot un "PC d'un sol usuari" amb una única CPU de 8 bits i 16K o 64K de memòria podria suportar diversos usuaris, que es podien connectar des de (no grafs) terminals de visualització de vídeo.
* Com que la memòria era limitada originalment, el disseny del llenguatge per a MUMPS valorava un codi molt concís. Així, cada ordre o nom de funció MUMPS es podria abreujar d'una a tres lletres de longitud.
* Els espais i els marcadors de final de línia són importants a MUMPS perquè l'abast de la línia va promoure el mateix disseny de llenguatge concís.
* Un efecte secundari desafortunat d'això, juntament amb la necessitat inicial d'escriure codi minimalista, va ser que els programadors de MUMPS habitualment no comentaven codi i utilitzaven abreviatures extenses.
* La interacció de la base de dades està integrada de manera transparent a l'idioma.
* El llenguatge MUMPS proporciona una base de dades jeràrquica formada per matrius disperses persistents, que està implícitament "oberta" per a cada aplicació MUMPS amb les característiques d'una base de dades orientada a documents.

### Graf

Una base de dades orientada a grafs representa la informació com a nodes d'un graf i les seves relacions com arestes, de manera que es pugui fer servir teoria de grafs per recórrer la base de dades, ja que aquesta pot descriure atributs dels nodes (entitats) i les arestes (relacions) .
Allegro
AllegroGraph és un triplestore de codi tancat que està dissenyat per emmagatzemar triples RDF, un format estàndard per a dades vinculades. També funciona com a magatzem de documents dissenyat per emmagatzemar, recuperar i gestionar informació orient ada a documents, en format JSON-LD.
Actualment s'utilitza en projectes comercials i en un projecte del Departament de Defensa dels EUA. També és el component d'emmagatzematge per al projecte TwitLogic portant la Web Semàntica a les dades de Twitter.
Característiques:
* AllegroGraph és 100% ACID i admet transaccions: confirmar, revertir i punts de control.
* Té interfícies de client per a Java, Python, Ruby, Perl, C#, Clojure i Common Lisp.
* El producte està disponible per a plataformes Windows, Linux i Mac OS X, i admet 32 o 64 bits.
* Inclou una implementació de Prolog basada en la implementació desenvolupada per Peter Norvig a Paradigms of Artificial Intelligence Programming.

#### Neo4j

Neo4j és un programari lliure de Base de dades orientada a grafs amb un motor persitent "embedding", basat en disc, completament transaccional. Utilitza un graf de propietats etiquetatge per a l'emmagatzematge de les dades. En un graf de propietats etiquetatge, els nodes es representen amb unes etiquetes que permeten classificar els diferents nodes de l'arbre. Tant nodes com relacions es caracteritzen per una sèrie de propietats, en els valors de les quals s'apropa la informació del graf.
Característiques:
* Implementat en Java
* Suporta transaccions ACID
* Possibilitat de definir índexs sobre les propietats dels nodes
* Alta disponibilitat, balanceig de càrrega de lectura.
* Independentment de la mida de la xarxa, la velocitat de les operacions és constant.

#### InfiniteGraph

InfiniteGraph és una base de dades gràfica distribuïda i és adequat per a aplicacions i serveis que resolen problemes de gràfics en entorns operatius.
El llenguatge de consulta "DO" d'InfiniteGraph permet tant consultes basades en valors com consultes de gràfics complexos, per això diem que és una multiplataforma.
Característiques:
* Implementat en Java i C++
* Troba relacions útils en conjunt de moltes dades i complexes
* Escalable
* Rendiment molt alt
* Eficient en tema consultes
* Plataformes usades: Windows i Linux

#### Virtuoso

Virtuós és un motor de base de dades virtual revolucionari, de propera generació i per a l’era de la computació distribuïda. És una tecnologia bàsica d'accés universal a dades establerta per accelerar els nostres avenços cap a l'era de la informació emergent, per tant, la seva infraestructura existent es pot fer servir per donar suport als serveis web directament sense cap indici de reemplaçament.
Característiques:
* Alt rendiment
* ús d'una sola connexió
* Serveis de client que permet fer la connexió: ODBC, JDBC, UDBC, OLE-DB
* Motors d'ús: Oracle, Microsoft SQL Server, DB/2, Informix, Progress, CA-Ingres
* La base de dades la tracta com una sola unitat lógica.

#### StarDog

És una plataforma de gràfics de coneixement escalable i reutilitzable que permet a les empreses unificar totes les seves dades, incloses fonts de dades i bases de dades de tot tipus, per obtenir les respostes necessàries per impulsar les decisions comercials.
Característiques:
* Basada en els estàndars web semàntics W3C: SPARQL, RDF i OWL
* Ús comunitari en sectors acadèmics, sense ànim de lucre i relacionats.
* Àmbit aplicat: àrees de govern, aeroespacial, financera, intel·ligència, defensa i en empreses emergents orientades al consumidor
* Llenguatge aplicat: JAVA
* Els sistemes operatius en els que està implementat el STARDOG, són el Linux, mac OS i Windows

### Multi-Model

Una base de dades Multi-Model és un sistema d'administració de bases de dades dissenyat per admetre múltiples models de dades en un sol backend integrat. Les bases de dades multimodel emmagatzemen, consulten i indexen dades de diferents models.

#### FoundationDB

FoundationDB és una base de dades NoSQL distribuïda multimodel gratuïta i de codi obert desenvolupada per Apple Inc.
Característiques
* Botiga de clau-valor ordenada.
* Les transaccions poden abastar diverses claus emmagatzemades en diverses màquines.
* Garanteix una gran durabilitat mitjançant emmagatzematge redundant al disc abans que les transaccions es considerin compromeses (Propietats ACID)
* Està dissenyat per admetre l'escalat horitzontal mitjançant l'addició de màquines a un clúster alhora que gestiona automàticament la replicació i la partició de dades (Escalabilitat)

#### ArangoDB

ArangoDB és un sistema de bases de dades multimodel gratuït i de codi obert desenvolupat per ArangoDB GmbH. El sistema de base de dades admet tres models de dades (clau/valor, documents, gràfics) amb un nucli de base de dades i un llenguatge de consulta unificat AQL. El llenguatge de consulta és declaratiu i permet la combinació de diferents patrons d'accés a dades en una sola consulta.
La base de dades es va publicar originalment amb el nom d'AvocadoDB al 2011, però es va canviar a ArangoDB el 2012. La paraula "arango" fa referència a una varietat d'alvocat poc coneguda.
Característiques
* Proporciona consultes escalables quan es treballa amb dades de grafs.
* La base de dades utilitza JSON com a format d'emmagatzematge predeterminat.
* Funciona en un clúster distribuït.
* La base de dades té el seu propi AQL (ArangoDB Query Language) i també proporciona GraphQL per escriure serveis web directament a la part superior del SGBD.

#### CortexDB

CortexDB és una base de dades de valors múltiples, bitemporal, orientada a documents, sense esquemes, escrita al llenguatge de programació C++
Característiques
* Esquema d'índex generalista i totalment automàtic en estructura de dades sense esquema.
* Codificació UTF-8 dels conjunts de dades.
* Compatibilitat multiplataforma.
* Consultes ad-hoc: CortexDB permet consultar cada camp en qualsevol moment i combinar-ho amb altres resultats.

### Classificació Stephen Yen

Una classificació més detallada és la formulada per Stephen Yen:
| Terme | BD aparellades |
| Clau-Valor Cache | Coherence, eXtreme Scale, GigaSpaces, GemFire, Hazelcast, Infinispan, JBoss Cache, Memcached, Repcached, Terracotta, Velocity |
| Clau-Valor Store | Flare, Keyspace, RAMCloud, SchemaFree, Hyperdex, Aerospike |
| Clau-Valor Store (eventualment consistent) | DovetailDB, Dynamo, Riak, Dynomite, MotionDb, Voldemort, SubRecord |
| Clau-Valor Store (ordenada) | Actord, FoundationDB, Lightcloud, Luxio, MemcacheDB, NMDB, Scalaris, TokyoTyrant |
| Data-Structures server | Redis |
| Tupla Store | Apache River, Coord, GigaSpaces |
| Object Database | DB4O, Objectivity/DB, Perst, Shoal, ZopeDB, |
| Orientada a documents | Lotus Notes,Clusterpoint, Couchbase, CouchDB, MarkLogic, MongoDB, Qizx, XML-databases |
| Wide Columnar Store | BigTable, Cassandra, Druid, HBase, Hypertable, KAI, KDI, OpenNeptune, Qbase |

## Referències

* ↑ «NoSQL (Not Only SQL)». «NoSQL database, also called Not Only SQL»
* ↑ Fowler, Martin. «NosqlDefinition». «many advocates of NoSQL say that it does not mean a "no" to SQL, rather it means Not Only SQL»
* ↑ «RDBMS dominate the database market, but NoSQL systems are catching up». DB-Engines.com, 21-11-2013. [Consulta: 24 novembre 2013].
* ↑ ; Higashino, W. A.; Tiwari, A.; Capretz, M. A. M.«Data management in cloud environments: NoSQL and NewSQL data stores». JoCCASA, Springer, 2013. [Consulta: 8 gener 2014].
* ↑ Lith, Adam; Mattson, Jakob. «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» p. 70. Göteborg: Department of Computer Science and Engineering, Chalmers University of Technology, 2010. [Consulta: 12 maig 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, 02-10-2007. [Consulta: 29 març 2010].
* ↑ «NoSQL 2009». Blog.sym-link.com, 12-05-2009. Arxivat de l'original el 16 de juliol 2011. [Consulta: 29 març 2010].
* ↑ Chapple, Mike. «The ACID Model». Arxivat de l'original el 2016-12-29. [Consulta: 7 juny 2015].
* ↑ «Column-Oriented Databases, Explained» (en anglès americà). [Consulta: 19 juny 2022].
* ↑ «Apache Accumulo». [Consulta: 20 juny 2022].
* ↑ «Welcome to Apache Pig!». [Consulta: 20 juny 2022].
* ↑ «Introduction to Apache Druid · Apache Druid» (en anglès). [Consulta: 20 juny 2022].
* ↑ «What is HDFS? Hadoop Distributed File System overview» (en anglès). [Consulta: 20 juny 2022].
* ↑ «Apache ZooKeeper». [Consulta: 20 juny 2022].
* ↑ «Apache Hive: Introducción al Data Warehouse» (en castellà), 02-03-2020. [Consulta: 20 juny 2022].
* ↑ «Vertica. Powering the World’s Data-Driven Leaders.» (en anglès americà). [Consulta: 21 juny 2022].
* ↑ Gutierrez, Daniel. «Clusterpoint Launches Cloud-based Database-As-A-Service Offering» (en anglès americà), 29-06-2015. [Consulta: 20 juny 2022].
* ↑ «siets».
* ↑ Gutierrez, Daniel. «Clusterpoint Launches Cloud-based Database-As-A-Service Offering» (en anglès americà), 29-06-2015. [Consulta: 21 juny 2022].
* ↑ «siets.net».
* ↑ «Couchbase: The Modern Database for Enterprise Applications». [Consulta: 20 juny 2022].
* ↑ «Database of Databases — HyperDex» (en anglès). [Consulta: 20 juny 2022].
* ↑ «MarkLogic Server - Multi-Model Database» (en anglès americà). [Consulta: 20 juny 2022].
* ↑ «MongoDB Atlas | Multi-cloud Developer Data Platform» (en anglès americà). [Consulta: 20 juny 2022].
* ↑ «AWS Marketplace: Qualcomm Qizx» (en anglès). [Consulta: 20 juny 2022].
* ↑ «C-treeACE» (en anglès). [Consulta: 25 juny 2022].
* ↑ «Aerospike System Properties». [Consulta: 20 juny 2022].
* ↑ «Aerospike Announces Aerospike SQL Powered by Starburst» (en anglès americà), 15-06-2022. [Consulta: 20 juny 2022].
* ↑ «Home · OrientDB Manual». [Consulta: 20 juny 2022].
* ↑ «Database of Databases — OrientDB» (en anglès). [Consulta: 20 juny 2022].
* ↑ src="https://secure.gravatar.com/avatar/bd74edaf8b7108a2a2ae11cf922b6c39?s=20, <img class="photo" alt="WilliamVorhies"; #038;d=mm; WilliamVorhies, #038;r=g" />. «MUMPS – The Most Important Database You (Probably) Never Heard Of - DataScienceCentral.com» (en anglès americà), 28-01-2016. [Consulta: 20 juny 2022].
* ↑ «Mumps Programming Language». [Consulta: 20 juny 2022].
* ↑ «1.1.What is Virtuoso?». [Consulta: 25 juny 2022].
* ↑ Guess, A. R. «New Release of Stardog NoSQL Database» (en anglès americà), 20-07-2012. Arxivat de l'original el 2023-06-16. [Consulta: 25 juny 2022].
* ↑ Yen, Stephen. «NoSQL is a Horseless Carriage» (PDF). NorthScale. [Consulta: 26 juny 2014].