Bases de datos NoSQL y sus Tipos

29 Mar, 2017

edgar4

Realizado por nuestra SmartB Rut Almoguera

Querido lector, si aún no sabes que significa el término NoSQL cuando se hablan de bases de datos (BDs) este artículo es para que tengas una primera aproximación a este concepto.

El término NoSQL y son las siglas de “Not Only SQL, No solo SQL en español”, y en él se engloban varias tecnologías de BDs no relacionales.

Las BDs NoSQL surgieron como almacenamientos alternativos a los sistemas de gestión de bases de datos relacionales (RDBMS), pues estas no podían superar todos los desafíos que implica trabajar con Big Data.

Estas BDs nacieron para dar respuestas a casos de uso específicos de Big Data, y es importante aclarar que las mismas NO sustituyen a RDBMS, sino que se usan en otros escenarios en donde tienen un mejor performance que las BDs relacionales.

A pesar de que existen diferentes tipos de BDs NoSQL, todas tienen en común que NO son relacionales, ni utilizan el lenguaje de consultas SQL.  Además de esto casi todas nacieron en la comunidad OpenSource. Existen 4 grandes grupos o tipos de BDs NoSQL:

.- Key-Value.

.- Document.

.- BigTable/Cloumn-Oriented/Cloumn-Family.

.- Graph.

Key Value:

Las BDs Key-Value  guardan la información como pares de valores, en donde hay una clave, y un valor. El valor puede ser tan complejo como se quiera y es una “caja negra”, es decir, no se pueden hacer consultas filtrando por lo que este en esa parte, todas las consultas que se pueden realizar son filtrando los valores de la clave o Key.

Este tipo de BDs tienen un alto rendimiento realizando operaciones CRUD (Create, Read, Update, Delete, o Creación, Lectura, Actualización y Borrado en español).  Pero con consultas que requieren hacer interconexiones de la data (JOINs) tienen un desempeño pobre.

Las Key Value garantizan la atomicidad a nivel de una Clave o Key, es decir las operaciones que se realizan sobre un Key específico son atómicas.

Una de sus ventajas es que son escalables horizontalmente, para mejorar el performance o para manejar más cantidad de datos, se pueden agregar más computadoras de bajo costo a la configuración, pues es una BD distribuida.  Esto contrasta con el escalamiento vertical, el cual consiste en mejorar el hardware en donde se encuentra instalada la DB y que por lo general es costoso.

Algunos casos de uso en donde las BDs de Key-Value pueden ser usadas son:

.- Información de sesión para aplicaciones Web.

.- Perfiles y preferencias de usuarios.

.- Carrito de compras para mercados/tiendas on-line.

Un caso en donde las BDs de Key-Value tienen su peor desempeño, y en donde es recomendable NO usarlas es cuando la data esta interconectada con gran cantidad de relaciones como por ejemplo redes sociales.  En este caso tienen un desempeño muy pobre.

Document:

Estas BDs guardan los datos en documentos individuales.  Por lo general estos documentos son guardados en formatos conocidos como XML o JSON, ente otros. Son auto descriptivos y tienen estructuras jerárquicas.  Además son similares a las BDs de Key-Value, solo que en este caso se pueden hacer consultas sobre los valores de todos los datos que contienen.

En este tipo de BD se utiliza el paradigma Map-Reduce para hacer indexing y análisis.

Las operaciones son atómicas a nivel de documento y son escalables horizontalmente. Algunos casos de uso para este tipo de BDs:

.- Event logging.

.- Blogs y otras aplicaciones Web.

.- Data Operacional y Metadata de aplicaciones Web y Mobile.

Este tipo de BDs tienen su peor performance, y por lo tanto no se deben utilizar cuando se requiere que haya consistencia en operaciones que involucran a multiples documentos. Tampoco se deben usar cuando la data se encuentra naturalmente normalizada, con muchas relaciones entre los datos

BigTable/Cloumn-Oriented/Cloumn-Family:

Este tipo de BDs contiene muchas filas y columnas con una clave por cada fila.  Las columnas se encuentran agrupadas en familias, y cada familia es tratada como una tabla, pues todas las columnas de una familia son guardadas juntas.

Las filas en cada familia de columnas no requieren tener las mismas columnas, por lo que las columnas pueden ser agregadas a una sola fila o a todas las filas de la familia de columnas.

La atomicidad de las operaciones se garantiza solo a nivel de una fila. Algunos casos de uso en los que se pueden usar este tipo de BDs son:

.- Event Logging.

.- Blogs.

.- Counters.

.- Expiración de uso de data (TTL por columna o “Time To Live”).

Este tipo de BDs tienen su peor performance cuando se necesita que las operaciones de lectura y escritura sean ACID (Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español).

Graph Database:

Este tipo de BDs guardan la data como entidades y relaciones entre las entidades.  Las entidades son llamadas NODOS y las relaciones son los lados que unen los NODOS en una representación gráfica de los datos; adicionalmente están más orientadas a las relaciones que a las agregaciones, dado esto atravesar la BD usando las relaciones entre los nodos es rápido y eficiente.

Este tipo de BD escala verticalmente, a diferencia de los otros tipos de BDs NoSQL y BD garantizan operaciones ACID. Algunos casos de uso en los que se pueden usar este tipo de BDs son:

.- Data altamente interconectada como por ejemplo data de redes sociales.

.- Aplicaciones de “Routing” o de ubicación espacial.

Las Graph Database tienen su peor desempeño cuando existen muchas actualizaciones de la data de los nodos.  Tampoco se deben usar en aplicaciones que necesiten crecer demasiado en tamaño y requieran escalar horizontalmente.

Así que querido lector, espero que esto te haya servido para aclarar el término, y a conocer los tipos de NoSQL BDs que existen en el mercado.