Cuando comienzas un nuevo proyecto, es importante entender los criterios para elegir bases de datos y qué soluciones existen.
Hay muchas familias de bases de datos que difieren en la estructura de almacenamiento, procesamiento e indexación de datos. El mejor modelo depende de los escenarios de uso. A veces es útil usar varias bases de datos, copiando los mismos datos varias veces.
Criterios importantes para elegir una base de datos:
- Qué datos almacenar.
- Volumen de datos.
- Tipos de consultas.
Bases de datos relacionales (SQL)
Las bases de datos relacionales son las más comunes. Ejemplos populares: Oracle, Microsoft SQL Server, PostgreSQL, MySQL. Almacenan datos en filas dentro de tablas, con una estructura de datos estricta. Se asume que cada consulta recupera un número relativamente pequeño de registros.
Funcionan bien si el volumen de datos no excede varios terabytes (con la infraestructura adecuada), lo que las hace aptas para la mayoría de los proyectos, especialmente al principio.
Elige bases de datos relacionales si necesitas:
- Transaccionalidad.
- Cambios frecuentes en los datos.
- Búsqueda por índices.
- Consultas de pocos registros a la vez.
- Volumen de datos menor a varios terabytes.
La elección de una base de datos relacional específica depende de requisitos de seguridad, soporte y otros factores. Por ejemplo, en banca se prefiere Oracle y Microsoft SQL Server (de pago), pero PostgreSQL (abierta y gratuita) ofrece buen rendimiento y se desarrolla activamente. Para proyectos pequeños, cualquier base de datos relacional sirve.
Bases de datos NoSQL
Alternativa a las bases de datos relacionales. Pueden ser bases de datos orientadas a documentos, bases de datos gráficas o almacenes clave-valor.
Bases de datos orientadas a documentos
Las bases de datos orientadas a documentos (como MongoDB, Amazon DocumentDB, CouchDB y otras) almacenan los datos en forma de «documentos» ya preparados, en lugar de tablas y filas, como lo hacen las bases de datos relacionales. Este método de almacenamiento es adecuado cuando la estructura de los datos puede cambiar o cuando tus principales casos de uso implican la carga de una estructura compuesta. Las bases de datos orientadas a documentos están muy cerca del formato de los recursos que intercambian el cliente y el servidor, lo que facilita la preparación de datos para la transmisión en la red.
En artículos y libros, a menudo se utiliza como ejemplo típico de estas bases de datos el caso de cargar la página de un usuario en una red social. En este escenario, una persona tiene datos básicos, como nombre completo, fecha de nacimiento, género, y datos adicionales que pueden incluir varios elementos y requerir estructuras diferentes, como lugares de estudio, residencia o trabajo.
Como se sabe, una persona puede tener varios lugares de estudio o residencia, y las direcciones en diferentes países pueden componerse de distintas entidades. En España, por ejemplo, la estructura es: región → ciudad → calle → casa; mientras que en Francia es: provincia → región → ciudad → calle → casa. Sí, estas estructuras también pueden implementarse en bases de datos relacionales, pero en ese caso sería necesario realizar varias consultas adicionales para recopilar toda la información de una persona y renderizar su página.
Las bases de datos orientadas a documentos permiten almacenar dicha información del usuario en su totalidad, en un solo lugar, y recuperarla con una única consulta.
Además, estas bases de datos admiten el uso de referencias a otros registros dentro de la base de datos, lo que permite acercarse al modelo relacional. Por cierto, los modelos relacionales también están avanzando hacia el soporte de estructuras de datos compuestas, como JSON, y permiten realizar búsquedas dentro de campos «complejos» o compuestos.
Por lo tanto, la principal ventaja de las bases de datos orientadas a documentos es la posibilidad de almacenar datos sin una estricta limitación de estructura.
Almacenes clave-valor
Los almacenes clave-valor (Redis, Aerospike, DynamoDB y otros) almacenan datos en forma de tablas hash. En este modelo, cada registro tiene solo un índice. Al mismo tiempo, no existe una restricción estricta sobre la estructura del valor. Por lo general, estas bases de datos modifican los datos siguiendo el principio de logs, es decir, siempre añaden los valores al final, y la eliminación se realiza mediante el agregado de un registro especial. Los almacenes clave-valor son ideales como cachés, colas o para registro de logs.
Bases de datos gráficas
Las bases de datos de grafos almacenan toda la información en forma de nodos y relaciones entre ellos. Este enfoque puede acelerar las consultas en ciertos casos y se utiliza en motores de recomendación y aplicaciones relacionadas con geolocalización. Por lo tanto, si estás desarrollando una aplicación de este tipo, puede que debas considerar el uso de bases de datos de grafos. Sin embargo, hay que admitir que son soluciones muy específicas.
Bases de datos OLAP
Para sistemas analíticos que trabajan con enormes volúmenes de datos —de decenas de terabytes o incluso varios petabytes— existe una categoría especial de almacenes que utiliza un modelo orientado a columnas.
A diferencia del modelo relacional, donde se almacena toda la fila de una tabla de manera secuencial, o del modelo orientado a documentos, donde se almacena todo el documento de manera consecutiva, aquí los valores de una sola columna se almacenan de manera secuencial. Se asume que en la misma posición de cada columna se guardan valores que corresponden a una fila específica. Este modelo permite comprimir los datos de forma eficiente y realizar diferentes agregaciones sobre ellos: suma, promedio, conteo, entre otros.
Los sistemas OLAP permiten añadir datos de forma continua o en bloques, pero generalmente no permiten eliminarlos ni modificarlos. Su principal objetivo es brindar a los analistas y a la gerencia de las empresas la posibilidad de analizar datos. En consecuencia, deben almacenar un historial de eventos, mientras que la mayoría de las otras bases de datos se enfocan en guardar únicamente el estado actual de cada entidad. Por lo general, los almacenes OLAP admiten sintaxis SQL para consultas, ya que es muy adecuada para tareas analíticas.
La mayoría de las soluciones en esta área —como Vertica, Teradata y BigQuery— tienen un costo bastante elevado. Sin embargo, también existen opciones de código abierto, como ClickHouse, Apache Druid, entre otros.
¿Qué elegir?
Por lo general, en la mayoría de los proyectos es suficiente con bases de datos relacionales, entre las cuales se pueden encontrar soluciones gratuitas adecuadas. Sin embargo, para ciertos escenarios de uso específicos, el modelo de almacenamiento orientado a documentos puede ser más conveniente.
Es importante tener en cuenta que, en la actualidad, muchas bases de datos relacionales admiten el almacenamiento de datos en formatos como JSON o XML, lo que les permite competir, hasta cierto punto, con el modelo orientado a documentos.
Si tu proyecto ha crecido hasta un tamaño en el que estas soluciones ya no son suficientes, tiene sentido incorporar almacenes clave-valor como caché o explorar otros modelos híbridos de gestión de datos.
Por otro lado, si necesitas construir un sistema de análisis que procese grandes volúmenes de datos, probablemente tendrás que considerar almacenes de la categoría OLAP. Estos incluyen almacenes orientados a columnas o aquellos de la familia de columnas, como HBase o Google Cloud Bigtable.