Buzzword - NoSQL

NoSQL Tecnologia


NoSQL és un terme genèric que s’usa per referir-se a un emmagatzematge de dades que no segueix el model relacional, el model usat tradicionalment. 


No es tracta doncs d’una base de dades, ni d’un tipus de base de dades. És una tecnologia que agrupa un conjunt de bases de dades de diferents tipus que treballen de manera diferent al model tradicional de bases de dades.





Dins d’aquesta tecnologia s’engloben un munt de bases de dades diferents amb característiques i funcionalitats molt diferents. Totes les bases de dades englobades dins d’aquest grup segueixen, entre d’altres,  les següents característiques:


  • No tenen un esquema rígid. ( schema-free )
  • Replicació senzilla
  • Accés a les dades per API, no per SQL.
  • Consistència eventual.


Les bases de dades relacionals es basen en el que s’anomena un model ACID, atomicitat, consistència, aïllament ( isolation ), durabilitat.

  • Atomicitat: Una transacció es realitza completa, sempre.
  • Consistència: Una transacció no pot deixar la base de dades en un estat inconsistent.
  • Aïllament: Una transacció no pot interferir amb una altra.
  • Durabilitat: Una transacció finalitzada té persistència en el temps.


Per contra una base de dades NoSQL en general es centra en un model anomenat BASE, disponibilitat bàsica, estat volàtil i consistència a llarg termini. ( Basic Availability, Soft state, Eventual consistency )

  • Disponibilitat Bàsica: Totes les peticions tenen una resposta, aquesta resposta pot ser d’execució satisfactòria o fallida.
  • Estat Volàtil: L’estat del sistema pot canviar amb el temps, fins i tot sense l’existència de cap entrada al sistema per preservar la consistència a llarg termini.
  • Consistència a llarg termini: La base de dades pot ser inconsiten en moments puntuals però a llarg termini serà consistent.


Dins de la tecnologia NoSQL  existeixen diferents classificacions segons diferents criteris. En general, acostumen a agrupar-se segons el model de dades que usen, es a dir com s’organitzen les dades a nivell intern. Així tenim bases de dades:


  • Orientades a document: Són bases de dades que emmagatzemen objectes ( o documents ), considerant que cada objecte conté dades semi-estructurades al seu interior.
  • Clau-valor: Tots els elements de la base de dades es formen a parir d’una parella clau, valor.
  • Columnes: Enlloc de treballar amb files, com les bases de dades tradicionals s’orienten a columnes.
  • Graphs: S'usen per emmagatzemar informació interrelacionada entre si.
  • Multitipus: Poden emmagatzemar dades seguint els tipus anteriors indistintament.



Un altre mètode de classificació es basa en el Teorema de CAP. Aquest teorema indica que les bases de dades, totes les NoSQL i les relacionals, només poden complir 2 del les següents 3 característiques:

  • Consistència: Tots els nodes veuen la mateixa informació al mateix temps
  • Disponibilitat: Garanteix que totes les peticions reben resposta, de l’èxit o de l’error.
  • Tolerància a les particions: El sistema continua funcionant fins i tot amb pèrdues de missatges o en fallades de parts del sistema.
     


Amb el descrit fins aquest punt, ja n’hi ha prou per tenir una idea més o menys clara de la tecnologia de la qual estem parlant ( o haurien d’estar parlant ) quan parlem de bases de dades NoSQL. Anem a veure algunes coses que es diuen o es pensen quan parlem d’aquest tipus de bases de dades.


Les bases de dades NoSQL són el futur.


No té perquè ser cert ara mateix. Hi ha moltíssimes bases de dades de tipus NoSQL, però cadascuna d’elles té els seus punts forts i els seus punts febles. Igual que les bases de dades tradicionals (RDBMS). Cal veure quines necessitats es tenen i usar la tecnologia que millor cobreixi aquestes necessitats. L’existència de bases de dades NoSQL no fa obsoletes la resta de tecnologies, ni tan sols les tecnologies dins del grup NoSQL, simplement obre el ventall de possibilitats tècniques a l’hora de triar.


Bigdata i NoSQL és el mateix.


Completament fals!!! BigData mereixerà un post apart, però no cal confondre el fet que les tecnologies NoSQL permeten emmagatzemar quantitats molt elevades d’informació amb BigData. El cert és que BigData es basa en l’anàlisi de quantitats molt grans d’informació i per tant necessita tecnologies que tinguin aquesta capacitat (entre d’altres coses)  i NoSQL ho permet. Per altra banda es poden realitzar anàlisis amb metodologia BigData sobre bases de dades relacionals.


NoSQL permet escalar indefinidament i millor que RDBMS.


NoSQL està pensat per poder escalar horitzontalment de manera senzilla, però compte escalar indefinidament no és possible. Tots els sistemes tenen les seves limitacions tecnologiques i cal ser-ne conscient. A més a més cal tenir en compte que donat que NoSQL representa un conjunt de diferents tipus i implementacions de bases de dades, cadascuna tindrà les seves limitacions.
També cal tenir en compte que a vegades el problema no està en l’escalabilitat si no en l’ús que es fa de la tecnologia i ens podem trobar amb casos d’infraestructures vàlides que usades de manera incorrecte no rendeixen adequadament. 
Estan apareixent bases de dades relacionals o complements per aquestes que permeten escalar de manera senzilla i mantenint les característiques d'aquest tipus de base de dades. És el que s'està anomenant tecnologia NewSQL. ( Serà una altra buzzword per un post??)



El rendiment de NoSQL és superior


El rendiment de quina base de dades NoSQL és superior??? Estem parlant d’un grup de sistemes de base de dades que fins i tot entre ells tenen característiques molt diferents. Podem parlar de rendiment comparat entre elles? Podem comparar rendiments entre aquetes i les bases de dades RDBMS? Són tecnologies molt diferents i per tant es comporten de manera diferent, les comparacions no treuen cap a res. Podem comparar sistemes NoSQL que comparteixen característiques similars ( tot i que és difícil que siguin iguals ) i afegir aquesta comparació com un altre punt de la decisió. Però no ens podem basar en el rendiment com a criteri de decisió.
Algunes de les comparatives de rendiment que es fan serien equivalents a proves de velocitat de vehicles: “L’avió és 700 vegades més ràpid que la bicicleta!!!!!!!”


NoSQL no utilitza esquema, això el fa més flexible i emmagatzemar qualsevol cosa.


Aquesta frase suposo que ve d’una de les característiques de les bases de dades NoSQL, schema-less. Primer cal tornar a recordar que NoSQL representa un grup de bases de dades amb característiques diferents. Per una banda, per exemple una base de dades de tipus clau-valor, no té esquema, però no té sentit que en tingui doncs només emmagatzema claus i valors.
Per a d’altres bases de dades NoSQL no és correcte dir que no tenen esquema si no, que no usen un esquema rígid. Això vol dir que hi ha un esquema, però aquest no obliga a les dades que hi ha dins i es pot canviar de manera més o menys senzilla. El fet que l’esquema no sigui rígid, fa que sigui l’aplicació qui hagi de fer les tasques de gestió del contingut. Per exemple si jo tinc un camp que pot ser un array o un valor, l’aplicació haurà de ser capaç de gestionar ambdues possibilitats.


Links interessants:




Llibre interessant:


Getting Started with NoSQL, Gaurav Vaish , Packt Publishing, 2013
ISBN 978-1-84969-4-988


Comentaris