lunes
sep022013
MySQL vs PostgreSQL - por qué no deberías usar MySQL
En este interesante video Philip Thrasher muestra una serie de comportamientos erróneos/poco esperados de MySQL cuando se usa MyISAM que pueden ocasionarnos problemas bastante serios en nuestros problemas y que, como el ponente demuestra, no están presentes en PostgreSQL. M por ejemplo, el hecho de que ignora restricciones tipo "NOT NULL" para una columna, o que cuando falla una operación no siempre "se queja".
¿Eras consciente de este tipo de problemas? ¿Os habéis topado con ellos alguna vez?
Reader Comments (15)
Ni me los he encontrado ni me parecen raros.
El motor MyISAM es una especie de "Si-SQL", es decir, si las bases de datos NoSQL consisten en acceder a informacion que esta en un fichero sin usar el lenguaje SQL, el motor MyISAM es acceder a informacion que esta en un fichero usando lenguaje SQL, pero nada mas. Ni ACID, ni restricciones, ni nada.
El que use MyISAM tiene que ser consciente de lo que esta usando. Un motor que accede muy rapido a leer informacion porque ahorra mucho tiempo en hacer comprobaciones, y que es valido para aplicaciones que van a tener muchas mas lecturas que escrituras y que si se pierde algo no pasa gran cosa (como un foro de internet).
Y no os imaginais la cantidad de gente que tiene una base de datos MyISAM y pregunta que tiene mal en el codigo porque sus transacciones no funcionan. Una vez incluso vi un tutorial de TransactionManagers con tablas MyISAM...
Si tomamos en cuenta que MyISAM ya no es el motor por defecto ni de MySQL, ni de MariaDB ni de Percona parece un análisis anacrónico y sesgado.
La comparación de PostgreSQL con MySQL/MyISAM es un poco injusta, como dijo @nilojg, MyISAM es rápido a costa de ofrecer muy pocas funciones básicas, no es una base relacional "en serio". MyISAM en comparación con PostgreSQL es un mal chiste :D. La comparación debería ser entre PostgreSQL y MySQL/InnoDB, que es uno los backends de MySQL que soporta transacciones y otras "detalles" básicos de cualquier gestor de BBDD relacionales. Dicho esto... se use el backend que se use con MySQL... PostgreSQL es una base de datos relacional que está a años luz de distancia de MySQL... y de cualquier otra base de datos libre. PostgreSQL es la única base objeto-relacional que es comparable a las mejores bases comerciales, y que están a la altura de Oracle por ejemplo. PostgreSQL es el estado del arte, y debería ser siempre considerada seriamente al encarar nuestros proyectos. Otro gran olvidado es FirebirdSQL, una base a la que MySQL no le pisa ni los talones :) ... pero nadie conoce :(
@gorlok
Y en que funcionalidades y/o analisis/estudios te basas para ser tan rotundo?
Un saludo
Aunque estoy de acuerdo en que la comparación es un poco injusta, si veis el video, lo que dice no es que MyISAM no sea relacional, que ya se sabe que no lo es. De lo que se queja, por ejemplo, es de que le pongas un "not null" en una columna y te deje insertar un null (en realidad lo convierte en un valor por defecto), o que permita hacer cosas en vez de dar errores, lo cual es bastante peligroso.
Asi que la queja es que se pasa por el forro lo que le estas diciendo en el SQL y que sea "demasiado listo", no que obviamente no sea relacional.
Y no he visto donde dice que eso solo ocurre al usar MyISAM, aunque podría ser en el contexto que no está en el video.
De los Resultados de la encuesta sobre plataformas tecnológicas del año pasado.
Bases de datos tanto SQL, NoSQL como orientadas a Objeto.
Con una participación del 95,64% a nivel global, sobre un total de 8 tecnologías, la más empleada es MySQL con un 61,24% de adopción y una ventaja de 3,69% sobre Oracle.
PostgreSQL terminó en 3° lugar con un 32.05% (La única desviación importante es en Ecuador (ver la grafica de apertura por países)
Este comentario es al solo efecto de poner en contexto la discusión.
Un saludo
Creo que la comparación es muy sesgada porque el motor predefinido para MySQL es InnoDB. Es el recomendado si quieres usar transaccionalidad. No entiendo por qué dicen que Postgresql está a años luz de MySQL. Yo los veo a un nivel casi igual. Si lo comparas con Oracle creo que si hay diferencia en los tiempos de respuestas, pero solo en consultas complejas con muchos datos. Del resto para mi Postgresql y MySql están casi al mismo nivel. De pronto Postgresql tiene un mejor soporte de SQL estándar pero del resto de cosas y por velocidad y sencillez en el desarrollo creo que MySql tiene ventaja.
Postgres ya ha sido depurado por muchos años por algo ya esta en la versión 9.X, MySql ha ido cambiando de dueños que proponen una versión Enterprice y una Community.
Problemas horribles de lentitud, corrupción de datos y pérdida de los mismos para bases de datos no tan grandes (50GB+), utilizando InnoDB.
Tampoco pongan el argumento de que Facebook utiliza MySQL. La base de datos que utiliza Facebook está totalmente adecuada a sus necesidades, no es el software que instalas con un simple "apt-get".
Eso son generalidades, no un analisis.
Yo he visto base de datos Oracle con "Problemas horribles de lentitud, corrupción de datos y pérdida de los mismos para bases de datos no tan grandes".
Claro, estaba mal configurada y habia que ver el SQL que se ejecutaba.
No entiendo muy bien este partidismo entre BBDD. Supongo que unos discuten si es mejor Messi o Bale y otros que si mySQL o Postgre. El caso es tener algun tema de conversacion para la hora del cafe :-)
Un saludo
Esto de lo que se queja el autor del video ocurre también en InnoDB. En cuanto a la discusión PostgreSQL vs MySQL es como hablar de la diferencia entre una pistola de verdad y otra de fogueo. Podemos entrar a valorar entre otras cosas:
- El soporte de procedimientos almacenados y diferentes lenguajes soportados.
- Alta disponibilidad integrada dentro del núcleo.
- PostGIS.
- Soporte real de multiprocesadores y paralelización de queries.
- Etc etc.
Cada cual que emplee el motor de base de datos que mejor le parezca y convenga pero, si bien es cierto que existen ciertas operaciones en las que MySQL es notablemente más rápido que PostgreSQL (básicamente el conteo de registros de una tabla y las llamadas "bulk queries", en el resto la diferencia no es tanta), como motor no tienen ni punto de comparación.
Además un aspecto importante y que, por desgracia, creo que acrecentará las diferencias a la larga, es el hecho de que detrás de MySQL está una compañía que lo que busca es ganar pasta (algo completamente legítimo por otra parte), pero que redundará en tener una "versión de andar por casa" para el "MySQL gratuito" y otras bastantes más potentes en función del dinero que quieras invertir.
Un saludo.
Me encantan estas discusiones. Si no viviera tan lejos, les invitaba el café y hasta unas cervezas. :-)
Estas discusiones y VS son lo mejor, no sabes con cuanto conocimiento te encuentras solo porque cada uno trata de sacar lo mejor de su defendido... yo no sabia que postgreSQL usaba postGIS y pensaba empezar un proyecto de geolocalizacion con MySQL...
Hola que tal, algo tarde para incorporarme al debate, jejejeje, pero aún así vale la pena.
No cabe duda que MySQL se ha superado con creces desde su ridícula versión 1.0, y digo ridícula, porque era mas confiable un fichero de texto que de una tabla MyIsam.
Hoy día "se dice", "se comenta", que MySQL tiene capacidades de almacenamiento y procesamiento y gestión de datos equiparables a los mejores gestores de base de datos del mundo y ¿qué creen? tienen razón, MySQL es capaz de competir con Oracle y SQL-Server y PostgreSQL, pero.... siempre y cuando sea dos o tres tablitas, bueno, con una tabla es seguro que compita, pero con dos, ya te da problemas.
Aunque mi anterior comentario parezca una burla (que lo es), pero es la verdad, le duela a quién le duela MySQL es para novatos, para aprendices, para principiantes, para quién ni si quiera sabe que es una normalización de tablas.
Se que más de una persona me dirá que utiliza MySQL de manera profesional en aplicaciones con un gran volumen de datos y nunca les ha fallado, y pues si, se las creo, pero lamento decirles, que si siguen utilizando MySQL es porque siguen trabajando como novatos.
Lo único que les puedo decir y es porque lo tengo comprobado, MySQL no sirve para entornos reales, donde se requieren cientos de tablas con una normalización adecuada.
La última vez que intente utilizar MySQL, la base de datos se colapsó con un subquery que involucraba 5 tablas y un total de 100 registros...si, leyeron ustedes bien, cien registros, ¡¡ la base de datos e colapsó con cien registros !!.
Esa misma base de datos y el mismo SubQuery, lo probé en y funcionó al 100% en SQL-Server, Oracle, PostgreSQL y hasta con Access, escuchó usted bien, con Access.
Desde ese entonces me convencí de que MySQL no tiene futuro, hombre, más de 10 años, y con el respaldo de Oracle y aún no han podido hacer que su motor procese 100 registros, es el colmo.
Saludos y espero sus comentarios. Bye, bye.
Se que es un poco tarde para hacer un comentario de Postgresql vs MySQL, pero al día de hoy, y con mejoras significativas en su motor, MySQL sigue siendo una elección poco confiable, al menos para los programadores que se toman en serio el almacenamiento y la integridad de los datos.
Sin rodeos; no hace mucho tiempo, hice una aplicación web con MySQL, no me quedó de otra pues las restricciones del hosting y otros motivos me obligaron a utilizarlo.
Confiando en que ya han pasado muchos años y se le han agregado muchas funcionalidades de una verdadera base de datos, pues decidí utilizarla e implementar una pequeña base de datos, con unos cuantos registros de prueba, 100 registros para ser exactos, y generé una pequeña vista con unos cuantos subquerys, para analizar la información.
¿Cuál fue mi sorpresa?, que al ejecutar dicha vista la base de datos se colapsó y dejó de funcionar. Comencé a eliminar registros para descartar una "carga excesiva" de datos, y el resultado fue que con 20 registros la vista funcionaba correctamente.
Monte varios servidores, en diferentes equipos y el resultado fue el mismo, ¡¡ MySQL se colapsaba con tan solo cien registros !!!
Después monte la misma estructura y la misma cantidad de registros en otras bases de datos pero de SQL-Server, Oracle, PostgreSQL y hasta en Access, y en todas los casos la vista funcionaba sin problemas, incluso hice una carga de varios miles de registros y todo funcionó al 100%.
Mi conclusión es que MySQL, fue, es y seguirá siendo, una imitación burda y nada barata de una base de datos, destinada para quienes no les interesa tener una normalización adecuada de sus tablas, o para quienes consideren su información es desachable.