Una breve introducción por el reino de NoSQL

Hace unos días junto a mis compañeros (Nelly Yacoub, Jorge Gavidia, Albert Alapont, Javier Salvador, Xavier Méndez, Enle Lin) terminamos una auditoría de base de datos para un cliente. Uno de los motores de bases de datos a estudiar fue Datastore. Este sistema cuenta con grandes ventajas que vamos a compartir en este post. 

Muchos de nosotros hemos crecido viendo cómo las bases de datos relacionales han dominado el mercado. Ya sea en la universidad o en el trabajo, hemos modelado bases de datos utilizando herramientas como el modelo entidad-relación, hemos manipulado bases de datos con SQL para realizar consultas que van desde un simple select hasta una consulta diabólica donde los joins son los protagonistas.

Entonces… ¿cómo te quedas si te digo que para este post te olvides de las relaciones entre tablas, los esquemas rígidos y, sobre todo, que dejes de lado el entrañable lenguaje SQL? Con esta pregunta acabamos de ver las características de un sistema NoSQL, pero si no has oído hablar de este término aquí va un pequeño resumen sin entrar detalles de lo que son las bases de datos NoSQL.
 

Not only SQL

NoSQL (not only SQL) es el término que se utiliza para agrupar las bases de datos que no siguen el paradigma relacional. En otras palabras, aquellas bases de datos que no utilizan ni foreign keys  ni  joins para relacionar tablas. Estas bases de datos son populares por su gran escalabilidad y rendimiento. Sin embargo, como contrapartida carecen de una fuerte consistencia. Dependiendo de cómo se organizan los datos en un sistema NoSQL, podemos encontrar cuatro grupos o tipos: clave-valor, columnar, documental y graph.

Las clave-valor se caracterizan por su sencillez, almacenando los datos (como su nombre indica) en pares identificador y valor, como si de un diccionario se tratara. Dentro este grupo podemos encontrar los motores Redis y Bigtable.

Por otro lado, las columnares van un paso más allá que las clave-valor, ya que agrupan los datos también en pares, pero con la ventaja de poder unir columnas, obteniendo así un resultado parecido a filas en una tabla. Podemos mencionar a Cassandra y HBase como sistemas columnares.

En cuanto a las documentales, estas se caracterizan por almacenar los datos en ficheros con un formato de texto simple, como por ejemplo XML o JSON. No cuentan con un esquema fijo, pudiendo tener documentos distintos para a un mismo concepto, por ejemplo un documento con datos diferentes para cada usuario. Podemos encontrar a  MongoDB y Datastore como integrantes de este tipo de base de datos.

Finalmente, los graphscomo su nombre indica, representan los datos como grafos donde las entidades son los nodos y las relaciones las aristas. Este tipo de base de datos cuenta con un alto rendimiento para grandes volúmenes de datos. Un ejemplo de motor es Neo4j.
 

Datastore: el ojito derecho de Google

Datastore es una apuesta de Google en el terreno de las bases de datos NoSQL. Este sistema es del tipo documental, el cual se caracteriza por su gran escalabilidad y disponibilidad. Esta base de datos es totalmente gestionada, o lo que es lo mismo, nos permite olvidarnos de todo lo relacionado con la infraestructura, pudiendo centrar así nuestras energías en la creación y manipulación de la base de datos.

 

Objetos en Datastore

Cuando hablamos de los objetos con los que se trabaja en Datastore, podemos listar los siguientes:

  • Espacio de nombre. Es la agrupación de los objetos de la base de datos.

  • Tipos. Se utilizan para agrupar documentos, como por ejemplo factura, producto, etc. Podemos decir que son las tablas en una base de datos relacional.

  • Entidades y propiedades. Siguiendo con la analogía de una base de datos relacional, estos vendrían a ser las filas y columnas.

  • Índices. Cumplen con la misma función tanto para Datastore como para una base de datos relacional.

 

Modelo de datos

Datastore no cuenta con un esquema fijo ni con relaciones entre tablas, siendo estos factores a tener muy cuenta a la hora de modelar nuestro negocio. Datastore dispone de dos formas de agrupar los datos: ancestor paths y entity groups.

Ancestor paths

Permite realizar una jerarquía entre entidades, similar a un directorio en un sistema de ficheros. De esta forma una entidad puede tener una relación padre-hijo con otra entidad, organizando mejor los datos.

Se pueden construir árboles de entidades, donde aquellas entidades que no tengan ancestros serán entidades raíz. La key que identificará una entidad no raíz será una secuencia de pares entre la key de sus padres y la suya propia.

La imagen es un ejemplo de una jerarquía utilizando ancestor path. La entidad Abuelo hace de root entity, mientras que la entidad Yo tendrá como ancestros las entidades Padre y Abuelo.

Entity groups

Este tipo de relación tiene como objetivo agrupar varias entidades, teniendo una única entidad como padre. Se utiliza para datos altamente relacionadas, facilitando así su recuperación.

En la imagen se puede ver la relación entre factura y líneas de facturas, clientes y trabajadores. Estas últimas tendrán como identificador su key más la de la factura.
 

Plataforma de gestión

Como se ha mencionado, Datastore es autogestionada por Google, contando con un dashboard para manipular y consultar nuestra base de datos. Este dashboard se divide en cuatro secciones:

Entidades

Empezando por la pestaña de Entidades, se puede consultar mediante la interfaz o por consola: los espacios de nombres, tipos, entidades. Además se puede aplicar varios filtros para acotar las búsquedas.
 

Panel de control

En la pestaña del panel de control se nos muestran estadísticas del estado de nuestra base de datos, el tamaño de los datos, índices, etc. Este panel se actualiza cada 24 a 48.
 

Índices

En el apartado de Índices se puede consultar el estado de los índices compuestos. Estos tienen como objetivo mejorar el rendimiento, aplicar filtros y ordenar los datos. Estos índices se tienen que crear por consola o a través de alguna de las librerías existentes.
 

Administración

Por último, tenemos la pestaña de Administración con varias opciones:

  • Abrir Datastore Admi, donde podemos consultar el estado general de nuestra base de datos.

  • Realizar importaciones y exportaciones de backups.

  • Eliminar todas la entidades de un tipo.

  • Inhabilitar Datastore Admin y la escritura de la BBDD.

 

Limitaciones

Datastore dispone de varias limitaciones que dependen de si las transacciones se realizan desde la API de Datastore o alguna de las librerías externas. En la siguiente tabla se detallan las  limitaciones más significativas:

 

Límites

     Cantidad

Tamaño máximo de una petición.

100 MiB

Tamaño máximo por transacción.

10 MiB

Tamaño máximo por entidad.

1MiB

Número máximo de entidades a las que se puede acceder en un entity group por transacción.

25

Máximo número de entidades que se pueden manipular en una operación de commit en Cloud Datastore API.

500

Número máximo de keys que se pueden consultar en una operación de consulta en Cloud Datastore API.

1000

Tamaño máximo de una Propiedad índice de tipo string codificado en UTF-8.

1,5 MiB

Tamaño máximo para una propiedad no indexada.

1 MiB

Número máximo de índices compuestos por proyecto.

200

Número máximo de exportaciones concurrentes.

50

 

¿Aplicaremos algún día una base de datos Datastore en algún proyecto?

Después de realizar la auditoría, hemo visto las ventajas así como los puntos débiles de Datastore. Por lo tanto, podemos afirmar que Datastore es un sistema con mucho potencial, su alto grado de disponibilidad y escalabilidad hace que sea una opción atractiva para aplicaciones de análisis de datos, donde el cambio de esquema y la redundancia de datos estén a la orden del día. 

Sin embargo, Datastore cuenta con varias limitaciones que hay que tener en cuenta. La falta de consistencia hace de Datastore una opción poco viable, por ejemplo, en aplicaciones de banca. Además, al contar con un lenguaje poco maduro la manipulación de la base de datos dependerá en gran medida de la librería que se utilice.

Esta experiencia nos ha ayudado a ampliar nuestra visión sobre las base de datos y el gran potencial que hay detrás. Esperamos haber transmitido un poquito de lo que hemos visto durante nuestro pequeño viaje por Datastore.

Foto de cabecera: Timothy Paul Smith / Unsplash
Bases de datos,empresa,NoSQL,Open,tecnologia,