TSSW2024 / sprint-2

Sprint-2 del desarrollo de Utem-Trading.
MIT License
0 stars 1 forks source link

(Spike - Infraestructure) Base de datos #7

Closed zkodah closed 6 months ago

zkodah commented 6 months ago

Descripción

En esta Spike se busca recopilar información y generar una opción robusta para la ocupación de una base de datos correcta para nuestro proyecto

Tareas

Fecha de Vencimiento

Se ha definido la fecha de entrega para el día 06-05-2024

JoseMalcaR commented 6 months ago

Identificacion de requisitos

Opciones Disponibles:

  1. PostgreSQL: Es una base de datos relacional de código abierto que ofrece una sólida combinación de rendimiento, escalabilidad y características avanzadas. Es conocida por su soporte ACID, alta disponibilidad, capacidades de replicación y extensibilidad a través de extensiones y funciones personalizadas. PostgreSQL es una opción popular para aplicaciones críticas y de alto rendimiento, incluyendo aplicaciones financieras.
  2. MySQL: Es otra opción de base de datos relacional de código abierto ampliamente utilizada en aplicaciones de alta disponibilidad. Ofrece capacidades ACID, escalabilidad horizontal y vertical, y un sólido rendimiento en entornos de producción. MySQL es conocida por su facilidad de uso y amplia adopción en la comunidad, lo que la convierte en una opción popular para una variedad de aplicaciones, incluyendo aplicaciones de trading.
  3. MongoDB: Es una base de datos NoSQL que se destaca por su flexibilidad, escalabilidad y rendimiento. Es especialmente adecuada para aplicaciones que manejan grandes volúmenes de datos no estructurados o semi-estructurados, como datos de mercado en tiempo real. MongoDB ofrece replicación automática, particionamiento y capacidad de escala horizontal, lo que la hace adecuada para aplicaciones que requieren alta disponibilidad y rendimiento.
  4. Casandra: Apache Cassandra es una base de datos distribuida NoSQL diseñada para ofrecer escalabilidad lineal y alta disponibilidad en entornos distribuidos. Es especialmente adecuada para aplicaciones que requieren almacenamiento y recuperación de datos a alta velocidad, como aplicaciones de trading que manejan grandes volúmenes de transacciones en tiempo real. Cassandra ofrece características como replicación activa-activa, tolerancia a fallos y capacidades de recuperación ante desastres.
  5. Redis: Redis es una base de datos en memoria de código abierto que ofrece un rendimiento extremadamente rápido y baja latencia. Es especialmente adecuada para aplicaciones que requieren acceso rápido a datos en tiempo real, como la gestión de sesiones de usuario, la cache de datos y la gestión de colas. Redis ofrece capacidades de replicación y alta disponibilidad, lo que la hace adecuada para aplicaciones críticas como las de trading.

Comparacion de caracteristicas

Como ya tenemos claro los requisitos y las bases de datos a elegir, vamos a comparar las caracteristicas de cada DBMS con los requisitos de nuestro proyecto.

  1. Si priorisamos la consistencia de los datos y necesitamos una base de datos relacional robusta, PostgreSQL sería una excelente opción ya que ofrece soporte completo de ACID, alta disponibilidad, escalabilidad y una amplia gama de características avanzadas.
  2. Si vamos a trabajar con grandes volúmenes de datos no estructurados o semi-estructurados y necesitamos escalabilidad horizontal: MongoDB podría ser la mejor opción. Su arquitectura NoSQL flexible y su capacidad de escala horizontal la hacen adecuada para aplicaciones que manejan grandes cantidades de datos en tiempo real.
  3. Si la velocidad y la baja latencia son críticas y podemos tolerar una eventual pérdida de datos, Redis podría ser una opción a considerar. Su almacenamiento en memoria y su rendimiento extremadamente rápido lo hacen adecuado para aplicaciones que requieren acceso rápido a datos en tiempo real, como la gestión de sesiones de usuario y la cache de datos.
  4. Si necesitamos una base de datos distribuida altamente escalable y tolerante a fallos: Cassandra sería una opción sólida. Su arquitectura distribuida y su capacidad de escala lineal la hacen adecuada para aplicaciones que requieren alta disponibilidad y rendimiento en entornos distribuidos.
  5. Si preferimos una solución de base de datos relacional ampliamente adoptada y con una gran comunidad de usuarios: MySQL sería una opción confiable ya que ofrece características sólidas de ACID, escalabilidad y una amplia gama de herramientas y recursos de la comunidad.

Opcion Elegida

Teniendo en cuenta las caracteristicas de cada base de datos, y que la mayoria son de codigo abierto o tienen una version gratuita, tambien considerando las preferencias de los desarrolladores backend, la opcion elegida es PostgreSQL.