IMAGENES EN MYSQL

Post Reply
Ariel
Posts: 309
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

IMAGENES EN MYSQL

Post by Ariel »

Hola a todos,

Segun sus experiencias, que es mejor guardar la imagen, pdf, jgp, word, excell, etc en una tabla en un campo blob o guardar el enlace en un campo texto ?

Gracias,
Salu2, Ariel.
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: IMAGENES EN MYSQL

Post by Daniel Garcia-Gil »

Ariel

Para mi pensar no hay una regla estandar, todo dependera del proposito de la tabla y el campo BOLOB que pienses usar y de la cantidad de archivos (que pueden ser imagenes, documentos, etc) que pienses que puedas usar, del tamaño que puedan contener cada una, por ejemplo no es lo mismo almacenar las imagenes de banderas de los paises, que sabemos son limitadas, a guardar pfds con todas las faturas generadas de una tienda por departamento... otro caso, podrias guardar las imagenes de los empleados pero no documentos que contengan multiple informacion diaria sobre algun proceso comercial...
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: IMAGENES EN MYSQL

Post by Antonio Linares »

Sería muy interesante si todos los que usais ya MySQL nos comentais como guardais las imágenes :-)

Podria vuestra aplicación "escalar" hasta manejar miles, millones de imágenes ? Como lo hariais ? Como lo estais haciendo ?

Y puestos a usar un "Hosting" que pudiese albergar toda esa cantidad enorme de imágenes, cual usaríais ?

A mi se me viene a la cabeza "Amazon" y "Google engine", no creo que ninguna otra solución sea capaz de manejar un volumen tan enorme de datos, pero me encantaría que compartais vuestras experiencias, gracias! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Ariel
Posts: 309
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: IMAGENES EN MYSQL

Post by Ariel »

Gracias por contestar,

Actualmente la situacion la tengo con dbfs, donde guardo el link de la imagen o pdf o lo que sea, pero estamos migrando el sistema a mysql entonces queria ver cual seria la mejor opcion.
Son muchas imagenes y pesadas, hay desde planos hasta facturas, en total hasta ahora van como 3 Gb de archivos de imagenes o pds o lo que sea q meten ahi.

Gracias.
Salu2, Ariel.
User avatar
Kleyber
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: IMAGENES EN MYSQL

Post by Kleyber »

Bueno, en mi caso costumbro almacenar las imagenes en el banco de dados, por causa de la seguridad. Para almacenar imagenes en MySQL tiene estos tipos de campos: TINYBLOB, BLOB, MEDIUMBLOB, e LONGBLOB, que te premiten almacenar desde una imagen muy pequeña hasta una imagen muy grande (usando el tipo de campo LONGBLOB).
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Lautaro
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile
Contact:

Re: IMAGENES EN MYSQL

Post by Lautaro »

Hola,

En mis caso, tal como indica Kleyber, guardo las imagenes en el banco de datos por 2 causar : la primera la seguridad y la segunda la consistencia de los datos, ya que en algun momento nos ocurrio que hubo que cambiar las imagenes de ubicacion y en ese caso hay que actualizar todas las referencias a la imagen, lo que puede resultar muy trabajoso.

En lo práctico, nosotros creamos una tabla con los datos necesarios para referenciar la imagen y un campo blob ( en mysql) para guardar ahi la imagen, asi , si existe la necesidad de mover o hacer un respaldo de los datos, se pueden seleccionar segun algun criterio y salvo que la red sea muy lenta o la imagen muy grande, el proceso funciona muy bien. Eso si, nosotros guardamos la imagen a tamaño original y una miniatura, para hacer aun mas rápido el proceso de vista previa.

Saludos,

Lautaro Moreira
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: IMAGENES EN MYSQL

Post by cnavarro »

Lautaro wrote:Hola,

... el proceso funciona muy bien. Eso si, nosotros guardamos la imagen a tamaño original y una miniatura, para hacer aun mas rápido el proceso de vista previa.

Saludos,

Lautaro Moreira
Muy buena idea
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: IMAGENES EN MYSQL

Post by Antonio Linares »

Lautaro,
nosotros guardamos la imagen a tamaño original y una miniatura
Puedes explicarnos cómo lo haces ó mostrarnos el código que usas ? gracias :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: IMAGENES EN MYSQL

Post by Carles »

Hola,

Partiendo de la base de que nosotros deseamos almacenar ficheros (imagenes,documentos,...) el principal problema radica en la cantidad de información que nuestra aplicación deberá gestionar y los recursos que tenemos. Si nosotros hemos de gestionar solo unos miles de registros la opción de un proveedor normal ya nos soluciona el problema, pero si somos conscientes de que necesitaremos escalar y cada vez mas rendimiento se ha de proveer un buen servicio como p..e 'amazon' del que uno no se preocupa de nada porque ellos mismos se encargan de gestionar el rendimiento de los servers y si necesitos mas capacidad, si hace falta 'te enchufan' otro y ni te enteras... peroooo.

Alerta con el diseño de las tablas de informacion. Sabemos q como diseñadores de aplicaciones de gestión, constantemente hacemos nuestras estadísticas, cálculos,... esto implica en que nos olvidemos de hacer los 'select * ...' en tablas con blob, debemos p.e. tener tablas con id / blob que hagan referencia a otras. Este simple tip en bases de datos pequeñas no se nota en rendimiento pero si en tablas de millones de registros.

Es como usar dbfs en red, unos cuantos miles de registros no se nota en la ejecucion de un programa pero en un entorno de millones de registros es inviable, por lo que tienes q buscar otras soluciones.

Despues hay otro punto importante a tener en cuenta y que es por ejemplo como acceder desde fuentes externas p.e. una app a una imagen. Resulta mas fácil acceder al fichero via ftp o una uri que con el acceso directo a la base de datos. Se consulta a la base de datos q identificador tiene el fichero y posteriormente lo lees.

En el diseño de un sistema documental rapidamente haces una pelota de gigas de datos y a mi me preocupa mucha la integradad de la base de datos, tuve hace tiempo un susto con la base de datos con campos blob y parecia que todo se habia "roto" (me acordabo de los ficheros memo de hace años y se jodian). No habia manera de arreglarla y era o todo o nada. Es por eso la importancia en sistemas con millones de registros y volumen de datos un servicio que te asegure unos iops minimos, unas copia diarias automatizadas, replicaciones, escalados automaticos en rendimiento y seguridad,...

Actualmente uno de los sistemas que uso en mi trabajo esta basado en mysql y todo el tema de documentacion (imagenes y documentos) estan hospedados en carpetas que accedo via ftp desde el cliente. Via web cuando se reciben los datos se almacenan en mysql y los ficheros se renombran y en carpetas. Via app leo rápidamente la bd y si necesito el fichero lo cojo desde una uri. El sistema funciona perfectamente y pienso que la catastrofe de romper la bd, la dejo mas aparcada y el mayor de los males podria ser un fichero corrupto, 'perdido',... (q lo podria rescatar de las copias de seguridad)....
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: IMAGENES EN MYSQL

Post by Antonio Linares »

Carles,

Muy buena explicación, gracias! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Ariel
Posts: 309
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: IMAGENES EN MYSQL

Post by Ariel »

Carles,

podrias indicar como accedes x ftp al archivo de imagen o documento ? Normalmente en mis redes el servidor solo accedo x el ip a la bd no a carpetas...


Gracias.
Salu2, Ariel.
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: IMAGENES EN MYSQL

Post by Carles »

Ariel,

Que te refieres ? Como accedo desde FWH ? o como crear un servidor ftp ?
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
Ariel
Posts: 309
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: IMAGENES EN MYSQL

Post by Ariel »

Carles,

me refieron a como accedes al archivo de imagenes o documento via ftp?

salu2, Ariel.
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: IMAGENES EN MYSQL

Post by Carles »

Ariel,

Ejemplo base

Code: Select all

#include 'fivewin.ch'

#define MY_FTP  "vmweb"
#define MY_USER "cpit"
#define MY_PASW "xxxxxxx'"
#define BUFFER  2000

STATIC oInternet, oFtp

FUNCTION Main()

    LOCAL nOption

    IF !Conecta()
       RETU NIL
    ENDIF

    WHILE ( nOption := Alert( "take an option",;
                       { "&Envia Fitxer", "&Get Fitxer", "T&hree" },;
                       "Please, select" ) ) <> 0

       DO CASE
          CASE nOption == 1 ; EnviaFitxer()
          CASE nOption == 2 ; GetFitxer()
       ENDCASE

    END
    
RETU NIL

*------------------------
STATIC FUNCTION Conecta()
*------------------------

   MsgRun( "Conectant FTP...", "Per favor espera...",;
           { || oInternet := TInternet():New(),;
                If( Empty( oInternet:hSession ),;
                MsgAlert( "Sessio Internet no disponible!" ),),;
                oFTP := TFTP():New( MY_FTP, oInternet, MY_USER, MY_PASW ) } )

   IF Empty( oFTP:hFTP )
      MsgStop( "No puc conectar al FTP !", "Sistema" )
      RETU .F.
   ENDIF

RETU .T.


*----------------------------
STATIC FUNCTION EnviaFitxer()
*----------------------------
    LOCAl cFile := Upper( cGetFile( '*.*' ) )

    IF !File( cFile )
       RETU NIL
    ENDIF

    SendFile( cFile )

    MsgInfo( 'Done!' )

RETU NIL

*--------------------------------
STATIC FUNCTION SendFile( cFile )
*--------------------------------
    LOCAL hSource
    LOCAL oFile
    LOCAL cDesti   := cFileNoPath( cFile )
    LOCAL nBytes
    LOCAL cBuffer  := Space( BUFFER )

    hSource := FOpen( cFile )

    oFile = TFtpFile():New( 'dummy/' + cDesti, oFTP )
    oFile:OpenWrite()

    FSeek( hSource, 0, 0 )

    while ( nBytes := FRead( hSource, @cBuffer, BUFFER ) ) > 0

       oFile:Write( SubStr( cBuffer, 1, nBytes ) )

       SysRefresh()
    end

    FClose( hSource )

    oFile:End()

RETU NIL

*--------------------------
STATIC FUNCTION GetFitxer()
*--------------------------
    LOCAL hTarget
    LOCAL oFile
    LOCAL nBytes
    LOCAL cBuffer  := Space( BUFFER )
    LOCAL cFitxer  := 'A002.jpg       '
    LOCAL cDesti   := 'DOWNLOAD/'

    IF !MsgGet( 'A TENIR EN COMPTE MAJUSCULES/MINUSCULES', 'Nom', @cFitxer )
       RETU NIL
    ENDIF

    cFitxer := Alltrim( Upper( cFitxer ) )

    cDesti  := 'DOWNLOAD/' + cFitxer

    hTarget = FCreate( cDesti )

    oFile = TFtpFile():New( 'dummy/' + cFitxer, oFTP )
    oFile:OpenRead()

    IF oFile:hFile == 0
       Msginfo( 'Fitxer origen no existeix' )
       retu nil
    ENDIF

    while ( nBytes := Len( cBuffer := oFile:Read( BUFFER ) ) ) > 0

       FWrite( hTarget, cBuffer, nBytes )
       SysRefresh()

    end

    FClose( hTarget )

    oFile:End()

    Msginfo( File( cDesti ), 'Fitxer: ' + cDesti )

RETU NIL
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
Post Reply