Motores de bases de datos - ¿Qué son, cuáles son, y cuál uso?
Los motores de bases de datos: Tipos, ventajas y desventajas
¿Qué es un motor de base de datos?
Un motor de base de datos (o database engine en inglés) es el software que permite a una base de datos almacenar, modificar, extraer y buscar información. Es decir, permite realizar operaciones CRUD con la información contenida dentro de la base de datos.
Este funciona de intermediario entre la base de datos física y las aplicaciones que solicitan los datos, permitiendo que se ejecuten consultas y transacciones de forma correcta y eficiente.
Si bien se podría decir que un motor de base de datos solo realiza operaciones CRUD, esto no es totalmente cierto. Se podría interpretar como un automóvil: fundamentalmente, un vehículo es un medio usado para transporte, pero esto no incluye todo lo que puede hacer un automóvil moderno. Y aplicando la misma lógica, un motor de BD no está limitado solo a operaciones CRUD básicas. También puede:
- Manejar múltiples usuarios
- Transacciones
- Cachés y búferes
- Aislamiento de data
Las combinaciones de estas operaciones son lo que define la eficiencia y utilidad de una dada instancia de una base de datos.
Tipos de motores de bases de datos
Los diferentes tipos de motores nos ofrecen distintas formas en que un Sistema de Gestión de Bases de Datos (DBMS por sus siglas en inglés) maneja el almacenamiento, acceso, y manipulación de los datos. La elección de un motor en específico depende del tipo de aplicación para el que se usará, pues este afecta el rendimiento, escalabilidad, y la integridad de los datos.
Para medir mejor estas diferencias entre los diferentes motores de bases de datos, tenemos ACID (Atomicity, Consistency, Isolation, Durability). La Atomicidad garantiza que una transacción se ejecute en su totalidad o se cancele; Consistencia asegura que la base de datos se mantenga en un estado válido y no tenga datos corruptos; Aislamiento evita que transacciones simultáneas "choquen" entre sí; y Durabilidad garantiza que una vez confirmada una transacción, sus cambios sean almacenados en la base de datos, evitando su pérdida incluso si ocurre un fallo del sistema.
Existe una amplia variedad de tipos de motores de bases de datos, y cada uno está pensado para ser utilizado en situaciones distintas con requerimientos distintos. Los más comunes e importantes son:
- Motores relacionales (SQL): Utilizan tablas para almacenar datos y establecen relaciones entre ellas por medio de llaves primarias y foráneas. Se utilizan para aplicaciones que requieran estructura rígida y consistencia de datos.
Ejemplos: Microsoft SQL Server, MySQL, PostgreSQ
- Motores no relacionales (NoSQL): Como su nombre lo indica, son motores que ofrecen flexibilidad en la schema de datos y pueden manejar enormes cantidades de datos no o poco estructurados.
Ejemplos: MongoDB, Cassandra, Redis.
- Motores en memoria (In-Memory Databases): Este tipo de motor utiliza la RAM para almacenar los datos en lugar de un método de almacenamiento permanente más convencional, como una SSD.
Esto con el objetivo de poder devolver datos extremadamente rápido, ideales para servir como caché de datos o procesar data.
Ejemplos: Redis, Memcached.
- Bases de datos de series temporales (Time-Series Databases): Son bastante especializadas, siendo enfocadas en guardar datos con timestamp o que llevan algún tipo de registro de tiempo. Usadas en su mayoría para llevar registros de mediciones o eventos, como mediciones sísmicas, por ejemplo.
Ejemplos: TimeScaleDB, InfluxDB, OpenTSDB.
- Base de datos orientadas a objetos: Son especializadas en almacenar objetos como tal, sin necesidad de dividirlos en sus atributos o tablas.
Ejemplos: Db4o, ObjectDB
- Base de datos NewSQL: Es una extraña e interesante combinación de SQL y NoSQL Databases. Tiene la escalabilidad de un motor NoSQL y al mismo tiempo mantiene las garantías de ACID de SQL.
Ofrece una solución a proyectos que necesitan manejar grandes volúmenes de data (NoSQL) pero preservando y cuidando la data (SQL).
¿Qué ventajas traen cada una y cuál debo usar?
Cada motor de base de datos cumple una función diferente pensada para una situación y necesidad diferente, por lo que no hay un "mejor" motor que solucione todos nuestros problemas.
Una base relacional (SQL) es ideal para proyectos de cualquier tamaño por su familiaridad y facilidad de uso, por su capacidad de cumplir con los principios ACID de salvaguardar la data, y porque es eficiente. Sin embargo, la rigidez de la estructura de la data puede ser un inconveniente para proyectos que necesitan procesar mucha data en tiempo real.
Las bases no relacionales (NoSQL) funcionan mejor cuando se anticipe una alta necesidad de escalabilidad en el proyecto, pues es muy flexible cuando se trata de datos semi o no estructurados y es optimizado para usos rápidos en tiempo real. Su desventaja es que no preserva la data tan bien como SQL y puede ser un poco menos intuitivo en lo que concierne a consultas.
Los motores en memoria (In-memory) son extremadamente rápidos, pues hacen uso de la RAM del sistema y no de un almacenamiento permanente como un disco duro, lo que los hace ideal para cachés y procesamiento en tiempo real. Aunque también su rapidez es su debilidad, pues al utilizar RAM son susceptibles a desaparecer completamente cuando la RAM pierda poder, por lo que un sistema secundario de permanencia es indispensable.
Las bases de datos temporales son bastante niche, por lo que no se puede ir mal utilizando alguna de estas cuando necesitemos organizar y almacenar grandes volúmenes de datos con timestamps.
Si bien parecería que usar una base de datos orientada a objetos solucionaría todos los problemas de la Programación Orientada a Objetos, estas parecen ser menos populares, con menos soporte y en general no tan intuitivas como las preferidas SQL; aunque el poder almacenar objetos sin dividirlos en tablas es bastante útil.
Y finalmente, NewSQL ofrece lo mejor de NoSQL y SQL, con la escalabilidad horizontal de NoSQL y la consistencia ACID de SQL, ideal para todo tipo de proyectos. Lo que lo detiene por ahora es que es relativamente nuevo, es complejo de implementar - prácticamente imposible de hacerlo en sistemas legacy -, y aún está siendo desarrollado.
No se trata de encontrar un Santo Grial que solucione todas nuestras necesidades de almacenamiento de data - se trata de encontrar la herramienta ideal para nuestros requerimientos y saberla usar bien 🛠
Comentarios
Publicar un comentario