PDA

Ver la Versión Completa : Archivo GDB de 2.33 Gb!!!!


sercornejov
01-09-2003, 14:26:41
Hola.

Otra vez yo. Hice la aplicación de escaneo de encuestas y tengo el siguiente problema:

La aplicación tona una imagen de 850x1060 pixeles en B/N BMP, que pesa 106 Kb y la divide en tres graficos de 850x350 en B/N BMP y los guarda en un campo blob definido así:

bmps BLOB( 65535, 0 ) según el metaarchivo de IB_SQL y
BMPS BLOB SUB_TYPE 0 SEGMENT SIZE 80 NOT NULL según el metaarchivo de SQL Explorer.

el resultado despues de guardar 2065 imagenes de las de 850x350 fue un archivo GDB de 2.33 Gb.

No entiendo porque, en el peor de los casos, si guardara las imagenes de 850x1060 de 106 Kb (de estas son 695) el resultado es de 72 Mb, el 3% del tamaño que me quedo....

Intuyo que el error es en la deficición del campo...

Sergio

sercornejov
02-09-2003, 08:18:57
Hola.

Veo que 21 personas han leido el mensaje pero no hay respuesta...

No está bien expuesto?
No tiene respuesta?
Es muy estupida la pregunta?
Será que mi mamá me mima?


Sergio....

P.D. Realmente necesito orientación al respecto.

kinobi
02-09-2003, 09:12:20
Hola,

Posteado originalmente por sercornejov
Veo que 21 personas han leido el mensaje pero no hay respuesta...

No está bien expuesto?
Está correctamente expuesto.

Posteado originalmente por sercornejov
No tiene respuesta?
Seguramente sí. Yo mismo tengo alguna opinión, pero todavía no he tenido tiempo para verificar si es correcta. Al fin y al cabo no has dejado pasar ni 24 horas desde que planteaste tu consulta.

Posteado originalmente por sercornejov
Es muy estupida la pregunta?
Evidentemente no.

Posteado originalmente por sercornejov
Será que mi mamá me mima?

¡Ah!, las madres ... qué haríamos sin ellas.

Saludos.

P.D. Un poco de calma, a veces pasan varios días hasta tener una respuesta.

sercornejov
02-09-2003, 16:39:32
Ok. Ok. Ok OK

Lo siento, es que estoy mal acostumbrado porque en el foro casi siempre la respuesta es mas rápida.

Perdón. perdón, perrrrrrrddoooooón

Sergio

eliasterrero
02-09-2003, 18:59:12
Hola, espero serte de ayuda.
A mi personalmente no me gusta almacenar directamente imagenes en la base de datos, yo lo que haria es crear un campo de tipo string donde guardar la ruta de la imagen, asi ademas de eliminar problemas con campos blob a los que odio con locura :mad:, tengo la ventaja de poder cambiar las imagenes sin modificar los datos de la BD. Pero bueno como tu ya has implementado el campo blob te sugiero que hagas un backup y un restore de tu base de datos a ver que pasa con el tamaño; habitualmente suele ser menor.
Siento no poderte ser de mayor ayuda :( . Un saludo y suerte en tu proyecto.

Covadonga ;)

kinobi
03-09-2003, 06:03:15
Hola,

algunas ideas sobre el crecimiento de la base de datos:

1. Estar realizando UPDATE's sobre los campos BLOB desde diferentes transacciones, que estén generando "deltas" de los registros que no se estén eliminado, posteriormente, por los mecanismos de recogida de "basura".

2. Uso de transacciones (incluidas las de lectura) con un nivel de aislamiento muy alto (snapshot).

3. No existe una correspondencia exacta entre el tamaño de la información que se intenta almacenar en un BLOB y el tamaño que éste realmente ocupa, ya que se trabaja a nivel de páginas y segmentos. De todas formas, la diferencia que tú tienes me parece excesiva.

En cualquier caso, como comenta eliasterrero, un backup/restore debería eliminar versiones obsoletas de los registros y reducir el tamaño de la base de datos.

En cuanto al asunto de no almacenar la imágenes en la base de datos, opino que tiene muy poco que ganar y sí mucho que perder, como ya he comentado en varios hilos dentro de estos foros.

Saludos.

SCORDOBA
03-09-2003, 15:58:33
Hola:

Yo tuve este problema de gdb de mas de 2gb con firebird 1.0 para Linux, no se si es tu caso. Para windows 2000 no he tenido problema de longitud de los gdb's. El problema lo arreglaron en la version 1.0.2

http://prdownloads.sourceforge.net/firebird/FirebirdCS-1.0.3.972-0.64IO.i386.rpm?download

Respecto al tema de poner imagenes incrustadas mi opinion es favorable. Son muchas las ventajas. He realizado pruebas con insercion de 60000 imagenes y el rendimiento es muy bueno.

Actualmente tengo una aplicacion que usa una estructura de carpetas para almacenar imagenes que tiene unas 500000 (30 GB) Mover esto o hacer backup es muy pesado. La idea es pasar las imagenes a una tabla.

kinobi
03-09-2003, 17:44:23
Hola,

Posteado originalmente por SCORDOBA
Actualmente tengo una aplicacion que usa una estructura de carpetas para almacenar imagenes que tiene unas 500000 (30 GB) Mover esto o hacer backup es muy pesado.

manejando ese volumen de información, lo ideal es buscarse, o hacerse, algún tipo de mecanismo de backup (no necesariamente en el sentido de backup InterBase) incremental.

Saludos.

Yosvany
03-09-2003, 21:21:11
Yo crearia un tipo de datos para los trozos de imagenes mas pequeños así:
create domain NEW_DOMAIN as blob sub_type -1 segment size
80;
y para las imágenes grandes de esta forma
create domain NEW_DOMAIN as blob sub_type -1 segment size
100;

porque -1: Bueno puedes poner cualquier numero negativo para identificar tu tipo de datos y no utilizar los predefinidos por interbase del 0 al 6. Así interbase no chequea lo que gurdes en el campo blob. Puede que esto te ayude a reducir un poco el tamaño además.

kinobi
04-09-2003, 08:26:45
Hola,

Posteado originalmente por Yosvany
Bueno puedes poner cualquier numero negativo para identificar tu tipo de datos y no
idea interesante la de utilizar los sub-tipos definidos por el usuario, yo la probaría.

Posteado originalmente por Yosvany
utilizar los predefinidos por interbase del 0 al 6.
Tal vez esté equivocado, pero los sub-tipos BLOB InterBase son sólo 3:

0 (Predefinido) --> sub-tipo binario
1 (Predefinido) --> sub-tipo texto
Entero negativo --> sub-tipo definido por el usuario.

Saludos

sercornejov
08-09-2003, 05:26:19
Hola:

Pues hize el Backup y el restore correspondiente y la base de datos si bajo de tamaño, paso de 2.33 gb a 1.98 gb......

Necesito poder guardar estos bmp's en la base pero sin que cresca tanto.

Por hay logre guardar los gif en lase de datos y paso que cuando va en el 1070 de los 2067 se explota el programa, bueno eso ya es de programación, espero y no de la bade de datos.

El archivo con los 1070 gif resulta de 2.1 Mb, algo del todo manejable, agradable, bonito, estético, etc.....

Seguiré intentando. Si pueden echarme una mano... Si alguno quiere probar el Código fuente para ver que es lo que pasa.....

Sergio

xerkan
08-09-2003, 16:45:38
Otra cosa q puesdes haces es transformar los bmp a jpg y guardar estos en la base de datos (o hacer q el delphi se encarge de la transformacion), para hacerlo tienes informacion en esta pagina:

http://www.q3.nu/trucomania/main.shtml

guillotmarc
08-09-2003, 21:03:45
Hola.

Pón el código que utilizas para convertir a GIF y le daremos una hojeada. No es nada normal que falle al llegar a un determinado numero de conversiones, falle el programa. Tiene todo el aspecto de que tienes una pérdida de memoria, al convertir una imagen creas un objeto en memória que no liberas con el correspondiente Free, por lo que al irse acumulando esas pequeñas pérdidas de memória, llega un momento que agotas la memória RAM del equipo.

Es una suposición, si pones el código fuente lo podemos determinar mejor.

Saludos.

sercornejov
10-09-2003, 18:25:19
O.K.

El formulario tiene un boton que envia a un procedimiento con parámetros:


procedure TfrmPpal.tabular2(Ini,Fin,Sal: integer);
var
encuesta,i,j,k,l,m,t,PuntoMatrizVer,IncrementoVer,verificador,Deltay:integer;
nombre:string;
Hoja,bmp:TBitmap;
verificacion:array[0..55] of Tcolor;
cuadro1,cuadro2:TRect;
tercio1,tercio2:TMemoryStream;
myibBlob: TStream;
gif:TGIFImage;

begin
encuesta:=HojaIni;
for j:=hojaini to hojafin do
begin
hoja:=Tbitmap.Create;
Cuadro1.Left:=16;
Cuadro1.Top:=21;
Cuadro1.Right:=826;
Cuadro1.Bottom:=368;
Cuadro2.Left:=16;
Cuadro2.Top:=21;
Cuadro2.Right:=826;
Cuadro2.Bottom:=368;
Deltay:=0;
if j<10 then
nombre:='Explorar000'+IntToStr(j)+'.bmp'
else if (j>9) and (j<100) then
nombre:='Explorar00'+IntToStr(j)+'.bmp'
else if (j>99) and (j<999) then
nombre:='Explorar0'+IntToStr(j)+'.bmp';
hoja.LoadFromFile(ruta+nombre);
for i:=1 to 3 do
begin
g1.Progress:=encuesta;
if frac(encuesta/sal)=0 then
if prgbarTabulacion.Position<prgbarTabulacion.Max then
prgbarTabulacion.StepIt;
gif:=TGIFImage.Create;
bmp:=Tbitmap.Create;
bmp.Height:=347;
bmp.Width:=810;
gif.Height:=347;
gif.Width:=810;
ibtblEncuesta.Active:=true;
ibtblEncuesta.Insert;
myibBlob:=ibtblEncuesta.CreateBlobStream(ibtblEncuestaBMPS,bmWrite);
tercio1:=TMemoryStream.Create;
tercio2:=TMemoryStream.Create;
ibtblEncuestaIDENCUESTA.Value:=encuesta;
for k:=0 to 57 do
begin
IncrementoVer:=0;
verificador:=0;
PuntoMatrizVer:=0;
for l:=px1[k] to px2[k] do
begin
for m:=py1[k] to py2[k] do
begin
verificacion[PuntoMatrizVer]:=hoja.Canvas.Pixels[l,m+deltay];
if verificacion[PuntoMatrizVer]=clwhite then
IncrementoVer:=1
else
IncrementoVer:=0;
verificador:=verificador+IncrementoVer;
end;
end;
if verificador=0 then
ibtblEncuesta.Fields[k+1].value:=1
else
ibtblEncuesta.Fields[k+1].value:=0;
end;
bmp.Canvas.CopyRect(bmp.Canvas.ClipRect,hoja.Canvas,cuadro1);
bmp.SaveToStream(tercio1);
gif.Assign(bmp);
gif.SaveToStream(tercio2);
myibBlob.CopyFrom(tercio2,0);
tercio1.Free;
myibblob.Free;
tercio2.Free;
gif.Free;
Cuadro1.Left:=16;
Cuadro1.Top:=cuadro1.Bottom;
Cuadro1.Right:=826;
Cuadro1.Bottom:=cuadro1.Bottom+347;
encuesta:=encuesta+1;
deltay:=deltay+348;
ibtblEncuesta.Post;
ibtscPpal.Commit;
end; // fin rutina de tabulacion de 3 encuestas por hoja
hoja.Free;
end; // fin rutina de tabulacion de hojas
pnlOcultar.SendToBack;
ibtblEncuesta.Active:=true;
ibtblEncuesta.Refresh;
ibtblEncuesta.Last;
ibtblEncuesta.First;
end;


Bueno los parámetros son
HojaIni: inicio de las hojas escaneadas y guardadas como archivo con el nombre "Explorar0001.bmp"
HojaFin: Fin de las hojas escaneadas y guardadas como archivo con el nombre "Explorar0689.bmp"

Cada archivo es una hoja de encuesta con tres encuestas cada una. este archivo es de 850x1100 pixeles. El procedimiento, mediante el Trect Cuadro1 y cuadro2 se desplaza en la lectura de las encuestas.

En el uses esta gifimage que es la de TGIFImage de Andrew Malander.


Sergio