¿Cuáles son las consideraciones clave al elegir una tecnología de base de datos como PostgreSQL vs MongoDB?

Primero, cualquier discusión sobre “X vs Y” donde X e Y son nombres de productos y X es significativamente diferente de Y muestra falta de consideración e indica que el autor escuchó algunas palabras clave y no sabe nada más que eso. Si esta pregunta se ha formulado como “base de datos relacional versus no relacional”, la percibiría de manera diferente, pero lo más importante ahora sería comprender los principios básicos de la base de datos. Asi que:

  1. No tiene que hacer una elección, puede usar ambos al mismo tiempo. En algún momento, probablemente tendrá que hacerlo: la mayoría de los sitios en los que he estado trabajando hasta ahora eventualmente se volvieron lo suficientemente complejos como para requerir características de ambos lados.
  2. Esto cambia la pregunta a “¿cuál debo usar para qué?” o “dada la aplicación en la que estoy trabajando, ¿puede alguno de ellos cumplir con todos los requisitos conocidos?”.
    De cualquier manera, la base de datos está definida por los requisitos de la aplicación, por lo que no puede discutir la elección de la base de datos sin especificar sus casos de uso exactos.
  3. Las bases de datos relacionales son como martillos: son buenas para la mayoría de los clavos, y una no es muy diferente de la otra en términos de modelo de datos y operaciones compatibles. Esto los convierte en un buen punto de partida si no tienes idea.
    También a pequeña escala es más fácil emular características no relacionales en db relacional que de otra manera.
  4. Las bases de datos no relacionales son como destornilladores hechos para tornillos muy específicos: si necesita uno, no puede usar ningún otro. En algún momento obtendrás una colección de varios de ellos, utilizados para fines muy específicos. No puede usar un destornillador plano genérico para tornillos en forma de estrella, y no puede usar uno en forma de inicio para tornillos triangulares.
  5. Cuando debe tener una base de datos relacional:
    – almacena datos que controla, conoce bien y necesita garantías estrictas sobre su integridad (por ejemplo: si tiene una identificación de usuario en un lugar, debe existir un usuario con esta identificación, y cualquier intento de insertar uno que no exista debe fallar)
    – estás usando transacciones
    – espera que la base de datos realice operaciones complejas que modifican o extraen datos y escribir código que extrae datos de db y hace lo mismo no es una opción (caso de uso: tiene un tipo de informe que puede escribir algunos sql, pero nada más, y sucede ser tu jefe)
    – su modelo de datos encaja perfectamente en tablas y columnas y no excede la capacidad de un solo servidor
  6. Cuando debe tener una base de datos no relacional:
    – sus datos no se ajustan al modelo relacional (ejemplo: búsqueda de texto completo, almacenamiento en caché, contadores)
    – no conoce ni controla sus datos (ejemplo: extraer algo de proveedores externos que puede cambiar en cualquier momento y solo accede a parte de ellos)
    – sus datos no caben en un solo servidor (considero la replicación y el fragmentación como una forma de base de datos no relacional)
    – tiene requisitos de rendimiento específicos que el modelo relacional no puede cumplir
  7. Por supuesto, hay un área gris donde podría usar cualquiera, pero es bastante pequeña.
    En ese caso, sugeriría db relacional, ya que es una solución más madura y menos propensa a errores.

Puedo compartir algunas compensaciones que he meditado al decidir sobre la tecnología de base de datos, lo que he hecho varias veces en mi carrera.

  • La consideración más importante, creo, es evaluar qué tipo de tecnología su equipo ya conoce. Si está trabajando con personas bien versadas en bases de datos relacionales, ¿realmente desea presentar una nueva forma de pensar, que tecnología como NoSQL requiere? Quizás lo que buscas es la novedad, pero tendrás que pensar en entrenar a tu equipo actual o adquirir el talento necesario para apoyar una nueva tecnología.
  • ¿Cuáles son los requisitos de las aplicaciones que está creando? Muchos de los requisitos más importantes no son funcionales. Por ejemplo, ¿su aplicación requiere escalabilidad horizontal en la capa de la base de datos? ¿Su aplicación se basa en una interfaz SQL? Las respuestas a preguntas como estas te ayudarán a orientarte con éxito.
  • ¿Está dispuesto a pagar por el software comercial o prefiere ir al código abierto? Hay ventajas y desventajas para cualquier ruta.
  • ¿Cuánta participación mental tienen las diversas soluciones que está considerando? Por ejemplo, ¿hay muchos libros sobre la tecnología? ¿Hay bloggers que comparten sus experiencias, trucos y sugerencias o lecciones aprendidas? Estas fuentes son a veces más valiosas incluso que la capacitación formal ofrecida por la compañía que vende una solución particular.

Hay muchas otras consideraciones que otros probablemente compartirán, pero he usado las anteriores con éxito en el pasado para tomar la decisión sobre la tecnología de bases de datos.

Primero, la estructura de datos. ¿Cuál es la estructura de datos óptima? ¿Es una mesa? ¿Son los objetos? ¿Es un gráfico? Esto depende en gran medida de qué tipo de datos necesita almacenar y qué tipo de búsquedas debe hacer. Si sus datos no funcionan bien en una tabla, muchos encabezados cambiantes, considere NoSQL, como mongo. Si necesita amplias funciones relacionales, quédese con SQL. Si necesita atravesar muchas conexiones, considere una base de datos gráfica.

La segunda consideración sería, ¿qué características necesita? ¿Puede hacer que funcione con un conjunto de características SQL simple o necesita cosas avanzadas como búsquedas de proximidad geográfica? Ahí es donde comenzarías a moverte a PostGresQL.

Finalmente, hay problemas de escala y velocidad, y esto está realmente informado por su experiencia previa. Las consideraciones para cada tecnología de base de datos, bloqueos de escritura, duplicación, etc. son similares, pero tienen implementaciones diferentes.

Desde mi experiencia, estoy muy contento con firebase para una tienda rápida de valores clave que está disponible en el lado del cliente y del lado del servidor. Requiere trabajo adicional para cosas como atravesar registros relacionales, y la GUI es casi inútil para buscar, pero la compensación de no tener que escribir puntos finales vale la pena.