Autor Tema: que opinan de MySQL ?  (Leído 7891 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re:que opinan de MySQL ?
« Respuesta #15 : mayo 09, 2014, 07:25:29 pm »
vaia, al fin alguien viene a hablar técnicamente... y de casos concretos...

....., los ejemplos expuestos no son basados en algo no parametrizado... sino en la definición de una tabla como tal...

diseñar una tabla con un campo que no permita NULOS y que al hacer un insert los permita, no es bajo ningún concepto falta de parametrización... yo no estoy comparando features estoy comparando formas "básicas"...

eso de que se "puede" configurar modo estricto esta demás, con los ejemplos del video...

sino que al momento de crear la tabla diga: "mire pero aunque le ponga que no acepta nulos, siempre los podrá guardar" .... o sea helloooou

y ese es mi punto....

de que me sirve almacenar una fecha "31-febrero-2003" y que cuando lo guarde me diga registro guardado....  las fechas no son básicas acaso....?


Mi punto exactamente.

En base a lo que escribis pareciera que las validaciones en tus programas son hechas por la base de datos y no por el sistema en si, hay muchos problemas con eso:

1. Si usas un ORM en tu sistema no podes asumir que será Postgres la BD y por lo tanto tus validaciones tendrian que ser configuradas por cada BD soportada por el abstractor de bases de datos.

2. Si tu sistema depende del mensaje de error de la BD para determinar el campo erroneo hay una penalidad de rendimiento ya que tenes que enviar la consulta a la BD  para darte cuenta que la fecha 31-Feb-2003 estaba erronea.

Cuando se trata de sistemas a nivel de producción en grandes empresas resulta que ni MySQL, ni Postgres (ni ninguna BD dicho sea de paso) se instalan y se usan sin configurarlas, generalmente habrá un DBA que configurará la BD con los parametros necesarios como es el modo estricto, ajustes de memoria, deshabilitar motores de BD sin uso, ajuste de balance y distribucion de carga, replicacion, etc.

Quizá aqui se erra un poco en la falta de sanitización de datos que se pasan a la BD, en tu ejemplo decis que:

diseñar una tabla con un campo que no permita NULOS y que al hacer un insert los permita, no es bajo ningún concepto falta de parametrización... yo no estoy comparando features estoy comparando formas "básicas"...

Pero el error esta precisamente en que MySQL no te guarda un NULL en un campo que no permite NULL si no que hace un CAST automatico a una cadena vacia y te diré que en la mayoria de casos es hasta lo que el programador talvez esperaba.

Aqui entra el caso de conocer los aspectos de MySQL a profundidad, por ejemplo insertar un NULL o 0 (cero) en un index con autoincremento hace que este genere el siguiente número en la serie.

Comprender a profundidad como MySQL trata los NULLs requiere de al menor leer las siguientes dos paginas:

https://dev.mysql.com/doc/refman/5.0/es/working-with-null.html
http://dev.mysql.com/doc/refman/5.0/es/problems-with-null.html

En fin, para terminar te digo que MySQL no es algo de "hobbie" ni para "juguetar", si bien sirve para eso por su facilidad tambien su robustes hace que todas estas companias lo usen: http://www.mysql.com/customers/

Digo Facebook, Twitter, Wikipedia, LinkedIn, etc. no pueden haber agarrado lo peor y seguir con ello!

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:que opinan de MySQL ?
« Respuesta #16 : mayo 10, 2014, 09:15:30 am »
1. Si usas un ORM en tu sistema no podes asumir que será Postgres la BD y por lo tanto tus validaciones tendrian que ser configuradas por cada BD soportada por el abstractor de bases de datos.

interesante.... pero tengo un ejemplo aún más interesante....

imaginate que yo use MySQL y cree una aplicación de escritorio "con mi favorito vb.Net" y tuve que validar un campo NULO para que en realidad no acepte nulos... hasta ahí todo bien... vendo la aplicación y listo me marcho.... Luego contratan a alguién para que haga una versión Web, junto con otros dos cheros que programen en Android y otros 4 que programen para iOS... La empresa les exige usar la misma DB por no aceptan la propuesta de tener esparcida su información en plataformas distintas.... que tienen que hacer esos otros programadores??? hacer validaciones innecesarias porque la validación de MySQL no hace lo que debe de hacer... Y que decir de una herramienta que suba información de forma masiva, un Bulk de datos...

ese es mi punto... para que reinventar la rueda cuadrada y perder tiempo en tanta validación si con una debe de bastar!


2. Si tu sistema depende del mensaje de error de la BD para determinar el campo erroneo hay una penalidad de rendimiento ya que tenes que enviar la consulta a la BD  para darte cuenta que la fecha 31-Feb-2003 estaba erronea.
nah... la penalidad siempre existe... lo que difiere es quién lo hace... la App o la DB...


Quizá aqui se erra un poco en la falta de sanitización de datos que se pasan a la BD, en tu ejemplo decis que:

Pero el error esta precisamente en que MySQL no te guarda un NULL en un campo que no permite NULL si no que hace un CAST automatico a una cadena vacia y te diré que en la mayoria de casos es hasta lo que el programador talvez esperaba.

Aqui entra el caso de conocer los aspectos de MySQL a profundidad, por ejemplo insertar un NULL o 0 (cero) en un index con autoincremento hace que este genere el siguiente número en la serie.

Comprender a profundidad como MySQL trata los NULLs requiere de al menor leer las siguientes dos paginas:

https://dev.mysql.com/doc/refman/5.0/es/working-with-null.html
http://dev.mysql.com/doc/refman/5.0/es/problems-with-null.html

imaginate un registro de clientes, donde el NIT no debe de ser NULL.... pero por lo menos hay CINCO aplicaciones que hacen insert a mi tabla... y luego hago una auditoría de esa tabla y encuentro valores NULL... digo p$$ta, como es esta shit, quién y cómo es que tengo valores NULL....

yo como DBA que tengo que hacer ??

leyendo uno de los links me parece gracioso esto:
Citar
Por lo tanto, es totalmente posible insertar cadenas vacias o ceros en columnas marcadas como NOT NULL, ya que son valores NOT NULL
falso!, el valor NULL es distinto de vacío y también distinto de 0... en vb.Net el tipo de dato string tiene esto String.IsNullOrEmpty

acá tengo una versión de SQLServer 2000, de hace 14 años... el vídeo que puse es de hace 3 años... y SQLServer me pega la putiada
Citar
insert into abb values (null);

Cannot insert the value NULL into column 'kaaa', table 'TEST.dbo.abb'; column does not allow nulls. INSERT fails


me acabo de acordar de otra del video.... siempre con la misma tabla de clientes... si el campo SALARIO es un numerico de 6 enteros y 2 decimales... y ya posee unos cientos de registros y alguién  por error cambia la definición de la tabla y esa columna le baja la escala a 2 enteros.... sabiendo que ya maneja información de salario real de clientes, que creen que hace MySQL ????

tada! hace el cambio en la tabla y tadaaa! cambia toooodos los valores automáticamente de ese campo al nuevo valor máximo permitido....

jueeeela....
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14583
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:que opinan de MySQL ?
« Respuesta #17 : mayo 10, 2014, 11:51:03 am »
interesante.... pero tengo un ejemplo aún más interesante....

imaginate que yo use MySQL y cree una aplicación de escritorio "con mi favorito vb.Net" y tuve que validar un campo NULO para que en realidad no acepte nulos... hasta ahí todo bien... vendo la aplicación y listo me marcho.... Luego contratan a alguién para que haga una versión Web, junto con otros dos cheros que programen en Android y otros 4 que programen para iOS... La empresa les exige usar la misma DB por no aceptan la propuesta de tener esparcida su información en plataformas distintas.... que tienen que hacer esos otros programadores??? hacer validaciones innecesarias porque la validación de MySQL no hace lo que debe de hacer... Y que decir de una herramienta que suba información de forma masiva, un Bulk de datos...

ese es mi punto... para que reinventar la rueda cuadrada y perder tiempo en tanta validación si con una debe de bastar!
nah... la penalidad siempre existe... lo que difiere es quién lo hace... la App o la DB...


hablas como todo DBA. un programador NO PUEDE NI DEBE dejar todas las validaciones del lado de la base de datos. esa es una MALA PRACTICA. es mas, cuando escribo mi codigo, no solo valido mis entradas, sino que lo hago AGNOSTICO A LA DB. que significa esto? que como no se con que BD lo voy a ocupar, tengo, POR HUEVOS que validar mis campos, ese ejemplo que estas poniendo vos es clasico ejemplo de programadores dejados.



imaginate un registro de clientes, donde el NIT no debe de ser NULL.... pero por lo menos hay CINCO aplicaciones que hacen insert a mi tabla... y luego hago una auditoría de esa tabla y encuentro valores NULL... digo p$$ta, como es esta shit, quién y cómo es que tengo valores NULL....

yo como DBA que tengo que hacer ??
activarle el modo estricto a mysql como ya te dijeron?


leyendo uno de los links me parece gracioso esto:falso!, el valor NULL es distinto de vacío y también distinto de 0... en vb.Net el tipo de dato string tiene esto String.IsNullOrEmpty

acá tengo una versión de SQLServer 2000, de hace 14 años... el vídeo que puse es de hace 3 años... y SQLServer me pega la putiada

me acabo de acordar de otra del video.... siempre con la misma tabla de clientes... si el campo SALARIO es un numerico de 6 enteros y 2 decimales... y ya posee unos cientos de registros y alguién  por error cambia la definición de la tabla y esa columna le baja la escala a 2 enteros.... sabiendo que ya maneja información de salario real de clientes, que creen que hace MySQL ????

tada! hace el cambio en la tabla y tadaaa! cambia toooodos los valores automáticamente de ese campo al nuevo valor máximo permitido....

jueeeela....

y porque le vas a cambiar la definicion de tipo a una columna QUE YA ESTA LLENA? ya sea MySQL, Oracle o cualquier otra, corres serio riesgo de perder informacion en el proceso. para mi que ya le andas buscando tres pies al gato.

Desconectado Shinryu

  • The Communiter-
  • *
  • Mensajes: 1614
Re:que opinan de MySQL ?
« Respuesta #18 : mayo 10, 2014, 12:08:03 pm »
interesante.... pero tengo un ejemplo aún más interesante....

imaginate que yo use MySQL y cree una aplicación de escritorio "con mi favorito vb.Net" y tuve que validar un campo NULO para que en realidad no acepte nulos... hasta ahí todo bien... vendo la aplicación y listo me marcho.... Luego contratan a alguién para que haga una versión Web, junto con otros dos cheros que programen en Android y otros 4 que programen para iOS... La empresa les exige usar la misma DB por no aceptan la propuesta de tener esparcida su información en plataformas distintas.... que tienen que hacer esos otros programadores??? hacer validaciones innecesarias porque la validación de MySQL no hace lo que debe de hacer... Y que decir de una herramienta que suba información de forma masiva, un Bulk de datos...

ese es mi punto... para que reinventar la rueda cuadrada y perder tiempo en tanta validación si con una debe de bastar!

nah... la penalidad siempre existe... lo que difiere es quién lo hace... la App o la DB...


imaginate un registro de clientes, donde el NIT no debe de ser NULL.... pero por lo menos hay CINCO aplicaciones que hacen insert a mi tabla... y luego hago una auditoría de esa tabla y encuentro valores NULL... digo p$$ta, como es esta shit, quién y cómo es que tengo valores NULL....

yo como DBA que tengo que hacer ??

leyendo uno de los links me parece gracioso esto:falso!, el valor NULL es distinto de vacío y también distinto de 0... en vb.Net el tipo de dato string tiene esto String.IsNullOrEmpty

acá tengo una versión de SQLServer 2000, de hace 14 años... el vídeo que puse es de hace 3 años... y SQLServer me pega la putiada

me acabo de acordar de otra del video.... siempre con la misma tabla de clientes... si el campo SALARIO es un numerico de 6 enteros y 2 decimales... y ya posee unos cientos de registros y alguién  por error cambia la definición de la tabla y esa columna le baja la escala a 2 enteros.... sabiendo que ya maneja información de salario real de clientes, que creen que hace MySQL ????

tada! hace el cambio en la tabla y tadaaa! cambia toooodos los valores automáticamente de ese campo al nuevo valor máximo permitido....

jueeeela....


si hay cierta penalidad en ambos casos, pero sinceramente entre realizar las validaciones en la aplicación,o que ocurra en la BD lo siguiente: que si el valor esta correcto, realiza correctamente la consulta, sino realiza la primera consulta, informa del error, el usuario lo corrige y vuelve a realizar la consulta, el usuario se vuelve a equivocar, realiza otra consulta, informa del error...... la BD deberia responder peticiones innecesarias que se pudieron haber resuelto con una simple validación que tampoco es reinventar la rueda considerando en el caso de php que la mayoria de framework viene ya con funciones de validación.

En el caso de programación movil (android o ios) tambien pondria que si no haces las validaciones en la app, , considera el caso que si las validaciones solo son en la base se podria dar el caso que por consultas de datos erroneos hicieras gastar al usuario su plan de datos.

PD:


hablas como todo DBA. un programador NO PUEDE NI DEBE dejar todas las validaciones del lado de la base de datos. esa es una MALA PRACTICA. es mas, cuando escribo mi codigo, no solo valido mis entradas, sino que lo hago AGNOSTICO A LA DB. que significa esto? que como no se con que BD lo voy a ocupar, tengo, POR HUEVOS que validar mis campos, ese ejemplo que estas poniendo vos es clasico ejemplo de programadores dejados.


 :yao_ming: por gusto escribi el g00mba lo explico mejor
 
« Última Modificación: mayo 10, 2014, 12:13:20 pm por Shinryu »

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14583
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:que opinan de MySQL ?
« Respuesta #19 : mayo 10, 2014, 12:24:28 pm »

 :yao_ming: por gusto escribi el g00mba lo explico mejor
 
de hecho me gusto mucho tu aporte, no habia considerado el punto de vista de las apps moviles.

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re:que opinan de MySQL ?
« Respuesta #20 : mayo 10, 2014, 06:19:47 pm »
imaginate que yo use MySQL y cree una aplicación de escritorio "con mi favorito vb.Net" y tuve que validar un campo NULO para que en realidad no acepte nulos... hasta ahí todo bien... vendo la aplicación y listo me marcho.... Luego contratan a alguién para que haga una versión Web, junto con otros dos cheros que programen en Android y otros 4 que programen para iOS... La empresa les exige usar la misma DB por no aceptan la propuesta de tener esparcida su información en plataformas distintas.... que tienen que hacer esos otros programadores??? hacer validaciones innecesarias porque la validación de MySQL no hace lo que debe de hacer... Y que decir de una herramienta que suba información de forma masiva, un Bulk de datos...

ese es mi punto... para que reinventar la rueda cuadrada y perder tiempo en tanta validación si con una debe de bastar!


Ahi habrian 3 grandes errores si fuera una empresa que se dedicara a hacer sistemas:

1. En tu caso expuesto los programadores nuevos desconocian los requisitos del sistema, sobre todo el manejo de datos nulos.
2. Digamos que "todo esta bien porque la validación la hace Postgres" pero entonces si los programadores nuevos obviaron el punto anterior, entonces tambien van a desconocer que tu BD hace validaciones de NULL osea que el programa de ellos va a colapsar al primer NULL porque no van a manejar el error de la base de datos.
3. No se porque no comence por esto: como ingresas un valor NULL por error desde una interfaz web?, o incluso desde una aplicación de escritorio?. A menos que explicitamente hagas conversion de cadena vacia a NULL o especifiques NULL como valor en tu query NINGUN lenguaje devuelve NULL para un textbox vacio o para un checkbox sin cheque, en otras palabras creo que estamos discutiendo sobre cosas que para comenzar en realidad no pasan.

nah... la penalidad siempre existe... lo que difiere es quién lo hace... la App o la DB...
Lo decis como si la aplicación no tuviera que consultar el pool de sockets para conectarse a una BD, ocupar una conexión de la BD y una gran cantidad de RAM/CPU. Sin contar que en sistemas gigantes la BD se encuentra en otro servidor por lo que estas hablando hacer generar IO en la red para la validación de una fecha. No se como siquiera remotamente esto se puede despreciar.


imaginate un registro de clientes, donde el NIT no debe de ser NULL.... pero por lo menos hay CINCO aplicaciones que hacen insert a mi tabla... y luego hago una auditoría de esa tabla y encuentro valores NULL... digo p$$ta, como es esta shit, quién y cómo es que tengo valores NULL....
Volvemos al punto 3 de los problemas, en todo caso podes encontrar una cadena vacia, no un null, y para seguir no creo que una aplicación web de esta epoca tenga que enviar el formulario para que valide con la BD si el NIT estaba vacio. Tendría que ser un chequeo JS para comenzar y luego uno de lado de servidor.

yo como DBA que tengo que hacer ??
Configurar bien la DB seria un buen comienzo

leyendo uno de los links me parece gracioso esto:
Citar
Por lo tanto, es totalmente posible insertar cadenas vacias o ceros en columnas marcadas como NOT NULL, ya que son valores NOT NULL

falso!, el valor NULL es distinto de vacío y también distinto de 0... en vb.Net el tipo de dato string tiene esto String.IsNullOrEmpty
Creo que leiste mal porque eso esta correcto. De hecho decis que es falso y luego afirmas lo mismo que dice el texto que citaste.


me acabo de acordar de otra del video.... siempre con la misma tabla de clientes... si el campo SALARIO es un numerico de 6 enteros y 2 decimales... y ya posee unos cientos de registros y alguién  por error cambia la definición de la tabla y esa columna le baja la escala a 2 enteros.... sabiendo que ya maneja información de salario real de clientes, que creen que hace MySQL ????

tada! hace el cambio en la tabla y tadaaa! cambia toooodos los valores automáticamente de ese campo al nuevo valor máximo permitido....

jueeeela....


Bueno, para comenzar que DBA cambia un tipo de columna "a prueba y error"?, osea quien en su sano juicio va a cambiar el tipo de una columna de una tabla de una aplicación en producción sin un estudio previo que avale el cambio?.

Primera vez en mi vida que leo un DBA que su seguridad de que hizo bien el cambio es que la BD no le dió error.

Pensa en este caso: el DBA hace el cambio de 6 a 2 decimales en Postgres y no da error porque no comio decimales, luego resulta que viene alguien  y mete el primer salario con 6 decimales y bum, Postgres da error, la aplicacion no sabe como manejarlo y da error, posiblemente genere una excepción y se cierre... así es la forma de trabajar con Postgres?