Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Interferencias en consultas a MySql a traves WEBSERVICE

Estas en el tema de Interferencias en consultas a MySql a traves WEBSERVICE en el foro de Mysql en Foros del Web. He creado un webservice en un servidor externo conectado a una base de datos MySql. Se utiliza, entre otras cosas, para descargar ficheros de texto ...
  #1 (permalink)  
Antiguo 24/06/2014, 02:58
 
Fecha de Ingreso: abril-2013
Mensajes: 2
Antigüedad: 11 años
Puntos: 0
Pregunta Interferencias en consultas a MySql a traves WEBSERVICE

He creado un webservice en un servidor externo conectado a una base de datos MySql.
Se utiliza, entre otras cosas, para descargar ficheros de texto (almacenados en MySql) que localmente se convierten en imágenes, por lo cual los campos tratados son muy extensos.
Me funciona perfectamente si las descargas las esta realizando un solo usuario. Sin embargo cuando más de un usuario accede a descargar datos (imágenes), frecuentemente se producen interrupciones en la descarga.
Estas descargas son peticiones de información, que desde diferentes usuarios y utilizando las misma función de la webservice se realizan en las tablas de la base de datos MySql a través de una consulta SELECT.
No se si el error lo produce la propia webservice al ser requerida por mas de un usuario, o es debido a el tratamiento de los datos al realizar la SELECT en la base de datos.
Me gustaría, si alguien del foro tiene experiencia en ello, me diera alguna pista de lo que me puede estar sucediendo.
Gracias anticipadas y un saludo.
  #2 (permalink)  
Antiguo 24/06/2014, 06:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Interferencias en consultas a MySql a traves WEBSERVICE

Cita:
No se si el error lo produce la propia webservice al ser requerida por mas de un usuario, o es debido a el tratamiento de los datos al realizar la SELECT en la base de datos.
Por lo pronto, MySQL no se comunica por medio de un webservice, sino que el webservice canaliza las peticiones que se envían al servidor de MySQL. No es exactamente lo mismo.
MySQL está encapsulado, y su punto de entrada es un servicio que corre en el mismo servidor al que el webservice accede, y no se comunica directamente con el WS.
Con eso quiero expresar que cualquier problema que afecte al senservice, que corre sobre un Web Server, no implica que tenga relación con BBDD, ni con MySQL. El 99,99 de los problemas que aparecen en ese contexto tienen que ver con la latencia de red, los recursos del Web Server, y errores de diseño para alta concurrencia.
Ahora bien, hay dos niveles de problemas posibles: Por un lado ess altamente probable que el servicio web que usas no esté capacitado para manejar alta concurrencia, y eso sólo se puede resolver a nivel de administración web y programación. Puntalmente eso no es tema de este foro y te recomiendo postear la duda específica en el foro de Web Servers.
A nivel de bases de datos, la alta concurrencia, aún con consultas, también presenta un problema, y por lo que describes te estás topando con uno de los inconvenientes por los cuales siempre recomendamos enfáticamente no almacenar archivos en las tablas, sino sus rutas y los archivos en el servidor web.
Al poner los archivos en la tabla, de la forma que sea, estás saturando el buffer de consultas, y se recarga desde el momento en que N usuarios hacen lo mismo.
Los datos que componen el archivo almacenado en un campo ocupan muchísimo espacio, por pequeño que sea el archivo, porque la base de datos lo manda al buffer antes de transferirlo al web service. Al hacer eso con N usuarios simultáneos, el buffer de consultas se satura rápido y el sistema se ralentiza.
En cambio, cuando sólo almacenas la ruta y el nombre del archivo, aunque se requieran dos peticiones, la segunda (al Web Server, es mucho más rápida ya que se trata de una petición de descarga de un archivo, y no de una masa de datos de la BBDD. Y los Web Server están optimizados para ese tipo de tareas.
Lo más recomendable sería un rediseño de la lógica y extirpar los archivos de las tablas, poniéndolos en una carpeta privada del sitio.
Opcionalmente, también sería bueno aumentar el buffer de consultas (configuración del servidor MySQL), pero eso dependerá de si el servidor es dedicado o compartido. Solo los DBA pueden hacer eso.
Yo encararía una modificación de toda la lógica del caso para hacer algo más eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/06/2014, 01:50
 
Fecha de Ingreso: abril-2013
Mensajes: 2
Antigüedad: 11 años
Puntos: 0
Respuesta: Interferencias en consultas a MySql a traves WEBSERVICE

Hola gnzsoloyo y muchisimas gracias por tus aclaraciones.
Intentare informarme sobre el tema de alta concurrencia en el webservice y postear en el foro de Web Servers.
Respecto al tema de la BBDD MySql, en un campo de texto (longtext) almaceno un string muy grande (archivo). Tu recomendación es almacenar una ruta de acceso a un archivo en el servidor. ¿Dispones de información o un ejemplo de como hacerlo?, por favor, remitelo.
Un saludo y muchas gracias.

Etiquetas: select, webservice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:26.