Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   existe alguna forma de mejorar el rendimiento en una DB (https://www.clubdelphi.com/foros/showthread.php?t=86720)

edwin.simon 22-09-2014 15:11:27

existe alguna forma de mejorar el rendimiento en una DB
 
Hola buen día, tengo un sistema de carnetización con mas de 4 mil registro donde cada registro tiene una foto ya deben imaginar como se mueve la Base de Datos super lenta, estaba cambiando la programación para solo grabar la ruta de dicha foto pero se complica por la cantidad de registro y no tengo toda las fotos física.

estoy usando Access y Delphi 7, como puedo hacer para mejorar o resolver este problema.

mil gracias

Casimiro Notevi 22-09-2014 15:58:08

Puedes hacer lo que dices, o cambiar a una BD mejor, por ejemplo, firebird.
Porque 4 mil registros no es nada.

MAXIUM 22-09-2014 16:22:26

No se si Access soporte SQL, pero puedes correr un script o procedimiento que recorra la tabla y cambie la ruta en vez de la imagen.

Para las imagenes faltantes, puedes usar una generica. Es decir, todas las faltantes que apunten a la misma sin descripción.

¿Cuentanos, esa aplicación es mono usuario?

nlsgarcia 22-09-2014 16:25:19

edwin.simon,

Cita:

Empezado por edwin.simon
...tengo un sistema de carnetización con mas de 4 mil registros...cada registro tiene una foto...usando Access y Delphi 7...¿existe alguna forma de mejorar el rendimiento?...

:rolleyes:

Te comento:

1- Access es una base de datos personal, ideal para el manejo de pequeñas cantidades de datos, sin embargo no es adecuada para este tipo de procesamiento a nivel de producción el cual demanda gran cantidad de I/O.

2- Te sugiero considerar como una opción importante Firebird, es una base de datos fácil de instalar y mantener y capaz de manejar miles registros por tablas de forma concurrente sin deterioro del performance.

3- Además de Firebird existen otras opciones a considerar como PostgreSQL y MySQL, para su manejo desde Delphi puedes considerar el uso de los componentes de acceso de datos ZeosLib.

4- Si por alguna razón no puedes optar por ninguna de las opciones anteriores, puedes extraer las imágenes de la BD y salvarlas en un directorio, sustituyendo luego el campo BLOB de estas por una campo de dirección que indique el PATH de las mismas.

Revisa esta información:
Espero sea útil :)

Nelson.

ecfisa 22-09-2014 19:14:41

Hola edwin.simon
Cita:

Empezado por edwin.simon (Mensaje 481851)
Hola buen día, tengo un sistema de carnetización con mas de 4 mil registro donde cada registro tiene una foto ya deben imaginar como se mueve la Base de Datos super lenta, estaba cambiando la programación para solo grabar la ruta de dicha foto pero se complica por la cantidad de registro y no tengo toda las fotos física.

estoy usando Access y Delphi 7, como puedo hacer para mejorar o resolver este problema.

mil gracias

No he usado MS Access en mis proyectos, pero mas allá de la conveniencia de cambiar RDBMS, punto en el que coincido con mis compañeros, me parece muy extraño que 4000 registros, que es prácticamente nada, sea el motivo de la lentitud.

Creo que Access tiene que manejar bién muchas veces esa cantidad de registros si no ya no estaría en el mercado. Recuerdo haber leído 100000 registros, 25 Mb y unos 1500 requerimientos diarios como cifras manejables por Access.

Lo que no nos has comentado es el tamaño de cada registro y como menciona MAXIUM, si es una aplicación monousuario.

Saludos :)

edwin.simon 22-09-2014 19:43:35

el tamaño general de la Base de Datos es 1.26 GB y si es mono-usuario, el problema es que no se si cambiando de BD tengo que cambiar la codificación del programa........?
y gracias a todo por su comentarios

Casimiro Notevi 22-09-2014 19:48:13

4 mil registros y 1.26 gigas no me parece "normal". Yo miraría esas fotos carnet, a ver de qué tamaño se están creando. Seguro que son mucho más grande de lo necesario :)

edwin.simon 22-09-2014 19:51:25

el tamaña esta entre 300 y 470 kb

Casimiro Notevi 22-09-2014 19:55:29

Si, ya había hecho el cálculo mentalmente, creo que es excesivo para una foto carnet de apenas 4x3 cm ¿no?

edwin.simon 22-09-2014 19:58:58

hay alguna forma donde yo pueda reducir le el tamaño automáticamente, ej. si la foto tiene un tamaño de 400 kb como puedo hacer para que de forma automática la reduzca a un tamaño X, claro si es posible?

Casimiro Notevi 22-09-2014 20:03:37

Claro que puedes, haz una búsqueda por los foros, se ha tratado en diversas ocasiones. Si no lo encuentras, crea un nuevo hilo.

edwin.simon 22-09-2014 20:08:01

mil gracias a todos nuevamente especial a Casimiro Notevi, disculpe por tanta palabra de agradecimiento pero cuando una persona dedica un minuto de su tiempo para tratar de ayudar me no tengo mas que agradécele.

haré un búsqueda para ver que consigo

Casimiro Notevi 22-09-2014 20:15:38

En google, pon esto:
Código:

cambiar tamaño imagen site:www.clubdelphi.com

MAXIUM 22-09-2014 22:28:15

Hay que evaluar si es necesario reducir las imágenes, ya que pueden ser útiles para impresión. Es decir, una imagen reducida en peso y/o tamaño, no sería practico en elc aso de imprimir fichas o algo más detallado.

Tampoco se si Access soporte formatos JPG. Se que en ese caso, hay que agregar código para recuperar y meter fotos. Aún así, considero mucho más recomendable que las imágenes estén fuera de la DB, pese a los posibles riesgos que ello implica (perdida de ellas o movimiento de datos a un nuevo equipo o servidor).

También y pese a la corriente del foro, me inclinaría en ESTE CASO, el usar SQLite como base de datos, junto con las ventajas comparativas a access e incluso Firebird... me refiero que a lo más incluirías una dll en vez de todo un motor para tan "poca cosa".

Y si, la base de datos que tienes, es realmente excesiva.

mamcx 22-09-2014 22:31:28

Falta lo mas importante. QUE ES lo lento? Para poder resolver cualquier problema de rendimiento, hay que medir primero, y determinar exactamente que/donde esta el culpable. Como dicen los compañeros, 4000 registros no es nada, y de hecho, no le veo tampoco problema en si mismo a que la BD sea del tamaño que es.

Asi que antes de nada, tienes que saber exactamente, que es lento.

nlsgarcia 23-09-2014 00:25:07

edwin.simon,

Cita:

Empezado por mamcx
...Falta lo mas importante. ¿QUE ES lo lento? Para poder resolver cualquier problema de rendimiento, hay que medir primero...

^\||/

Pregunto:

1- ¿En que versión de Windows se ejecuta la aplicación en cuestión?, ¿32 o 64 Bits?.

2- ¿Cuales son las características físicas del equipo que corre la aplicación a nivel de procesador, disco y memoria?, ¿El disco es rápido?.

3- ¿La aplicación corre en un equipo Standalone o en Red?.

4- ¿Hay algún antivirus activo que pueda ralentizar la aplicación?.

5- ¿Que versión de Access utilizas?, ¿Que componentes de acceso de datos utilizas?, ¿Que proveedor de conexión utilizas : Nativo o ODBC?.

6- ¿Exactamente cual es el momento en que detectas que la aplicación esta lenta?, ¿Que tipo de procesamiento provoca la ralentización?, ¿Es una constante o es aleatorio?, ¿La tabla en cuestión tiene índices asociados?, ¿Hay alguna otra aplicación que compita por la tabla en cuestión?, ¿Hace cuanto tiempo se presento esta situación?, ¿Cual es el promedio de uso de la aplicación?, ¿Cual es el crecimiento promedio anual esperado de la tabla en cuestión? :confused:

Todas las preguntas anteriores son relevantes al momento de un análisis de rendimiento (Y muchas más interrogantes dependiendo del entorno y tipo de aplicación), sin embargo como comente en el Msg #4, Access es una BD a nivel personal, no para entornos de producción, quizás esta sea una buena oportunidad para hacer un Upgrade a tu aplicación y mejorar el rendimiento a nivel general en lo que respecta a la BD.

En lo concerniente al tamaño y cantidad de registros de la BD (4 mil registros, 1.26 GB), es cierto que para una BD como Firebird, SQL Server o DB2, estos son valores intrascendentes, pero en el caso de Access no aplica de igual forma.

Cita:

Empezado por answers.microsoft

How many record Microsoft Access can Hold?

Access doesn't measure capacity in terms of # of records. An Access 2010 database file can grow to 2 Gig. You can get around this by using linked files for your data tables.

Tomado de : How many record Microsoft Access can Hold?

Es decir : Tu BD esta aproximadamente al 63% de su capacidad máxima.

Revisa esta información:
Espero sea útil :)

Nelson.

Casimiro Notevi 23-09-2014 09:44:01

Realmente está muy cerca de la máxima capacidad, hay que dejar un margen hasta esos 2 gigas. Yo me preocuparía. Lo primero en este caso es extraer esas imágenes y almacenarlas en un directorio aparte.


La franja horaria es GMT +2. Ahora son las 19:54:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi