¿Qué tipos de bases de datos hay? ¿Qué características tienen? ¿Cuántos tipos hay? Relacionales, no relacionales, distribuidas, transaccionales… En este artículo responderemos a estas preguntas con ejemplos de los principales gestores de bases de datos más utilizados.
Este artículo forma parte de nuestra serie donde te contamos todo lo que necesitas saber para adquirir las competencias necesarias para trabajar con bases de datos.
Almacenar datos es una tarea relativamente sencilla, pero el problema viene cuando queremos explotarlos. Necesitamos garantizar una alta disponibilidad, bajas latencias y herramientas con las que poder realizar consultas, analítica y modelos.
La elección de base de datos es una tarea que muchas veces se toma a la ligera, pues en el momento del desarrollo de una aplicación, quizá no sea el principal foco, pero va a resultar un quebradero de cabeza como hayamos tomado decisiones erróneas en el diseño, y con el tiempo empecemos a detectar errores de rendimiento en la aplicación y dificultades en la incorporación de datos nuevos. Hay que anticiparse a todo eso y escoger una base de datos que no solo se adapte a la aplicación en el momento del desarrollo, sino que escale también con ella.
En este artículo veremos cómo se clasifican las bases de datos, para después tener una guía de elección en función de características como la flexibilidad, escalabilidad y formato de los datos.
Bases de datos relacionales – SQL
Las bases de datos relacionales son un tipo de sistema de gestión de bases de datos (DBMS) que se basan en el modelo relacional. En este modelo, los datos se organizan en tablas compuestas por filas y columnas. Cada tabla representa una entidad o relación específica, y las filas corresponden a registros individuales, mientras que las columnas representan atributos o características de esos registros.
Las bases de datos relacionales siguen el modelo transaccional ACID (veremos más adelante), se rigen por una estructura fija y utilizan claves primarias y claves foráneas para establecer relaciones entre las tablas. Estas relaciones permiten vincular información relacionada y mantener la integridad y consistencia de los datos.
El acceso y la manipulación de datos en bases de datos relacionales se realiza utilizando el lenguaje de consulta estructurado (SQL), que proporciona un conjunto de comandos para realizar operaciones como insertar, actualizar, eliminar y consultar datos.
En cuanto a los inconvenientes de utilizar estas BBDD, presentan un esquema rígido y complejo de mantener en muchas ocasiones, lo que es limitante en situaciones donde los datos son cambiantes. La escalabilidad vertical es limitada, el rendimiento en consultas complejas no es bueno, consumiendo una gran cantidad de recursos y no son las bases de datos adecuadas si tenemos datos semiestructurados o no estructurados.
Las bases de datos relacionales son ampliamente utilizadas en entornos empresariales debido a su capacidad para manejar datos estructurados y garantizar la integridad y coherencia de los datos. Ofrecen ventajas como la capacidad de realizar consultas complejas y poderosas, la capacidad de mantener la integridad referencial, la seguridad de acceso a datos y la facilidad de uso.
Ejemplos populares de sistemas de gestión de bases de datos relacionales incluyen MySQL, Oracle Database, Microsoft SQL Server y PostgreSQL. Son bases de datos maduras y probadas, que han sido fundamentales en el almacenamiento y gestión de datos en numerosas aplicaciones empresariales, como sistemas de gestión de inventario, sistemas de reservas, sistemas de recursos humanos y sistemas de CRM, entre otros.
Bases de datos no relacionales – NoSQL
Los tipos de bases de datos no relacionales, también conocidas como NoSQL (Not Only SQL), se dividen en varias categorías según su estructura y modelo de datos
Documentos
Estas bases de datos almacenan y recuperan datos en formato de documentos, como JSON (JavaScript Object Notation) o XML (eXtensible Markup Language). Los documentos son estructuras flexibles que pueden variar en contenido y no requieren un esquema fijo. Son bases de datos que presentan un muy buen rendimiento, con escalabilidad horizontal. Las principales desventajas que presentan son la inconsistencia eventual, la falta de relaciones entre los datos y las dificultades ante consultas complejas. Ejemplos de este tipo de bases de datos serían MongoDB, Couchbase y Apache CouchDB.
Columnares
En estas bases de datos, los datos se organizan en columnas en lugar de filas, lo que permite una recuperación eficiente de datos específicos. Estas bases de datos se caracterizan por una alta compresión de los datos, eficiencia en las consultas analíticas, escalabilidad horizontal y flexibilidad en su esquema. Por otro lado, se trata de herramientas que presentan un rendimiento pobre en consultas transaccionales (insert, update, delete), el diseño es complejo y no ofrece tanto soporte como las documentales o relacionales. Son ideales para aplicaciones que requieren consultas y análisis de datos a gran escala. Ejemplos populares son Apache Cassandra, HBase y ScyllaDB.
Clave-valor
Este tipo de bases de datos almacena datos en pares clave-valor, donde cada valor se asocia con una clave única. Son altamente escalables y ofrecen un acceso rápido a datos mediante operaciones básicas como almacenar, recuperar y eliminar. Al igual que las anteriores, se pueden escalar horizontalmente, presentan un esquema flexible y son relativamente sencillas de implementar. Como principales inconvenientes tendríamos la falta de relaciones entre los datos, lo que implica no poder aplicar joins, y en general dificultad con analíticas avanzadas. Algunos ejemplos notables son Redis, Riak, Apache Ignite y Amazon DynamoDB.
Grafos
Estas bases de datos se centran en el almacenamiento y la recuperación eficiente de datos de aplicaciones que dependen de estructuras de relaciones complejas. Utilizan modelos de grafos para representar y consultar conexiones entre datos. Presentan un buen rendimiento, escalabilidad y flexibilidad y son muy útiles para análisis de datos en tiempo real. Por otro lado la complejidad en el modelado, y la poca madurez y soporte de estas tecnologías serían sus puntos débiles. Ejemplos destacados incluyen Neo4j, Amazon Neptune y ArangoDB.
Búsqueda
Estas bases de datos se centran en la indexación y búsqueda rápida de datos no estructurados o semi-estructurados. Son especialmente útiles en aplicaciones de búsqueda y análisis de texto completo. Se trata de bases de datos que no funcionan bien con relaciones complejas entre los datos y exigen un mayor consumo de recursos comparado con el resto de NoSQL. Elasticsearch, Apache Lucene y Splunk son ejemplos populares de bases de datos de búsqueda
Estos son solo algunos ejemplos de los tipos de bases de datos NoSQL disponibles. Cada tipo tiene sus características y fortalezas específicas, y la elección depende de los requisitos y el contexto de la aplicación en la que se utilizarán. Al seleccionar una base de datos NoSQL, es importante considerar factores como escalabilidad, rendimiento, capacidad de consulta y modelado de datos adecuado a los requerimientos del proyecto. En nuestra guía para elegir base de datos tendrás más información al respecto.
Archivos y objetos
Las bases de datos de archivos u objetos son sistemas de gestión de bases de datos diseñados específicamente para almacenar y administrar archivos o objetos individuales de datos en lugar de utilizar una estructura de tabla tradicional.
En este tipo de bases de datos, los archivos u objetos son tratados como unidades indivisibles y se almacenan de manera jerárquica o en forma de árbol, lo que permite una recuperación eficiente de los datos. Cada archivo tiene sus propias propiedades y metadatos asociados, como nombre, tamaño, tipo de archivo, fecha de creación, entre otros.
Estas bases de datos son especialmente útiles cuando se trabaja con datos no estructurados o semiestructurados, como documentos, imágenes, videos o cualquier otro tipo de archivo digital. Proporcionan capacidades avanzadas para la gestión de versiones, la búsqueda de texto completo y la indexación de contenido, lo que facilita la recuperación y el acceso eficientes a los archivos u objetos almacenados. Además, estas bases de datos suelen ofrecer opciones de almacenamiento distribuido y escalabilidad horizontal para gestionar grandes volúmenes de datos de manera eficiente.
Algunos ejemplos de este tipo de base de datos serían los storage de las principales plataformas de la nube. Amazon S3, Azure Blob Storage o Google Cloud Storage.
Base de datos distribuida
Una base de datos distribuida es un sistema en el que los datos están distribuidos en múltiples ubicaciones físicas y se accede y administra como una sola base de datos lógica. En una base de datos distribuida, los datos se almacenan en nodos de diferentes servidores interconectados y se gestionan de manera coordinada.
El objetivo principal de una base de datos distribuida es mejorar el rendimiento, la escalabilidad y la disponibilidad de los datos, así como permitir un procesamiento eficiente en entornos con grandes volúmenes de datos o geográficamente dispersos. Cada nodo de la base de datos distribuida puede tener una copia completa o parcial de los datos y puede ejecutar operaciones de consulta y actualización de forma autónoma.
La coordinación y el control en una base de datos distribuida se logran mediante protocolos y algoritmos de distribución de datos, en los cuales se establecen reglas de cómo los datos se distribuyen y se sincronizan entre los nodos. También se implementan mecanismos de tolerancia a fallos y recuperación ante errores para garantizar la integridad y la consistencia de los datos en todo el sistema distribuido.
Algunos ejemplos de bases de datos distribuidas serían Apache Cassandra, Apache HBase, Google Spanner o Amazon DynamoDB.
Bases de datos de series temporales
Las bases de datos de series temporales son sistemas diseñados específicamente para almacenar y administrar datos que están vinculados a un intervalo de tiempo o secuencia temporal. Estas bases de datos están optimizadas para la captura, el almacenamiento y el análisis de datos que tienen una marca de tiempo asociada, lo que permite un manejo eficiente de datos en constante evolución.
En una base de datos de series temporales, los datos se organizan y se indexan en función de la marca de tiempo. Esto facilita la consulta y el análisis de datos en función de intervalos de tiempo específicos, como consultas para un día en particular, una semana, un mes o cualquier otro período definido. Además, las bases de datos de series temporales suelen ofrecer funciones y operaciones especializadas para el análisis de tendencias, la agregación por intervalos de tiempo y la generación de visualizaciones temporales.
Estas bases de datos son ampliamente utilizadas en diversos campos, como el monitoreo de sensores, IoT (Internet de las cosas), análisis financiero, registros de aplicaciones, registros de servidores, análisis climáticos, registros de redes, entre otros. Almacenar los datos en una base de datos de series temporales permite un acceso rápido y eficiente a los datos históricos, facilitando el análisis y la detección de patrones y anomalías en el tiempo.
Las principales bases de datos de series temporales serían InfluxDB, TimescaleDB, Prometheus, OpenTSDB o Graphite.
Bases de datos transaccionales
Las bases de datos transaccionales son sistemas de gestión de bases de datos diseñados para admitir y administrar transacciones de manera confiable y consistente. Una transacción es una unidad de trabajo que implica una serie de operaciones de base de datos que deben ejecutarse como una entidad indivisible, asegurando la integridad de los datos.
Las bases de datos transaccionales garantizan la ACIDidad de las transacciones, que son las propiedades fundamentales que deben cumplirse:
- Atomicidad (Atomicity): Una transacción se considera atómica, lo que significa que todas sus operaciones se ejecutan por completo o ninguna de ellas se ejecuta. Si alguna parte de la transacción falla, se realiza un rollback para deshacer todas las operaciones realizadas.
- Consistencia (Consistency): Las transacciones deben mantener la consistencia de los datos en la base de datos. Esto significa que al finalizar una transacción, los datos deben estar en un estado coherente y válido.
- Aislamiento (Isolation): Las transacciones deben ejecutarse en un aislamiento completo, es decir, de manera independiente y sin interferir entre sí. Esto asegura que el resultado de una transacción no se vea afectado por las acciones de otras transacciones concurrentes.
- Durabilidad (Durability): Una vez que una transacción se ha completado correctamente, los cambios realizados deben ser permanentes y duraderos, incluso en caso de fallos o reinicios del sistema. Los datos deben persistir y ser recuperables en todo momento.
Las bases de datos transaccionales son ampliamente utilizadas en aplicaciones que requieren la gestión confiable de transacciones, como sistemas bancarios, sistemas de reservas, aplicaciones de comercio electrónico y sistemas de gestión empresarial. Estas bases de datos garantizan la integridad y la consistencia de los datos al mantener un registro de todas las transacciones realizadas y administrar el control de concurrencia para garantizar la coherencia de los datos.
Normalmente son bases de datos relacionales y se emplean en la etapa inicial del ciclo de vida del dato. Las BBDD transaccionales son la puerta de entrada de los datos que se generan en el negocio. Algunos ejemplos serían Microsoft SQL Server, MySQL, Oracle, IBM DB2 o PostresSQL.
Cache/Memoria
Las bases de datos en memoria o caché son sistemas de almacenamiento de datos que mantienen los datos principales en la memoria RAM en lugar de almacenarlos en discos. Esto permite un acceso extremadamente rápido a los datos, ya que no es necesario realizar operaciones de lectura y escritura en disco.
Las bases de datos en memoria son especialmente útiles en aplicaciones que requieren un acceso rápido a los datos, como aplicaciones de alta velocidad, análisis en tiempo real y servicios con SLAs ajustados. Al mantener los datos en la memoria, se eliminan los cuellos de botella de rendimiento asociados con las operaciones de disco, lo que permite un procesamiento y análisis más rápidos.
Algunos ejemplos populares de bases de datos en memoria o caché son:
- Redis: Es una base de datos en memoria de código abierto que admite diferentes estructuras de datos, como cadenas, listas, conjuntos y hashes. Es conocida por su alta velocidad y flexibilidad, y se utiliza ampliamente para casos de uso como almacenamiento en caché, colas de mensajes y gestión de sesiones.
- Memcached: Es una base de datos en memoria distribuida que se utiliza principalmente como caché para almacenar datos en la memoria y reducir las solicitudes a las bases de datos principales. Es altamente escalable y se utiliza para mejorar el rendimiento de aplicaciones web y sistemas distribuidos.
- Apache Ignite: Combina almacenamiento de datos en memoria, procesamiento distribuido y funcionalidades de caché para acelerar las aplicaciones. Se utiliza en casos de uso como análisis en tiempo real, procesamiento de transacciones de alta velocidad y búsqueda en memoria.
- SAP HANA: Combina capacidades de procesamiento y análisis en memoria con capacidades de base de datos tradicional. Se utiliza en aplicaciones empresariales para acelerar consultas y análisis complejos en tiempo real.
Estos ejemplos representan solo algunas de las bases de datos en memoria o caché disponibles en el mercado. Cada una ofrece diferentes características y funcionalidades, pero todas comparten la característica principal de almacenar y acceder a los datos principales en la memoria para un rendimiento óptimo.
Bases de datos jerárquicas
Una base de datos jerárquica es un tipo de sistema de gestión de bases de datos que organiza la información en una estructura de árbol o jerarquía. En este modelo, los datos se almacenan en nodos y se relacionan mediante enlaces padre-hijo. Cada nodo puede tener varios hijos, pero solo un padre.
Este enfoque es adecuado para representar datos con relaciones naturales de tipo uno-a-muchos, donde un elemento principal (padre) está relacionado con varios elementos secundarios (hijos).
Sin embargo, a medida que las necesidades de almacenamiento de datos se volvieron más complejas y diversas, este modelo comenzó a mostrar limitaciones en la representación de relaciones más complejas, como relaciones muchos-a-muchos y consultas flexibles. Esto llevó al desarrollo de modelos de bases de datos más flexibles, como las bases de datos relacionales y, posteriormente, los sistemas NoSQL.
Aunque fue importante en su momento, en la actualidad, otros modelos de bases de datos ofrecen más versatilidad y adaptabilidad a las necesidades actuales de gestión y análisis de datos.
On Premise vs Cloud
La elección entre una base de datos en la nube (cloud) o en las instalaciones (on-premise) depende de varios factores y consideraciones específicas de cada organización. A continuación, se presentan algunas ventajas y consideraciones para ayudarte en tu decisión:
Cloud
- Escalabilidad y flexibilidad: Las bases de datos en la nube ofrecen la capacidad de escalar vertical u horizontalmente según las necesidades de tu aplicación, lo que facilita la gestión de crecimiento y picos de demanda.
- Administración y mantenimiento: La infraestructura de la base de datos en la nube es gestionada por el proveedor, lo que libera a tu equipo de tareas de mantenimiento, actualizaciones y parches de software.
- Costes: Las bases de datos en la nube generalmente tienen un modelo de pago por uso, lo que puede ser beneficioso para las organizaciones que prefieren un modelo de gasto operativo (OpEx) en lugar de un gasto de capital (CapEx) inicial.
On-premise
- Control y seguridad: Mantener la base de datos en las instalaciones te brinda un mayor control sobre la seguridad y el acceso a los datos, ya que los datos se almacenan y se gestionan internamente.
- Personalización: Con una base de datos on-premise, tienes más flexibilidad para personalizar la configuración y adaptarla a tus necesidades específicas, lo que puede ser ventajoso en casos donde se requieren requisitos y restricciones específicas.
- Regulaciones y cumplimiento normativo: Si tu organización opera en un sector con regulaciones estrictas o tiene requisitos de cumplimiento específicos, tener la base de datos on premise puede ofrecer un mayor control y cumplimiento normativo.
Es importante considerar tus necesidades, recursos, presupuesto, requisitos de seguridad y conformidad, así como la capacidad de administrar y mantener la infraestructura adecuadamente. Algunas organizaciones optan por una combinación de ambos modelos, utilizando una arquitectura híbrida que combina bases de datos en la nube y on-premise para obtener lo mejor de ambos enfoques.
En última instancia, la elección depende de tus circunstancias y prioridades específicas. Te recomendaría evaluar cuidadosamente los beneficios, costos y consideraciones para tomar una decisión informada que se alinee con las necesidades y objetivos de tu organización.
Para más información te dejamos nuestro artículo sobre diseño de bases de datos en la nube o nuestro itinerario para adquirir las competencias necesarias para desplegar infraestructura en cloud.
Estáticas vs Dinámicas
Las bases de datos se pueden clasificar en estáticas y dinámicas según cómo se actualizan o modifican los datos en ellas.
- Bases de datos estáticas: Las bases de datos estáticas son aquellas en las que los datos no cambian, o se actualizan con poca frecuencia una vez que se han creado. Los datos en este tipo de bases de datos se establecen durante la fase de diseño y se mantienen sin cambios a lo largo del tiempo. Son comunes en aplicaciones que requieren datos de solo lectura, como bibliotecas digitales, archivos históricos o referencias estáticas. No permiten inserción, actualización o eliminación de datos después de su creación inicial. Una base de datos estática puede ser un archivo JSON, XML o CSV.
- Bases de datos dinámicas: Las bases de datos dinámicas son aquellas en las que los datos se actualizan y modifican con regularidad. Estas bases de datos permiten la inserción, actualización y eliminación de datos, lo que permite cambios continuos en el contenido. Son ampliamente utilizadas en aplicaciones en tiempo real, sistemas transaccionales y entornos donde los datos deben reflejar cambios y actualizaciones frecuentes. Las bases de datos dinámicas suelen tener operaciones más complejas para garantizar la consistencia, la integridad y la concurrencia de los datos. Ejemplos de bases de datos dinámicas serían MySQL, MongoDB o PostgreSQL.
Es importante tener en cuenta que la clasificación entre bases de datos estáticas y dinámicas no está relacionada con la estructura o el modelo de datos, sino con la forma en que los datos se actualizan o modifican en ellas. Incluso en bases de datos dinámicas, puede haber tablas o datos que se mantengan estáticos y no cambien con frecuencia.
La elección entre una base de datos estática o dinámica depende de la naturaleza de los datos, los requisitos de la aplicación y la necesidad de actualizaciones o cambios frecuentes en los datos.
Hot Storage vs Warm Storage vs Cold Storage
Hot storage, warm storage y cold storage son términos que describen diferentes niveles de acceso y disponibilidad de datos en función de su frecuencia de uso y velocidad de acceso. A continuación, se explica cada uno de ellos y se proporcionan algunos ejemplos de bases de datos comerciales asociadas:
Hot Storage
Hot storage es el nivel más rápido y accesible de almacenamiento, diseñado para datos que se acceden con alta frecuencia y necesitan una respuesta inmediata. Los datos en hot storage están listos para ser utilizados en cualquier momento, lo que permite un acceso rápido y eficiente. El hot storage garantiza una alta disponibilidad, se utiliza para acceder con frecuencia y se suelen usar cache databases y BBDD que tengan discos duros de estado sólido (SSD).
Ejemplos de bases de datos comerciales: Algunos ejemplos de bases de datos que pueden considerarse hot storage incluyen Microsoft SQL Server, Oracle Database o PostgreSQL.
Warm Storage
Warm storage se encuentra en un nivel intermedio entre hot storage y cold storage. Proporciona un acceso más rápido que cold storage, pero no es tan rápido como hot storage. Los datos en warm storage pueden tardar más tiempo en estar disponibles para su acceso en comparación con hot storage.
Algunos ejemplos de bases de datos que pueden considerarse warm storage incluyen Amazon Aurora, Microsoft Azure SQL Database o MongoDB.
Cold Storage
Cold storage es el nivel más lento y menos accesible de almacenamiento. Se utiliza para datos que no se acceden con frecuencia o que no requieren una respuesta inmediata. Los datos en cold storage pueden tardar más tiempo en estar disponibles para su acceso, pero su uso es más económico y eficiente en términos de espacio.
Algunos ejemplos de bases de datos que pueden considerarse cold storage incluyen Amazon Glacier, IBM Spectrum Archive o Microsoft Azure Archive Storage.
En resumen, hot storage, warm storage y cold storage representan diferentes niveles de accesibilidad y velocidad de acceso de datos en función de sus necesidades y uso. Las bases de datos comerciales pueden clasificarse en estos niveles en función de su rendimiento, capacidad de respuesta y coste.
Al igual que en los formatos de datos encontramos una gran variedad, por fortuna tenemos un amplio espectro de opciones en que a base de datos se refiere, pudiendo elegir en función de los tipos de los datos, la concurrencia, accesibilidad, rendimiento, escalabilidad, seguridad, ubicuidad y coste.
SIGUIENTE EPISODIO – Te recomendamos que continúes tu travesía por las bases de datos con nuestro artículo sobre elegir la base de datos. Todo lo que necesitas saber.
Pingback: We Learn Data
Pingback: We Learn Data
Pingback: We Learn Data
Pingback: We Learn Data
Pingback: We Learn Data