IMAGENES EN MYSQL

IMAGENES EN MYSQL

Postby Ariel » Mon Jul 07, 2014 6:59 pm

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.
Ariel
 
Posts: 377
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: IMAGENES EN MYSQL

Postby Daniel Garcia-Gil » Mon Jul 07, 2014 7:29 pm

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...
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: IMAGENES EN MYSQL

Postby Antonio Linares » Tue Jul 08, 2014 5:13 am

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
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: IMAGENES EN MYSQL

Postby Ariel » Tue Jul 08, 2014 10:45 am

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.
Ariel
 
Posts: 377
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: IMAGENES EN MYSQL

Postby Kleyber » Tue Jul 08, 2014 12:02 pm

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
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: IMAGENES EN MYSQL

Postby Lautaro » Tue Jul 08, 2014 5:07 pm

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
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Re: IMAGENES EN MYSQL

Postby cnavarro » Tue Jul 08, 2014 5:16 pm

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
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: IMAGENES EN MYSQL

Postby Antonio Linares » Wed Jul 09, 2014 1:41 am

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
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: IMAGENES EN MYSQL

Postby Carles » Wed Jul 09, 2014 6:27 am

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..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1143
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: IMAGENES EN MYSQL

Postby Antonio Linares » Wed Jul 09, 2014 1:26 pm

Carles,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: IMAGENES EN MYSQL

Postby Ariel » Wed Jul 09, 2014 11:51 pm

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.
Ariel
 
Posts: 377
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: IMAGENES EN MYSQL

Postby Carles » Thu Jul 10, 2014 5:42 am

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..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1143
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: IMAGENES EN MYSQL

Postby Ariel » Thu Jul 10, 2014 10:42 am

Carles,

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

salu2, Ariel.
Ariel
 
Posts: 377
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: IMAGENES EN MYSQL

Postby Carles » Thu Jul 10, 2014 12:04 pm

Ariel,

Ejemplo base

Code: Select all  Expand view  RUN
#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..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1143
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: FiveWiDi and 104 guests