Una de las cosas con las que podemos tener problemas como desarrolladores cuando trabajamos en un proyecto de campo verde es nuestra pila. Elegir la tecnología adecuada para resolver un problema puede ser una experiencia angustiosa. Las bases de datos, en particular, pueden ser un poco difíciles si no estamos seguros de cómo se utilizarán nuestros datos.
Este artículo tiene como objetivo ayudarlo a elegir el tipo correcto de base de datos . Exploramos las diferencias entre MongoDB y PostgreSQL.
Hoy repasaremos:
- ¿Por qué necesitamos bases de datos?
- Términos importantes a saber
- Descripción general de MongoDB y PostgreSQL
- Elegir entre MongoDB y PostgreSQL
- Conclusión y recursos
¿Por qué necesitamos bases de datos?
Esta pregunta puede ser un poco obvia, pero comprender por qué necesitamos bases de datos ayuda cuando se trata de elegir una estructura de base de datos para su pila. Las bases de datos son una base básica del desarrollo de software y sirven para muchos propósitos para construir proyectos de todos los tamaños y tipos. Profundicemos más en los usos de una base de datos.
Persistencia de datos
¿Cómo se sentiría si visitara un sitio web, agregara artículos a un carrito de compras y navegara fuera del sitio solo para regresar a un carrito vacío? Una experiencia frustrante, estoy seguro. Aquí es donde entran las bases de datos.
Tener una base de datos permite la persistencia de la sesión para que un usuario pueda iniciar sesión y permanecer conectado durante un período prolongado de tiempo. Al pensar en la elección de su base de datos, ¿qué tipo de datos necesita conservar?
El tipo de datos que está utilizando lo ayuda a elegir la base de datos que mejor se adapte a sus necesidades de datos y clientes.
Organización
En uno de mis primeros trabajos, recuerdo usar un sistema que usaba tarjetas contables de 5×7 para realizar un seguimiento de los clientes, los pagos y el inventario de alquiler que teníamos en el almacén. Era engorroso, no sin errores humanos, y dio lugar a redundancias en los registros.
Una base de datos con un sistema de gestión de inventario podría haber ayudado a esta empresa a ingresar al siglo XXI y reducir la necesidad de un contador y la conciliación de inventario.
Una base de datos ayuda a normalizar sus datos. Hay varios sabores diferentes de normalización, pero la explicación de alto nivel es que reduce la redundancia y las anomalías en sus datos. El ejemplo anterior de la tienda minorista ciertamente podría haber usado una base de datos computarizada para aumentar la productividad y reducir la cantidad de tabulación manual.
Con la organización de una base de datos, puede aprender mucho más sobre sus datos, ya que hace que esa información esté fácilmente disponible para ayudar en la toma de decisiones.
La forma en que organice esos datos lo ayudará a elegir la base de datos que mejor se adapte a sus necesidades de datos y clientes.
Registros
Las empresas prosperan con los datos. Tener una base de datos para recopilar información del cliente, como gustos, disgustos, historial de pedidos o artículos leídos, permite que una empresa u organización se dirija a sus consumidores más fácilmente. Esto conducirá a mayores ventas, más tráfico y anuncios mejor orientados.
La recopilación y el análisis de datos son clave para que cualquier empresa sobreviva en esta era de big data. La forma en que desea acceder y utilizar los datos lo ayudará a elegir la base de datos que mejor se adapte a sus necesidades de datos y clientes.
Términos importantes que debe saber antes de tomar una decisión sobre la base de datos
Ahora que estamos familiarizados con las razones principales por las que debemos usar una base de datos, veamos algunos términos importantes que debemos saber antes de tomar una decisión sobre la base de datos. La siguiente lista ciertamente no es una lista exhaustiva, pero conocer estos términos básicos lo ayudará a elegir una base de datos adecuada para su proyecto.
ACID
ACID es un acrónimo que significa Atomicidad, Consistencia, Aislamiento y Durabilidad. Es una propiedad de las bases de datos relacionales que garantiza la validación de la base de datos y es bastante confiable. Las definiciones de las cuatro propiedades son las siguientes:
- Atomicidad. La idea básica detrás de la atomicidad es que admite un paradigma de transacción. Este paradigma es utilizado principalmente por bases de datos relacionales. Cuando decimos paradigma de transacción, ¿qué significa realmente? Una transacción falla por completo o tiene éxito por completo, como una transferencia de fondos de una cuenta a otra.
- Consistencia. Cuando no hay efecto en ninguna de las cuentas bancarias debido a una transacción fallida, significa que la base de datos está en un estado consistente. La consistencia nos dice que una transacción ha llevado la base de datos de un estado válido (antes de la transacción) a otro estado válido (post-transacción). Válido en este sentido significa que los datos se establecen de acuerdo con reglas o restricciones definidas.
- Aislamiento. Imagine que tenemos dos personas separadas que usan un cajero automático para retirar efectivo de la misma cuenta al mismo tiempo. La idea detrás del aislamiento significa que no podrían engañar al banco para que piense que solo están sacando $100 de la cuenta cuando en realidad están sacando $200 ($100 de cada cajero automático). La base de datos del banco los trata como transacciones secuenciales.
- Durabilidad. Si hay cortes de energía, apagones catastróficos o accidentes, la durabilidad garantiza que las transacciones completadas ya están registradas.
Base
BASE es un acrónimo que significa básicamente disponible, estado suave, eventualmente consistente. Es exclusivo de las bases de datos no relacionales. Este tipo de bases de datos no tienen la garantía ACID, ya que eventualmente son consistentes. Esto significa que puede haber momentos en que la base de datos no sea confiable, pero con el tiempo alcanzará la consistencia. Entonces, sus datos están básicamente en un estado fluido hasta que se vuelven consistentes.
Join
Este es un término usado en bases de datos relacionales para conectar dos tablas. Reduce la cantidad de redundancia en sus datos. En SQL, se utiliza una JOIN
cláusula para combinar filas de dos o más tablas, en función de una columna común, y existen tres tipos de JOIN
cláusulas para diferentes necesidades.
NewSQL
Un término acuñado para los sistemas de bases de datos (es decir, VoltDB y MemSQL) que combina los mejores aspectos de las bases de datos relacionales (ACID) con la eficiencia y la escalabilidad horizontal de las bases de datos NoSQL.
Normalización
La normalización es el proceso de estructuración de una base de datos relacional. Nos permite usar tablas y columnas para reducir la redundancia en los datos, minimizar las anomalías en la modificación de datos y simplificar las consultas. La normalización se utiliza en bases de datos relacionales.
NoSQL
Un tipo de sistema de base de datos que no utiliza necesariamente el lenguaje de consulta estructurado tradicional (SQL) para consultar los sistemas de base de datos. Los ejemplos de bases de datos NoSQL incluyen MongoDB y DynamoDB. Las bases de datos NoSQL no son tabulares y varían en función de sus diferentes modelos de datos, como documento, columna ancha, clave-valor o gráfico. Su estructura proporciona esquemas flexibles y se pueden escalar fácilmente.
Persistencia
Como discutimos en nuestra primera sección, los datos son persistentes cuando sobreviven al proceso que los creó. La persistencia se refiere a un proceso u objeto que continúa existiendo después de que el padre cesa o después de que se apaga el sistema.
RDBMS
RDBMS es un acrónimo que significa Sistema de gestión de bases de datos relacionales. Por lo general, es una base de datos basada en SQL, como PostgreSQL o MySQL , y cumple con los requisitos de ACID. RDBMS facilita el acceso y la localización de valores en una base de datos. Lo llamamos “relacional” porque los valores de una tabla y las propias tablas están relacionados, lo que hace posible ejecutar consultas en muchas tablas al mismo tiempo.
SQL
El lenguaje de consulta estructurado está diseñado para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en una base de datos. Usamos SQL para comunicarnos con una base de datos y podemos usar sentencias SQL para realizar tareas como actualizar o recuperar datos de una base de datos.
Descripción general de MongoDB y PostgreSQL
Al elegir la estructura de su base de datos, es importante tener en cuenta la velocidad, la confiabilidad y la precisión. Por un lado, tenemos un paradigma relacional que puede garantizar que los datos estén en un estado válido. Por otro lado, tenemos un paradigma no relacional que garantiza la consistencia eventual. Entonces, ¿cómo elegimos? Echemos un vistazo a dos de las bases de datos más populares que provienen de cada paradigma: MongoDB y PostgreSQL.
MongoDB: Una base de datos NoSQL
NoSQL básicamente significa una cosa: no solo usa SQL para consultar su base de datos (el “No” en NoSQL significa “no solo”). MongoDB es una base de datos NoSQL orientada a documentos que utiliza documentos para administrar información. Veamos las características clave de MongoDB para tener una mejor idea de sus usos.
1. BSON/JSON
MongoDB utiliza BSON, una notación de objetos binarios de JavaScript, bajo el capó para que las consultas sean extremadamente rápidas. BSON no está destinado a ser legible por humanos. El BSON se traduce a JSON para que se lea cuando abra su colección. Al ver documentos, reconocerá el siempre popular formato JSON con pares clave/valor que es independiente del idioma.
2. Orientado a documentos
El uso de JSON le permite cambiar su esquema a su antojo sin repercusiones. Los documentos pueden variar en términos de pares clave/valor. A diferencia de las bases de datos relacionales, en las que es necesario modificar la tabla para realizar cambios, MongoDB es un poco más flexible porque utiliza el formato JSON/BSON. Las entradas individuales son su propia instancia del esquema que se escribió. A medida que pasa el tiempo, el esquema se puede cambiar sin consecuencias para la base de datos. El desarrollador frontend solo necesitaría realizar un manejo de errores si los valores nulos están presentes en las
llamadas a la API.
¿Propiedades ACID en MongoDB?
Las bases de datos NoSQL generalmente no se ajustan a las propiedades de ACID, sino que adoptan una consistencia eventual. Esto hace que las bases de datos NoSQL sean menos ideales para las instituciones financieras donde la validez de sus transacciones es más importante.
Dicho esto, MongoDB adoptó más el formato ACID en 2018, aunque todavía tiene que estar a la altura de la rigidez de esas propiedades. Un estudio publicado en mayo de 2020 identificó un error que afecta la afirmación de que Mongo realiza transacciones ACID a un nivel aceptable. Si se inclina por hacer de ACID una prioridad, debe investigar si las transacciones se realizan de manera aceptable para su producto.
PostgreSQL: Una base de datos relacional basada en SQL
PostgreSQL, también conocido como Postgres, es un sistema de administración de bases de datos relacionales de código abierto que enfatiza la extensibilidad y el cumplimiento de SQL. Veamos las características clave de Postgres para tener una mejor idea de sus usos.
SQL
Postgres emplea SQL en última instancia bajo el capó, un lenguaje de consulta estructurado, para definir, acceder y manipular la base de datos. Postgres usa su propio sabor de SQL llamado PL/pgSQL (lenguaje de procedimiento/PostgreSQL). La gran diferencia entre los dos es que este último puede realizar consultas más complejas que SQL. Otros modelos de bases de datos relacionales tienen su propio sabor de SQL, lo que lleva a diferencias menores en todos los ámbitos entre las diferentes bases de datos.
Transacciones
Las transacciones de Postgres siguen el principio ACID. Esto significa que la validez de sus datos es bastante fiable.
Tablas
Debido a que esta base de datos tiene una estructura relacional, el componente principal que define la diferencia entre esto y MongoDB cubierto anteriormente es que todo el esquema debe diseñarse y configurarse en el momento de la creación. Se puede modificar una tabla después del inicio, pero puede dar lugar a errores no fácilmente identificables en el futuro.
Llaves Foránea
Las bases de datos PostgreSQL pueden usar claves externas. Las claves foráneas nos permiten mantener nuestros datos normalizados haciendo referencia a un objeto de una tabla en otra, de modo que la segunda tabla tenga acceso a las claves y valores de la primera tabla.
Elegir entre MongoDB y PostgreSQL
Entonces, ahora que sabemos lo que cada base de datos tiene para ofrecer, debemos determinar cuándo elegir cada una según los datos, la organización y los requisitos en cuestión. Vamos a desglosarlo para informar nuestra decisión de base de datos. Tenga en cuenta que no existe una base de datos perfecta. La clave es identificar sus necesidades y combinar mejor las habilidades y los beneficios con esas pautas.
Cuándo usar MongoDB:
- El esquema evoluciona a medida que evoluciona su aplicación: MongoDB es ideal para usar cuando necesita tener una base de datos cuyo esquema pueda evolucionar a medida que evoluciona su aplicación. A veces, simplemente no sabemos cómo será el alcance completo de nuestra aplicación, y es deseable tener la flexibilidad para ajustar el esquema para que se ajuste a sus necesidades.
- El escalado horizontal significa que MongoDB es rápido: debido a que MongoDB no depende de una mayor potencia de procesamiento a medida que escala, sino que combina potencia con máquinas adicionales, puede ser un poco más rápido. Si planea tener decenas o cientos de miles de documentos de datos, podría ser una buena idea utilizar el enfoque de escalado horizontal utilizando MongoDB.
- ACID no es una prioridad: MongoDB es excelente si ACID no es su primera prioridad, incluso con la llegada del paradigma de transacciones ACID de Mongo. Realmente depende de cuál sea la mayor prioridad para usted y su empresa.
Cuándo usar PostgreSQL:
- Los datos dependen de la confiabilidad de ACID: debido a que las transacciones en este modelo siguen las propiedades de ACID, es una buena opción para cualquier tipo de negocio fintech. Cuando sea absolutamente necesario controlar el estado de sus datos, utilice una base de datos relacional como Postgres.
- Los esquemas tienen una relación identificada: si la estructura de sus datos se puede identificar con una relación 1: 1, 1 a muchos o muchos a 1, será útil tener tablas que identifiquen esos esquemas y tener claves externas.
- El tiempo de inactividad para actualizar no es un inconveniente: debido a que PostgreSQL se escala verticalmente (a medida que crece, se necesita más espacio o más memoria), requiere tiempo de inactividad para actualizar. Los cortes de energía o las fallas también pueden hacer que su base de datos no funcione por un tiempo. Pero a menudo, la elección de tener una estructura relacional y principios ACID supera la posibilidad de interrupciones.