MySQL vs PostgreSQL para aplicaciones web [cerrado]

122

Estoy trabajando en una aplicación web que usa Python (Django) y me gustaría saber si MySQL o PostgreSQL serían más adecuados cuando se implementan para la producción.

En un podcast, Joel dijo que tenía algunos problemas con MySQL y que los datos no eran consistentes.

Me gustaría saber si alguien tuvo tales problemas. ¿También cuando se trata de rendimiento que se puede modificar fácilmente?

cnu
fuente

Respuestas:

127

Una nota para futuros lectores: el texto a continuación se editó por última vez en agosto de 2008. Eso fue hace casi 11 años a partir de esta edición. El software puede cambiar rápidamente de una versión a otra, por lo que antes de elegir un DBMS según los consejos a continuación, investigue un poco para ver si aún es preciso. Verifique las respuestas más recientes a continuación.


¿Mejor?

MySQL es mucho más comúnmente proporcionado por los servidores web.

PostgreSQL es un producto mucho más maduro.

Hay una discusión que aborda su "mejor" pregunta

Aparentemente, de acuerdo con esta página web , MySQL es rápido cuando los niveles de acceso concurrente son bajos y cuando hay muchas más lecturas que escrituras. Por otro lado, exhibe baja escalabilidad con cargas crecientes y relaciones de escritura / lectura. PostgreSQL es relativamente lento a niveles de concurrencia bajos, pero se escala bien con niveles de carga crecientes, al tiempo que proporciona suficiente aislamiento entre los accesos concurrentes para evitar ralentizaciones con altas tasas de escritura / lectura. Luego se vincula a una serie de comparaciones de rendimiento, porque estas cosas son muy ... sensibles a las condiciones.

Entonces, si su factor de decisión es "¿ cuál es más rápido? ", Entonces la respuesta es "depende. Si realmente importa, pruebe su solicitud en contra de ambos " . Y si realmente le importa, obtiene dos DBA (uno que se especializa en cada base de datos) y haga que sintonicen la basura de las bases de datos, y luego elija. Es sorprendente lo caros que son los buenos DBA; y valen cada centavo .

Cuando importa

Lo que probablemente no sea así, así que simplemente elija la base de datos que le guste y vaya con ella; se puede comprar un mejor rendimiento con más RAM y CPU, y un diseño de base de datos más apropiado, y trucos inteligentes de procedimientos almacenados, etc., y todo eso es más barato y más fácil para el sitio web X aleatorio que agonizar sobre cuál elegir, MySQL o PostgreSQL y ajuste especializado de DBA caros.


Joel también dijo en ese podcast que el comentario volvería a morderlo porque la gente diría que MySQL fue una mierda, Joel no pudo recuperar una countfila. El plural de anécdota no es datos. El dijo :

MySQL es la única base de datos contra la que he programado en mi carrera que ha tenido problemas de integridad de datos, donde haces consultas y recibes respuestas sin sentido, que son incorrectas.

y él también dijo:

Es solo una anécdota. Y esa es una de las cosas que me frustra, en realidad, sobre los blogs o simplemente Internet en general. [...] Hay una extraña tendencia a convertir las anécdotas en verdades y, en realidad, como blogger estoy empezando a sentirme un poco culpable por esto

Josh
fuente
15
Y otro punto es que, si usa un marco, es posible que pueda abstraer su código de la base de datos, para que pueda cambiar fácilmente.
Don Jones
"¿Cual es mas rápido?" . Depende de lo que desee, si desea una base de datos compatible con ACID, lea esto: randombugs.com/linux/mysql-postgresql-benchmarks.html
Sacx
47
También digno de mención. MySQL es propiedad de Oracle. Por lo tanto, no se le permitiría competir con sus productos pagos.
unixman83
15

Solo repicando muchos meses después.

Las capacidades geográficas de las dos bases de datos son muy, muy diferentes. PostgreSQL tiene la excepcional extensión PostGIS. La funcionalidad geográfica de MySQL es prácticamente cero en comparación.

Si su servicio web tiene un componente de ubicación, elija PostgreSQL.

Verano
fuente
14

No he usado Django, pero he usado tanto MySQL como PostgreSQL. Si usará su base de datos solo como un back-end para Django, no importa mucho, ya que abstraerá la mayoría de las diferencias. PostgreSQL es un poco más escalable porque no golpea la pared de ladrillo tan rápido como MySQL a medida que aumenta el tamaño de datos / conteo de clientes.

La verdadera diferencia viene si estás haciendo un nuevo sistema. Entonces recomendaría PostgreSQL sin dudas, porque tiene muchas más características que hacen que su capa de base de datos sea mucho más personalizable, para que pueda ajustarla a los requisitos que pueda tener.

Pantera gris
fuente
7

Aunque está un poco desactualizado, valdría la pena leer la página de MySQL Gotchas . Muchos de los elementos enumerados allí siguen siendo ciertos, que yo sepa.

Yo uso PostgreSQL.

Greg Hewgill
fuente
6

Yo uso ambos ampliamente. Mi elección para un proyecto en particular se reduce a:

  • Licencias: ¿distribuirá su aplicación (IANAL)?
  • Infraestructura existente y base de conocimiento
  • Cualquier salsa especial que tengas que tener.

Por salsa especial me refiero a cosas como:

  • Replicación fácil / barata = MySQL
  • Enormes problemas de conjunto de datos con pequeños resultados = PostgreSQL. Use las extensiones de idioma y tenga operaciones de datos muy eficientes. (PL / Python, PL / TCL, PL / Perl, etc.)
  • Interfaz con bibliotecas estadísticas R = PostgreSQL PL / R disponible en debian / ubuntu
Lance Rushing
fuente
3
Postgres también tiene una replicación fácil / barata. Simplemente no está integrado , porque hay media docena para elegir, cada uno con sus propias partes buenas y malas. Para que pueda elegir el uno replicación mediocre para MySQL, o desde uno de los muchos para PostgreSQL. Tu elección.
Randal Schwartz
66
PostgreSQL 9.0+ tiene una replicación WAL binaria incorporada que es muy fácil de configurar.
Sean
1

Bueno, no creo que deba usar una marca de base de datos diferente en cualquier desarrollo anterior (compilación, puesta en escena, producción) ya que eso volverá a morderlo.

Según tengo entendido, PostgreSQL es una implementación de base de datos más 'correcta', mientras que mySQl es menos correcta (menos compatible) pero más rápida.

Entonces, si está escribiendo una aplicación CRUD, mySQL es el camino a seguir. Si necesita ciertas características de su base de datos (si no está seguro, entonces no lo hace), entonces es posible que desee examinar postgreSQL.

SCdF
fuente
1

Si está escribiendo una aplicación que puede distribuirse bastante en diferentes servidores, MySQL tiene mucho peso sobre PostgreSQL debido a la portabilidad. PostgreSQL es difícil de encontrar en servidores web poco satisfactorios, aunque hay algunos. En la mayoría de los casos, PostgreSQL es más lento que MySQL, especialmente cuando se trata de un ajuste fino al final. Con todo, yo diría que le des una oportunidad a PostgreSQL por un corto período de tiempo, de esa manera no lo estás evitando por completo, y luego juzgas.

tslocum
fuente
1
Estoy de acuerdo con usted en que más servidores web de baja calidad deberían ofrecer una opción en lugar de poner MySQL en nuestras caras. Sin embargo, cuando vayas con alojamiento compartido, estás a merced de ellos de todos modos. Por lo tanto, una elección de DBM no importa tanto.
unixman83
0

Gracias. He usado Django con MySQL y está bien. Elija su base de datos en las características que necesita. Difícil de comparar MySQL y Postgres. Es mejor comparar Postgress con SQl Server.

Stephen Cox
fuente
0

@WolfmanDragon

PostgreSQL tiene (pequeño) soporte para objetos, pero es, por naturaleza, una base de datos relacional. De su página acerca de :

PostgreSQL es un potente sistema de base de datos relacional de código abierto .

marcospereira
fuente
2
Sistema de gestión de bases de datos relacionales de objetos Sistema de gestión de bases de datos relacionales ISA. Si sigue leyendo la documentación de PostgSQL, encontrará que PostgSql es un ORDBMS. Quizás esté confundiendo ORDBMS con ODBMS como Objectivity / DB.
WolfmanDragon
-1

MySQL es un sistema de gestión de base de datos relacional , mientras que PostgreSQL es un objeto del sistema de gestión de base de datos -relational . PostgreSQL es adecuado para desarrolladores de C ++ o Java, ya que nos da más control sobre cómo se escriben las consultas. ORDBMS también nos proporciona objetos y tipos definidos por el usuario. Las consultas SQL en sí mismas están mucho más cerca de los estándares ISO que MySQL.
¿Necesita un ORDBMS o un RDBMS? Eso responderá mejor a tu pregunta.

WolfmanDragon
fuente
Eso es una simplificación excesiva; el hecho de que no necesite un ORDBMS no significa necesariamente que deba usar MySQL. Hay otras diferencias más significativas, ¿no?
Don Jones
1
Estás en lo correcto. Estoy tratando de no parecer un empujador de PostgreSQL. No veo ninguna razón real para usar otra cosa que no sea PostgreSQL a menos que el diseño requiera una verdadera base de datos de objetos. No veo ningún punto en MySQL más que más personas están familiarizadas con él.
WolfmanDragon