Como elegir una Base de Datos

Últimamente existe un gran zoológico de bases de datos y a veces puede ser hasta complicado elegir cual es la que mejor satisface cada necesidad.

Quiero mostrar una guía de bases de datos para personas que no tienen ni idea de las mismas.

¿Siguen siendo utiles las típicas SQL?

Las bases de datos tradicionales son las SQL, deben su nombre a “Lenguaje de Busquedas Estructurado” aunque con diferencias casi todas las SQL funcionan con ese lenguaje.

Funcionamiento de una Base de Datos SQL

Su funcionamiento es sencillo, son como una tabla Excel, hay columnas con propiedades (una debe ser única la Id) y las demás cualquier dato, números, coma flotante, palabras, fechas… las tablas se pueden relacionar (de ahí su otro nombre Relacionales).

Ejemplo sencillo, queremos hacer una base de datos de clientes y empresa en la que trabajan, las empresas son una tabla de la forma: id, nombre, dirección. Los clientes son id, nombre, apellido, id_empresa.

Primeramente el id de una empresa puede ser un número que va creciendo o podemos usar su CIF, lo mismo en los clientes un número o el NIF.

Un cliente, con nombre y apellido trabaja en la empresa con id = 3. Queremos mostrar un dato de nombre y apellido de una persona y además el nombre de la empresa, pues eso es lo que hacen bien estas bases de datos.

¿cuando elegir una SQL?

Cuando los datos son siempre iguales, es la primera opción y se pueden relacionar muy bien.

Un ejemplo puede ser la toma de datos metereológicos con sondas, una tabla puede ser localizaciones de los datos, nombre ciudad, coordenadas, altitud y otra tiempo (fecha más hora, en un formado llamado UNIX), temperatura, humedad. Los sensores cargan cada cierto tiempo los datos en una tabla de la base de datos, siempre son los mismos datos, las sondas son similares en cualquier lugar. Más adelante se verá para datos variables y se entenderá mejor esto.

Elegir una Base de Datos SQL

Esta tecnolgía es la más antigua por lo cual la que más opciones tiene, de pago está Oracle y SQL Server de Microsoft, MySQL era open source pero ya es propietaría y tiene una sustituta llamada MariaDB totalmente compatible la otra gran SQL open Source es PostgreSQL. Para mí la decisión está entre PostgreSQL y MariaDB.

Bases de datos Documentales

Estas bases de datos buscan en un documento, aquí directamente voy a tratar MongoDB, aunque de forma similar trabaja CouchDB.

Funcionamiento de MongoDB

MongoDB
MongoDB

MongoDB guarda colecciones de datos en formato JSON, ¿y esto qué es? bueno pues es una estructura de datos. El ejemplo anterior de la SQL, en mongo DB sería así:

{ nombre: "nombre",
  apellido: "apellido",
  empresa: {nombre: "nombre de la empresa", dirección: "dirección de la empresa"}
}

Lo primero que se puede ver es… que no existen IDs, esto tiene una ventaja y una desventaja, la ventaja son busquedas más rápidas (luego explico que no del todo) la desventaja mayor espacio en el disco, al meter 100 usuarios de una misma empresa repetimos los datos de la misma, mientras que en una relacional solo los metemos una vez y ahí lo relacionamos con un número, id_empresa.

Ahora puedes pensar, ¿y si mezclo las dos?

{ nombre: "nombre",   apellido: "apellido",   empresa: id_empresa } 

Pero aquí el problema es, que para esto Mongo es más lento que una SQL, si fuera más rápido o igual, las SQL podrían desaparecer, porque tenemos una base de datos que es igual en muchas cosas pero mejor en otras y en nada peor.

¿qué otra ventaja me ofrece? que los datos no estan cerrados, una SQL para añadir un nuevo dato, hay que añadir una columna entera, el ejemplo de los datos meteorológicos, si metemos una nueva sonda que añade la velocidad y dirección del viento tenemos que añadir una nueva tabla. Pero claro esto aumenta el espacio de todas las demás mediciones y que estará a cero.

Espero que pienses, ¿y le meto un Json en una tabla cajón de sastre? aquí no me he metido en profundidad en búsquedas, pero yo puedo hacer una petición SQL de las velocidades de viento entre 10 y 25 km/h en una región o en un determinado dominio de tiempo, pues igual que Mongo no es rápido en esas búsquedas SQL no lo es en estas.

¿Cuando usar MongoDB?

Cuando los datos no están estructurados y son variables, por ejemplo el perfil de datos de una persona. De algunas personas sabemos su perfil psicológico o psiquiátrico, para otras el médico, de otras su datos bancarios o policiales…. y además cada uno de esos datos varia, no es lo mismo un perfil médico de cáncer que de gripe, ni si quiera siendo el mismo cáncer y escrito por dos oncólogos diferentes.

También para datos grandes, MongoDB permite clusterizar, es decir, meter la información en diferentes máquinas y entre ellas ya se buscan la vida para dart la información, se puede replicar completamente o una maquina tener unos datos, otra otros, otra la replicamos… y aquí tambien es mejor que una SQL.

Bases de Datos Gráficas

Una base de datos que me parece apasionate, quizás porque son las más bonitas y de las últimas en salir, son las Gráficas, claramente con un ganador Neo4J. Mencionar que yo asigno ganadores a dedo, pero se podría crear un documento como este para elegir enetre diferentes opciones de bases de datos entre cada tipo.

Base de Datos Neo4J
Base de Datos Neo4J

Funcionamiento de una base de Datos Gráficas

Estas bases de datos funcionan de forma gráfica, hacen relaciones entre los datos ¿como una SQL? si pero diferentes, imagina que quieres hacer el parentesco entre los personajes de Juego de Tronos. En una relacional sería muy complicado.

Primero hay que crear la tabla parentesco, con su id y el nombre (padre, hermano, madre, tio…), la tabla personas, id, nombre persona y otras columnas de datos y por ultimo los propios parentescos, id, id persona 1, id tipo de parentesco, id persona 2.

Sin embargo una base de datos gráfica crea un nodo, que es un personaje y crea un enlace con otro nodo (otro personaje). Los nodos tienen información en JSON, por ejemplo, apellidos, historia, url a una foto.. con las ventajas que supone el JSON de no estar estructurado. Los links tienen tags, puede haber un tag Padre, Madre, hermano, cuñao…

¿Cuando usar una base de datos gráfica?

Pues cuando al estructurar la idea los datos se relacionan en un grafo, como las relaciones entre personajes, una red de ordenadores (esta es ya un gráfico en sí), comunicaciones entre ciudades.

Bases de Datos en memoria

Son bases de datos que se guardan en la memoría RAM, están pensada como bases de datos en cache, el ejemplo más popular es Redis, además es una base de datos clave valor.

Base de datos en memoria
Base de datos en memoria

Un ejemplo que se suele usar mucho es NodeJS + MongoDB y usar Redis como cache, o incluso algunos plugins para WordPress utilizan Redis como caché para mejorar la velocidad de entrega y por tanto el SEO.

En base de tiempo

Las bases de datos basadas en tiempo soy muy usadas para monitorizar equipos. La que más está en auge es Prometheus, pero queiro mencionar tambien Graphie pues se creo un GUI llamado Graphana, que ha ido creciendo y actualmente es una potente herramienta de adquisición de datos y monitorización.

Prometheus
Prometheus

Motores de Búsqueda

Por último nos queda analizar las búsquedas de documentos y textos, podría no considerarse una base de datos en sí, aunque realmente lo es, pues contiene Datos y Consultas.

Sin duda las más conocida aquí es ElasticSeach, además ElasticSearch tiene un Stack preparado para gestión de logs llamado Elk.

Elastic Search
Elastic Search

En este caso es fácil su uso, cuando tenemos documentación que leer y buscar, por ejemplo una bibloteca o un hospital, incluso un estudio arquitectura. Podemos digitalizar los libros y documentos y luego realizar búsquedas.

Summary
Como elegir una Base de Datos
Article Name
Como elegir una Base de Datos
Description
Sistema para elegir una Base de Datos, en función de la naturaleza de los propios datos y como se relacionan entre ellos.
Author
Publisher Name
Drouiz
Publisher Logo

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.