¿Que base de datos elegir y por qué?
Alejandro Celada—
Una parte importante de cualquier diseño técnico es elegir dónde almacenar sus datos, considerando que hay tantas bases de datos disponibles y elegir una base de datos sobre otra es una decisión complicada. Bueno, no existe una fórmula real que pueda seguir, pero hay algunas cosas en las que debe pensar al tomar buenas decisiones.
Ahora, antes de considerar un sistema de administración de base de datos específico, es relevante comprender el propósito de los datos porque el objetivo más común de los datos es almacenarlos y recuperarlos de la manera más eficiente. Para lograr esto, tómate un tiempo y haz algunas preguntas importantes relacionadas con tu proyecto:
- ¿Cómo se van a adquirir los datos?
- ¿Con qué ratio se van a adquirir dichos datos?
- ¿Cómo se van a utilizar los datos?
- ¿Cuántos datos espera almacenar cuando la aplicación esté madura?
- ¿Cuántos usuarios espera manejar simultáneamente en la carga máxima?
- ¿Qué disponibilidad, escalabilidad, latencia, rendimiento y coherencia de datos necesita su aplicación?
- ¿Con qué frecuencia cambiará el esquema de su base de datos?
- ¿Cuál es la distribución geográfica de su población de usuarios?
- ¿Su aplicación necesita procesamiento de transacciones en línea (OLTP), consultas analíticas (OLAP) o ambos?
- ¿Qué proporción de lecturas y escrituras espera en producción?
- ¿Cuáles son sus lenguajes de programación preferidos?
Por ejemplo, una tienda donde los datos se recopilan/ingresan manualmente todos los días no tendrá el mismo modelo de datos que una tienda que emplea tecnologías modernas (como la tecnología de sensores en la tienda para comprender y mejorar las experiencias de los clientes) donde los datos se generan en tiempo real. ¿Por qué? Porque es muy diferente manejar unos pocos cientos o miles de registros por mes en comparación con manejar millones de ellos en el mismo período. El ingeniero debe hacer consideraciones especiales para mantener la eficiencia y la facilidad de uso de la base de datos si los volúmenes de datos van a ser grandes.
Pero, por supuesto, el volumen de datos no es el único aspecto a considerar, ya que el propósito de los datos también afecta el nivel de normalización, la estructura de datos, el tamaño del registro y la implementación general de todo el sistema.
Por lo tanto, conocer a fondo el propósito del sistema de datos que necesitamos crear lleva a consideraciones en la elección del motor de base de datos, las entidades a diseñar, el tamaño y formato del registro y las políticas de administración del motor de base de datos.
Tipos de bases de datos
Cuando se trata de almacenar y administrar datos, hay una amplia variedad de sistemas de administración de bases de datos para elegir. Hay más de 300 sistemas de administración de bases de datos disponibles en el mercado y elegir uno puede ser abrumador, pero es importante tener en cuenta que ninguno de ellos se adapta a todos los tipos de requisitos del proyecto. Cada uno tiene sus propias fortalezas y debilidades y se adapta mejor a ciertos tipos de datos y casos de uso, por lo que nuestro enfoque aquí es describir cinco almacenes de datos comunes para que pueda tomar la mejor decisión posible para su diseño técnico.
Los cinco tipos de almacenes de datos que analizaremos son:
- Base de datos relacional (RDBMS)
- Bases de datos no relacionales (“NoSQL”)
- Almacén de clave-valor
- Motor de búsqueda de texto completo
- Cola de mensajes
Base de datos relacional
En la base de datos relacional, los datos se organizan en tablas que parecen archivos de Excel. Cada tabla tiene un esquema que define las columnas de esa tabla. Las filas de la tabla, cada una de las cuales representa un registro real de información, deben ajustarse al esquema teniendo un valor (o un valor NULL) para cada columna.
Cada fila de la tabla tiene su propia clave única, también llamada clave principal. Por lo general, esta es una columna de enteros llamada "ID". Una fila en otra tabla puede hacer referencia a la ID de esta tabla, creando así una relación entre dos tablas. Cuando una columna en una tabla hace referencia a la clave principal de otra tabla, lo llamamos clave externa.
Usando este concepto de claves primarias y claves externas, podemos representar relaciones de datos increíblemente complejas utilizando bases increíblemente simples.
SQL, que significa Lenguaje de consulta estructurado, es el lenguaje estándar de la industria para interactuar con bases de datos relacionales.
Otras características de las bases de datos relacionales son
- Replicado y distribución (bueno para la escalabilidad)
- Aplica esquemas y transacciones atómicas, consistentes, aisladas y duraderas (ACID) (conduce a un comportamiento bien definido y esperado de sus consultas y actualizaciones)
Cuándo usar una base de datos relacional
Las bases de datos relacionales suelen ser las bases de datos más maduras: han resistido la prueba del tiempo y continúan siendo una herramienta estándar de la industria para el almacenamiento confiable de datos importantes.
Aquí hay algunas situaciones en las que podría ser una buena idea usar una base de datos relacional:
- Cuando necesite almacenar datos estructurados: las bases de datos relacionales son adecuadas para almacenar datos que se pueden representar en una estructura de tabla, como catálogos de clientes, productos o registros de proveedores/vendedores.
- Cuando necesite fuertes garantías de consistencia: las bases de datos relacionales ofrecen fuertes garantías de consistencia, lo que significa que una vez que los datos se han escrito en la base de datos, será inmediatamente visible para todos los usuarios. Esto es fundamental para las aplicaciones que requieren datos precisos y actualizados.
- Cuando necesite admitir transacciones: las bases de datos relacionales admiten transacciones, lo que le permite ejecutar una serie de operaciones de base de datos como una sola unidad de trabajo. Esto es relevante para las aplicaciones que necesitan garantizar la integridad de los datos, como los sistemas financieros.
será inmediatamente visible para todos los usuarios. Esto es importante para las aplicaciones que requieren datos precisos y actualizados.
Cuando necesite admitir transacciones: las bases de datos relacionales admiten transacciones, lo que le permite ejecutar una serie de operaciones de base de datos como una sola unidad de trabajo. Esto es importante para las aplicaciones que necesitan garantizar la integridad de los datos, como los sistemas financieros.
Cuándo no usar una base de datos relacional
Por otro lado, también hay algunas situaciones en las que una base de datos relacional podría no ser la mejor opción:
Cuando necesite almacenar grandes cantidades de datos no estructurados: las bases de datos relacionales están diseñadas para almacenar datos estructurados, por lo que pueden no ser la mejor opción para almacenar grandes cantidades de datos no estructurados, como documentos o imágenes.
Cuando necesita un alto rendimiento: las bases de datos relacionales pueden ser más lentas que otras tecnologías de bases de datos disponibles en el mercado hoy en día, especialmente cuando se trata de leer y escribir grandes cantidades de datos. Si necesita un alto rendimiento para su aplicación, es posible que desee considerar una tecnología de base de datos diferente.
Cuando necesite un modelado de datos flexible: las bases de datos relacionales tienen un esquema fijo, lo que significa que debe definir la estructura de sus datos por adelantado. Esto puede ser inflexible si sus datos deben cambiar con frecuencia o si necesita almacenar estructuras de datos complejas.
Base de datos no relacional ("NoSQL")
Las bases de datos "NoSQL" tienen aproximadamente las mismas características que las bases de datos relacionales (duraderas, resilientes, persistentes, replicadas, distribuidas y de alto rendimiento), excepto por la diferencia de no aplicar esquemas (o solo aplicar esquemas muy flexibles)
En otras palabras, datos que no se ajustan estrictamente a algún esquema o que tienen un esquema que es tan variable que sería un gran dolor tratar de representarlo de forma relacional.
Cuándo usar una base de datos NoSQL
Las bases de datos "NoSQL" son las más adecuadas para manejar grandes volúmenes de datos y/o datos no estructurados muy populares en el mundo de los grandes datos porque las escrituras son rápidas. No imponen esquemas complicados de tablas cruzadas ni restricciones de integridad, por lo que es poco probable que las escrituras sean un cuello de botella en un sistema que usa NoSQL.
Aquí hay algunas situaciones en las que podría ser una buena idea usar la base de datos NoSQL:
- Cuando necesita almacenar grandes cantidades de datos: las bases de datos NoSQL están diseñadas para manejar grandes cantidades de datos y, a menudo, se usan en aplicaciones de big data que requieren la capacidad de escalar horizontalmente en varios servidores.
- Cuando necesita un alto rendimiento para leer y escribir grandes cantidades de datos: las bases de datos NoSQL son generalmente más rápidas que las bases de datos relacionales para leer y escribir grandes cantidades de datos.
- Cuando necesite un modelado de datos flexible: las bases de datos NoSQL generalmente tienen capacidades de modelado de datos más flexibles que las bases de datos relacionales, lo que significa que puede almacenar y recuperar datos en una variedad de formatos sin tener que definir un esquema fijo por adelantado. Esto es útil para las aplicaciones que necesitan adaptarse a cambios en los requisitos de datos con frecuencia.
Cuándo no usar una base de datos NoSQL
Por otro lado, también hay algunas situaciones en las que una base de datos NoSQL podría no ser la mejor opción:
- Cuando necesite fuertes garantías de consistencia: las bases de datos NoSQL generalmente no ofrecen el mismo nivel de garantías de consistencia que las bases de datos relacionales. Esto puede no ser un problema para algunas aplicaciones, pero si necesita asegurarse de que los datos sean siempre precisos y actualizados, una base de datos relacional podría ser una mejor opción.
- Cuando necesita admitir transacciones: las bases de datos NoSQL generalmente no admiten transacciones de la misma manera que las bases de datos relacionales. Si necesita garantizar la integridad de los datos a través de transacciones, puede considerar una base de datos relacional.
- Cuando necesite almacenar datos estructurados: las bases de datos NoSQL generalmente son más adecuadas para almacenar datos no estructurados que datos estructurados