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

Anexar datos a BLOB sin CONCAT

Estas en el tema de Anexar datos a BLOB sin CONCAT en el foro de Mysql en Foros del Web. Buenas tardes. Voy a plantear una duda, que de antemano advierto que he buscado mucho en Google y que, por otro lado, ha sido planteada ...
  #1 (permalink)  
Antiguo 11/03/2008, 09:04
 
Fecha de Ingreso: julio-2004
Mensajes: 9
Antigüedad: 19 años, 9 meses
Puntos: 0
Anexar datos a BLOB sin CONCAT

Buenas tardes.

Voy a plantear una duda, que de antemano advierto que he buscado mucho en Google y que, por otro lado, ha sido planteada por mí mismo en los foros oficiales de MySQL, pero en 5 ó 6 días nadie me ha respondido.

Ahí va.

Resulta que yo estoy guardando archivos en una columna MediumBLOB (BLOB en definitiva) y para evitar llegar al tamaño máximo de paquete, ello se realiza "a trozos" (en inglés "chunks").

El problema está en que no encuentro cómo anexar datos a un campo de MySQL BLOB sin que en el comando SQL se incluya la secuencia de datos existente a la cual se va a anexar el nuevo "trozo" o "chunk".

Ejemplo:

UPDATE archivos SET datos = CONCAT(datos, 'nuevos datos') WHERE id = 384

La sentencia SQL funciona perfectamente mientras el resultado de concatenar el contenido de "datos" y "nuevos datos" no supere el tamaño máximo de paquete configurado en el servidor MySQL.

Necesitaría encontrar una forma de poder hacer eso mismo, pero sin CONCAT, para poder anexar los "nuevos datos" directamente al campo.

¿Me explico? :D

Gracias de antemano.
  #2 (permalink)  
Antiguo 11/03/2008, 10:44
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Anexar datos a BLOB sin CONCAT

Hola,

Existe una nota muy interesante explicando el comportamiento de la funcion CONCAT y el parametro max_allowed_packet.

http://bugs.mysql.com/bug.php?id=22853

Saludos
  #3 (permalink)  
Antiguo 11/03/2008, 11:15
 
Fecha de Ingreso: julio-2004
Mensajes: 9
Antigüedad: 19 años, 9 meses
Puntos: 0
Re: Anexar datos a BLOB sin CONCAT

Gracias por la respuesta.

Así y todo, ese bug no me afecta.

Estamos hablando de subir un BLOB a trozos para no vulnerar el max_allowed_packet y en este caso no es que CONCAT se esté comportando mal, sino que no encuentro la forma de anexar datos a un campo sin que el contenido que ya existe en el mismo sea incluído en la consulta.

A ver si hay suerte con la próxima sugerencia. Gracias.
  #4 (permalink)  
Antiguo 11/03/2008, 17:46
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Anexar datos a BLOB sin CONCAT

Hola,

Si te afecta el bug o feature request de la nota, dado que MySql no maneja chunks de datos para los tipos LOBs, cada vez que se hace una operacion sobre los LOBs, MySql carga el contenido completo del campo en el buffer, esto te deja con dos problemas,

1. Siempre vas a estar limitado por el parametro max_allowed_packet, que por diseño tiene un limite de 1G.
2. Out of Memory, si el servidor tiene, por ejemplo, 512M de memoria y el lob tiene 800M de datos.

Por lo que pude investigar, dado que el tema se puso interesante, es crear tus propios chunks de datos, reflejados a nivel de registros en la tabla (esto si tienes que manejar mas de 1G por LOB o si tienes poca memoria en el servidor), caso contrario, ajustar el parametro como lo dice en la documentacion, "...You must increase this value if you are using large BLOB columns or long strings. It should be as big as the largest BLOB you want to use..."

Saludos
  #5 (permalink)  
Antiguo 18/03/2008, 20:47
 
Fecha de Ingreso: julio-2004
Mensajes: 9
Antigüedad: 19 años, 9 meses
Puntos: 0
Re: Anexar datos a BLOB sin CONCAT

Buenas noches.

No volví a consultar el foro, perdóname.

Bueno eso realmente no sé si se puede considerar "bug", sino un "feature request", porque veo normal que CONCAT se comporte de tal forma... lo que no veo normal es que no haya una alternativa.

Vaya, la solucion que propones es la que pensé apenas ví el problema (sin ver el bug report), que evidentemente es la única válida en MySQL.

De hecho ya la he implementado y funciona perfectamente.

Gracias de todos modos.
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 05:25.