SQL, NoSQL, NewSQL. Què són, història i elecció

Escrit per Jose Manuel Reche Fernandez en 2016-06-22T07:31:34Z

Topics: Full-Stack Development , Cloud-Native Applications

SQL, NoSQL, NewSQL. Què són, història i elecció

En els últims 15 anys, ha canviat de forma dràstica el domini de les bases de dades SQL. Amb l'auge d'Internet i de la IoT (internet of things) s'estan generant grans volums de dades estructurades i no estructurades a velocitats exponencials. Pel que fa a la gestió de les dades, els arquitectes i els desenvolupadors de programari s'han vist en la necessitat de buscar solucions que s'adaptin a diferents criteris per a la consolidació (persistència), anàlisi i explotació de les dades.

Quant als punts que buscaven millorar:

  • Escalabilitat: les bases de dades SQL només podien escalar verticalment, mitjançant millores de maquinari, incrementant la RAM, el processador o la capacitat del disc dur. En disposar d'una única instància, en cas de fallades, no es garantia la disponibilitat del servei.
  • Replicació i partició: les bases de dades SQL no permetien la replicació i el procés de partició de les dades, a fi de garantir l’escalabilitat i millorar els temps de resposta de les consultes.
  • Lliure d'esquemes: les bases de dades SQL no permetien definir diferents esquemes (estructura de dades) per a cada registre d'una mateixa taula, els esquemes eren rígids i qualsevol canvi de disseny implicava un cost elevat, ja que requeria refactoritzar la base de dades i el codi de l'aplicació.

Tot això va comportar l'aparició de nous sistemes de base de dades, la qual cosa ha donat com a resultat tres grans grups de bases de dades:


Bases de dades SQL

Les bases de dades relacionals RDBMS van sorgir en els anys setanta i van ser concebudes per a un domini molt específic, que era la gestió de les dades tabulars, és a dir, dades de formularis de paper i en les quals es poguessin aplicar operacions CRUD (create, read, update, delete). No obstant això, per a alguns sectors o productes específics no s'adaptaven correctament, perquè no disposaven d’escalabilitat, capacitat de replicació i partició, etc. En alguns casos, ho van solucionar prescindint d'algunes característiques en favor d'altres, per exemple: eliminant les constraints, desnormalitzant les dades, desactivant la transaccionalitat per a casos específics de reporting, etc. Tots aquests canvis van donar origen a les bases de dades NoSQL.

D'altra banda, es buscava millorar alguna cosa que curiosament se'ls dóna malament a les RDBMS, que són precisament les relacions, principalment a causa que les consultes en les RDBMS són imperatives, tot i que en el model es defineixin les relacions. Això és un gran desavantatge, ja que en alguns casos fa que les consultes (query) siguin complexes, difícils de mantenir i lentes.

 

Bases de dades NoSQL

L'acrònim NoSQL correspon a la frase "Not only SQL", tot i que originalment era "No SQL". Aquest terme fa referència a qualsevol sistema de gestió de dades que no segueix el model de les RDBMS i que no aplica el llenguatge SQL per realitzar les consultes.

Aquest tipus de bases de dades van començar a originar-se l'any 1998 i no van ser creades per una empresa específica, sinó que van ser concebudes per diferents empreses i grups independents que buscaven solucions específiques als seus problemes. L'auge d'aquest tipus de base de dades es va produir per la necessitat de cobrir les mancances de les RDBMS:

  • Escalabilitat: a fi de cobrir els requisits de demanda de l'aplicació, en les bases de dades NoSQL no és una tasca complicada afegir-hi més nodes o instàncies. Això és possible pel fet que les bases de dades NoSQL estan dissenyades des d'un principi per funcionar en entorns distribuïts.
  • Flexibilitat: està relacionada amb el fet que les bases de dades NoSQL no estan lligades a un esquema predefinit, amb la qual cosa ofereixen molta flexibilitat, ja que faciliten la persistència de dades no estructurades o semiestructurades.
  • Alta disponibilitat: gràcies a l’escalabilitat, es garanteix la continuïtat del servei en cas que s'origini un error de programari o maquinari.
  • Rendiment: per la seva naturalesa distribuïda, fan que el temps de resposta de les consultes sigui molt superior respecte de les RBDMS tradicionals i que es compleixin els requisits de latència i rendiment requerits per l'aplicació.

Tipus de bases de dades NoSQL

Les bases de dades NoSQL es classifiquen en els tipus següents:

  • Key-value (Redis, Aerospike, Riak, etc.): emmagatzemen les dades en una estructura "clau-valor", coneguda com a "diccionari" i els valors de la qual no requereixen un esquema fix. En aquest tipus de base de dades no existeix el concepte de relacions, estan pensades per emmagatzemar informació bàsica i que pugui ser consultada d’una forma molt ràpida.
  • Document oriented (MongoDB, eXist, CouchDB, etc.): emmagatzemen dades de tipus document. Cal destacar que no s'ha de confondre el terme document amb fitxers Excel, Word, etc. El terme document fa referència a una estructura de dades (clau, valor) representada en format XML, JSON o BSON, que pot arribar a tenir una estructura de dades imbricades.
  • Graphs (Neo4j, OrientDB, GraphDB): emmagatzemen les dades en format de grafs, són excel•lents per a la gestió de dades interconnectades i superen el concepte de "relació" de les RDMBS. El seu principal avantatge és que, a diferència de les RDBMS, els grafs persisteixen tal qual (en mode binari) a la base de dades, amb les seves propietats i relacions, amb la qual cosa les consultes són molt més ràpides comparades amb una RDBMS.
  • Column based (Cassandra, ScyllaDB, etc.): emmagatzemen les dades en forma de columnes (famílies), a diferència de les RDBMS, que emmagatzemen les dades en forma de fila. És a dir, cada registre (fila) pot contenir una o més columnes i cada columna pot contenir diferents estructures de dades i a més de forma versionada. Aquest tipus de bases de dades estan pensades per a la consulta de dades de tipus històric (logs, esdeveniments, etc.), amb l'objectiu d'obtenir informació agregada.
NoSQL = Not Only SQL


Bases de dades NewSQL

correspon a un nou (relativament) tipus de base de dades que es considera un nou paradigma de base de dades RDBMS, en el qual s'apliquen les lliçons apreses de les bases de dades NoSQL en el món SQL. Estan pensades, principalment, per a aplicacions que requereixen gestionar una gran quantitat de registres, però amb la consistència que ofereixen les RDBMS i mitjançant el llenguatge SQL. Pel que fa a aquest tipus de bases de dades, hi ha dues variants: les que s'han creat des del principi amb aquest concepte (VoltDB, MemSQL, etc.) i les que s'han adaptat a aquest requisit, com és el cas de MySQL Cluster.

 

SQL, NoSQL, NewSQL, Quina base de dades escollir?

És important destacar que l'aparició de les bases de dades NoSQL i NewSQL no determina la fi de les RDBMS. De fet, el model de dades tabular encara és adequat per a moltes aplicacions. Actualment, les RDBMS segueixen sent les bases de dades més utilitzades.

DB Engines ranking

 Font: db-engines.com 

D'altra banda cal destacar que no hi ha la base de dades perfecta per a totes les aplicacions. El que s'ha de tenir en compte és que s'ha de saber escollir la base de dades que cal implementar en funció dels requisits de cada aplicació.

En alguns casos s'opta per una solució de "persistència poliglota", és a dir, en la qual es pugui aplicar més d'un tipus de base de dades, per a la mateixa aplicació, en funció del millor que aporti cadascuna.

SQL, NoSQL, NewSQL? No hi ha la base de dades perfecta per a totes les aplicacions. Cal saber triar quina implementar en funció dels requisits de cada aplicació.