¿Qué base de datos debo usar para crear mi aplicación web y móvil?

Entre PostgreSQL y MySQL, generalmente no hay una buena razón para usar MySQL sobre PostgreSQL, así que eliminemos eso de la lista.

SQLite3 es fantástico si desea una base de datos incrustada en una situación en la que tiene recursos limitados o necesita una experiencia de instalación perfecta para el usuario. SQLite es la base de datos estándar en aplicaciones móviles en Android e iOS (desde el iPod original) e incluso está incrustado en algunos navegadores web como WebSQL (aunque está en desuso ya que la gente de Chrome quería que el estándar se basara en el Implementación de SQLite, mientras que la gente de Mozilla pensó que esta era una forma ridícula de definir estándares).

Como mencionó las aplicaciones web, no debería usar SQLite. Requiere bloquear el acceso al archivo de la base de datos para cada escritura, y dado que se ejecuta dentro del proceso de su aplicación, eso significa que solo puede tener un proceso ejecutándose con acceso de escritura a la base de datos (aunque varios subprocesos están bien). Python tiene un bloqueo de intérprete global, lo que significa que puede usar efectivamente solo un núcleo en una CPU de varios núcleos a menos que ejecute múltiples procesos, lo que no puede porque SQLite no lo admite. Entonces: no use SQLite si está creando aplicaciones web en Python.

Lo que nos deja PostgreSQL y MongoDB.

PostgreSQL, como todas las bases de datos SQL (incluido SQLite), es una base de datos relacional. Se especializa en el seguimiento de las relaciones entre datos y en ayudarlo a recuperar algo si sabe algo relacionado con él.

Por ejemplo, si tiene dos tablas de base de datos, diga “Usuarios” para todos los usuarios y “Publicaciones” para todas las publicaciones realizadas por un usuario determinado, siendo “Posts.user_id” una referencia de clave externa para “Usuario”. id “, tiene un esquema en el que una publicación tiene un solo usuario y, como corolario, un usuario puede tener muchas publicaciones (dado que los propios usuarios no definen ninguna relación con las publicaciones, la relación es de la otra dirección). SQL hace que sea realmente fácil trabajar con tales relaciones. Puede decir “dado un usuario, consígame todas las publicaciones que hagan referencia a este usuario” o “dada esta publicación, consígame el usuario referido”.

Todas las bases de datos SQL pueden hacer consultas relacionales como esta, pero PostgreSQL es realmente muy bueno en esto. Sin embargo, existe un caso de uso avanzado para el que PostgreSQL no es tan bueno para: gráficos. Llegaremos a eso en un minuto.

La relación de usuarios y publicaciones anterior es un ejemplo de una relación de “uno a muchos” (o “muchos a uno”, según el lado desde el que esté mirando). Hay algo más llamado una relación de “muchos a muchos” que es básicamente un combo de “muchos a uno + uno a muchos”. En nuestro ejemplo hipotético de usuarios y publicaciones, si quisiéramos hacer posible que una publicación tenga más de un usuario, lo haríamos así: “Usuarios Publicaciones” donde esta nueva tabla “Usuarios_Publicaciones” tiene exactamente dos columnas, una referencia de clave externa a una fila en Usuarios, otra referencia de clave externa a una fila en Publicaciones. Para cada combinación única de Usuario y Publicación, puede agregar otra fila en la tabla Users_Posts que vincula ese usuario y publicación.

Aquí hay una situación muy común en la que necesita un modelo de este tipo: mapeo de películas y sus actores. Tiene una tabla para películas y actores, y una tabla de unión de “muchos a muchos” que los une a ambos.

Digamos que quiere saber en qué películas aparecieron los actores A y B. Eso es fácil: “SELECCIONAR * DESDE Películas DONDE ENTRAR (SELECCIONAR películas_id DESDE Películas_Actores DONDE ENTRAR actores_id (A, B))”.

¿Ves lo que hicimos? Esta es una consulta anidada. Comenzando desde el interior, primero solicitamos todos los ID de película en la tabla de unión que presentan a los actores A o B, luego solicitamos todos los detalles de la tabla de Películas donde la identificación de la película está en los resultados de la consulta anterior.

Ahora, ¿qué pasa si tienes una situación en la que A y B nunca han aparecido juntos en una película, pero quieres saber si tienen co-actores comunes? Esto es como LinkedIn o Facebook, donde estás mirando el perfil de alguien con quien no eres amigo, pero LinkedIn o Facebook te dicen que tienes amigos comunes. Este es un patrón de búsqueda de gráficos y es el tema de un tipo de base de datos completamente diferente llamado, apropiadamente, una base de datos de gráficos . Busque Neo4j para ver un ejemplo. Aunque los datos de gráficos se pueden modelar usando una base de datos relacional como PostgreSQL, es mejor usar algo especializado como Neo4j.

Y finalmente, MongoDB. ¿Para qué es esto? MongoDB no es una base de datos gráfica, ni siquiera una base de datos relacional . Al igual que CouchDB, es una base de datos de documentos y representa el otro extremo de la escala. ¿Qué sucede si desea almacenar todos los detalles de una película en un solo lugar y no está interesado en poder hacer una referencia cruzada de los datos? Las bases de datos relacionales quieren que “normalice” sus datos almacenando cada pequeño detalle en una tabla separada, pero le resulta molesto. Solo desea almacenar sus datos en un solo lugar sin tener que pensar demasiado. Todavía está descubriendo qué datos desea almacenar, por lo que por ahora solo desea volcarlos en algún lugar y preocuparse por consultarlos más adelante. Para eso son exactamente las bases de datos de documentos y MongoDB es el rey de esa colina.

PostgreSQL introdujo un tipo de datos JSON en la versión 9.2 y un tipo JSONB más eficiente en 9.4 (la versión actual), por lo que si tiene una combinación de datos relacionales y de documentos (que es muy probable), es posible que desee seguir con PostgreSQL en sí (consulte ¿Qué hay de nuevo en PostgreSQL 9.4).

Espero que ayude.

www.deepimmersionmedia.com

Supongo que la respuesta “rápida y fácil” es: Cualquiera que sea más cómodo y experto en usar es una buena opción. Es difícil recomendar una base de datos sobre otra sin saber más sobre los requisitos, etc.

De improviso, diría que MySQL es una buena opción si desea alojar la base de datos externamente. MySQL es quizás el contendiente más “universal”. Funciona bien, es fácil de usar y lo suficientemente popular como para que encontrar ayuda con problemas sea bastante fácil.

Por otro lado, si está buscando incrustar la base de datos en un teléfono o algo así, es posible que desee ver SQLite por muchas de las mismas razones.

Lo primero que debe resolver es: ¿está creando una aplicación web para trabajar en computadoras, tabletas y teléfonos inteligentes? ¿O estás creando dos aplicaciones: la aplicación web que acabamos de describir más una aplicación de teléfono, del tipo que descargas de iTunes?

En el primer caso, puede elegir la base de datos de código abierto que desee: MySQL probablemente sería una buena opción. En el segundo caso, estará limitado a la tecnología de la aplicación del teléfono (por ejemplo, veloz para iPhone, algo más para Android). Una vez que haya elegido las tecnologías de la aplicación de su teléfono, debe elegir la tecnología de la aplicación web en función de su compatibilidad con estas dos opciones tecnológicas fijas. Por ejemplo, puede haber una forma para que algunas bases de datos hablen tanto con aplicaciones telefónicas como con aplicaciones web, en cuyo caso esa es una buena opción para usted. No desea que dos bases de datos contengan la misma información si puede evitarla.

Ve con firebase. . . Tiene todo lo que uno necesita. . . Solo asegúrese de que los datos se puedan convertir al formato JSON. . . Use la URL de la imagen en JSON y listo. . . Es rápido, fácil y tiene literalmente menos mantenimiento. . .

More Interesting

Servicio wiki de Whatsapp, ¿cómo funciona este servicio?

¿Cómo es el proceso de desarrollo en Facebook?

¿Cuáles son algunas empresas de desarrollo web y móviles con sede en LA?

¿Se puede usar DigitalOcean como servidor para almacenar fotos y bases de datos para una aplicación móvil similar a Instagram?

¿En qué se diferencia el trabajo en el desarrollo de aplicaciones móviles del de la web?

¿Mis conversaciones web de WhatsApp están almacenadas en mi computadora?

¿Cuáles son las opciones tecnológicas para desarrollar un servidor común entre una aplicación móvil y una aplicación web?

¿Necesitamos codificación del lado del servidor para la aplicación de mensajería si utilizamos Firebase?

¿Debo invertir mi tiempo en crear un sitio web o crear una aplicación móvil?

Cómo usar la base de datos de mi sitio web en mi aplicación híbrida usando Cordova

¿Qué tan difícil es crear un juego como Choque de clanes? ¿Qué tipo de inversión y habilidad se requiere?

¿Qué aplicación web y móvil crees que el sector bancario debería desarrollar para el punto de vista de los clientes y del banco?

¿Puede alguien sin experiencia en programación, que acaba de aprender el desarrollo web y de aplicaciones, crear un sitio web o aplicación popular?

¿Debo seguir con el marco Ionic 1, que conozco muy bien, o aprender React-Native o Ionic 2 para un nuevo proyecto para un cliente en este momento?

¿Cuál es la mejor aplicación para el desarrollo de bases de datos?