PDA

Ver la Versión Completa : existe alguna forma de mejorar el rendimiento en una DB


edwin.simon
22-09-2014, 15:11:27
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,


...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 (http://www.firebirdsql.org/), 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 (http://www.postgresql.org/) y MySQL (http://www.mysql.com/), para su manejo desde Delphi puedes considerar el uso de los componentes de acceso de datos ZeosLib (http://sourceforge.net/projects/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:

Compactar Access 2007 (http://www.clubdelphi.com/foros/showthread.php?t=86697)
Espero sea útil :)

Nelson.

ecfisa
22-09-2014, 19:14:41
Hola edwin.simon
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: 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,


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



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? (http://answers.microsoft.com/en-us/office/forum/officeversion_other-access/how-many-record-microsoft-access-can-hold/967f1817-aba9-44fa-b058-1b895c25fa19)

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

Revisa esta información:

1- Performance Tips To Speed Up Your Access 2007 Database (http://msdn.microsoft.com/en-us/library/dd942824%28v=office.12%29.aspx)

2- Access 2007 specifications (http://office.microsoft.com/en-us/access-help/access-2007-specifications-HA010030739.aspx)
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.