Clipper/FiveWin - Bases "algo grandes"

 
Vista:

Bases "algo grandes"

Publicado por Jorge Glez. (39 intervenciones) el 11/03/2001 10:31:48
Hola:

Espero con gratitud la ayuda que me puedan dar...les platico:
La base de datos que manejo es de 36 mil registros (hasta ahora) y seguirá creciendo. Dicha base está indexada por 5 campos. Ahora bien, cuando hay un apagón de energía, tengo que volver a indexar (hice una pequeña rutina para estos casos en donde se genera nuevamente los índices). Sin embargo, conforme va creciendo la base se va haciendo lento el proceso (tanto en equipos 386 como P-III)...La pregunta es ¿Cómo puedo agilizar dicha generación de índices? ó ¿Qué sugerencia me podrían dar hay para dar velocidad al proceso?
De antemano gracias
Jorge Glez.
Pd.-Como antecedentes:
a)Tengo que manejar todos los registros, pues para altas/consultas, es necesario saber si ya está registrado o no.
b)Dichas consultas son por apellido paterno y/o materno y/o nombre1 y/o nombre2 y/o fecha nacimiento (estos 5 campos son los indexados)
c)El manejador de archivos índices es NTX
d)No reindexo (REINDEX), lo que ocupo es INDEX ON
para generar nuevamente los índices
d)El tiempo de tardanza de generación de indices por cada archivo es de 15-20 min. aprox. (en una PC a 233 Mhz.)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Bases

Publicado por Ricardo Ramírez (Perú) (201 intervenciones) el 11/03/2001 16:31:35
Jorge :
INDEX ON.... deberías usarlo solo en casos extremos... agota la posiblidad de usar REINDEX.

Asegúrate que los campor cadena tengan solo la longitud necesaria (asi se reindexará más rapido)

Recuerdo una vez haber tenido problemas de indices por esto de los bajones de luz, sin embargo verifica la lógica del programa al momento de salvar los registros, quizas necesites utilizar la función DBCOMMITALL().

Saludos desde Lima-Perú.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias...los indices son:

Publicado por Jorge Glez. (39 intervenciones) el 13/03/2001 10:19:10
De antemano gracias, Ricardo:

Los campos son 30 x c/registro, entre estos estan:
NOMBRE TIPO TAMAÑO (para grabar:)
ER_NOMBRE C 15 1er. nombre
DO_NOMBRE C 15 2o. Nombre
ER_APELLI C 15 Apellido paterno
DO_APELLI C 15 Apellido materno
FECHA_NAC D 8 Fecha de Nacimiento

Como lo que trato de hacer es que cada vez que se consulte a una persona, ésta se pueda buscar por cualquiera de dichos campos, pero al momento de mostrar los resultados de la busqueda, se organicen por el campo que se empleó para su busqueda y despues los otrso 4 restantes. Es decir, puedo pedir que se busque sólo por el apellido paterno y el resultado se mostrará ordenado por dicho campo Y ORDENADO POR LOS SIGUIENTES CAMPOS. Por ej. si busco "GOMEZ", el resultado será:

GOMEZ ACOSTA.... ¦
GOMEZ BUENDIA... ¦- El apellido materno y los
GOMEZ SUAREZ.... ¦ demas estan ordenados

Para ello los campos claves los indexo así:

USE MiDBF
INDEX ON; ER_NOMBRE+ER_APELLI+DO_APELLI+DO_NOMBRE+; DTOC(FECHA_NAC) TO CLAVE1N

INDEX ON;
DO_NOMBRE+ER_APELLI+DO_APELLI+ER_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE2N

INDEX ON; ER_APELLI+DO_APELLI+ER_NOMBRE+DO_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE1A

INDEX ON; DO_APELLI+ER_APELLI+ER_NOMBRE+DO_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE2A

INDEX ON FECHA_NAC TO CLAVEFN
USE

Bueno, esto es lo que hago (a lo mejor la estoy cagando). Espero respuesta. Gracias

Jorge Glez.
MEXICO, D.F.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bases

Publicado por Pablo Alberto Vidal (48 intervenciones) el 11/03/2001 19:23:49
Por que no te pasas a usar Indices .CDX Son mejores y mas rapidos.

Saludos

Pablo Vidal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Sucede lo mismo...

Publicado por Jorge Glez. (39 intervenciones) el 13/03/2001 10:25:17
De antemano Gracias, Pablo:

Pero me sucede lo mismo, es decir, sigue siendo tardado con cualquiera (DBFNDX, DBFNTX, DBFCDX).
No se qué hacer...posiblemente fraccionar la base, no sé, espero sugerencias...

Gracias.

Jorge Glez.
México, D.F.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bases

Publicado por skaigualker (210 intervenciones) el 12/03/2001 08:36:14
El tiempo que tarda en reindexar parece muy grande. Revisa la longitud de los campos como ya te dijo Ricardo

El programa, ¿funciona en red?, ¿que red?,

Prueba a cargar SMARTDRV.EXE, acelera bastante los procesos de lectura en disco.

Saludos.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No es de red...los indices son:

Publicado por Jorge Glez. (39 intervenciones) el 13/03/2001 10:35:48
De antemano gracias, Skaigüalker:

El sistema no es de red (aunque se tiene contemplado en un futuro no muyn lejano pasarlo a red, y lo mas probable es que sea "compartición de archivos de WinXX). El asunto es:

Los campos son 30 x c/registro, entre estos estan:
NOMBRE TIPO TAMAÑO (para grabar:)
ER_NOMBRE C 15 1er. nombre
DO_NOMBRE C 15 2o. Nombre
ER_APELLI C 15 Apellido paterno
DO_APELLI C 15 Apellido materno
FECHA_NAC D 8 Fecha de Nac.

Como lo que trato de hacer es que cada vez que se consulte a una persona, ésta se pueda buscar por cualquiera de dichos campos, pero al momento de mostrar los resultados de la busqueda, se organicen por el campo que se empleó para su busqueda y despues los otrso 4 restantes. Es decir, puedo pedir que se busque sólo por el apellido paterno y el resultado se mostrará ordenado por dicho campo Y ORDENADO POR LOS SIGUIENTES CAMPOS. Por ej. si busco "GOMEZ", el resultado será:

GOMEZ ACOSTA.... ¦
GOMEZ BUENDIA... ¦- El apellido materno y los
GOMEZ SUAREZ.... ¦ demas estan ordenados

Para ello los campos claves los indexo así:

USE MiDBF
INDEX ON; ER_NOMBRE+ER_APELLI+DO_APELLI+DO_NOMBRE+; DTOC(FECHA_NAC) TO CLAVE1N

INDEX ON;
DO_NOMBRE+ER_APELLI+DO_APELLI+ER_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE2N

INDEX ON; ER_APELLI+DO_APELLI+ER_NOMBRE+DO_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE1A

INDEX ON; DO_APELLI+ER_APELLI+ER_NOMBRE+DO_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE2A

INDEX ON FECHA_N
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Me falto...

Publicado por Jorge Glez. (39 intervenciones) el 13/03/2001 10:45:58
Me faltó poner:

INDEX ON FECHA_NAC TO CLAVEFN
USE

Bueno, esto es lo que hago (a lo mejor la estoy cagando). Espero respuesta. Gracias

Jorge Glez.
MEXICO, D.F.

P.D.- A lo mejor la estoy cagando (o necesito fraccionar la base, no lo sé, acepto sugerencias)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bases

Publicado por DucanLive (4 intervenciones) el 12/03/2001 18:14:27
36 mil es pequeno
y mucho el timpo para que se desmore en la
reindexacion
manda.... el tamno de tus campos de indexacion...
para revisar la estructura de los indices...
me parece mucho tiempo...
y como dice Ricardo... utiliza el Unlock y el Commit
despues de haber grabado un registro..
Salu2
>:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tambien creo que es mucho tiempo...los indices son

Publicado por Jorge Glez. (39 intervenciones) el 13/03/2001 10:42:53
De antemano gracias, DuncanLive:

El tiempo es exactamente lo que se me hace mucho...El asunto es:

Los campos son 30 x c/registro, entre estos estan:
NOMBRE--------TIPO----TAMAÑO----(para grabar:)
ER_NOMBRE-----C-------15--------1er. nombre
DO_NOMBRE-----C-------15--------2o. Nombre
ER_APELLI-----C-------15--------Apellido paterno
DO_APELLI-----C-------15--------Apellido materno
FECHA_NAC-----D-------8---------Fecha de Nac.

Como lo que trato de hacer es que cada vez que se consulte a una persona, ésta se pueda buscar por cualquiera de dichos campos, pero al momento de mostrar los resultados de la busqueda, se organicen por el campo que se empleó para su busqueda y despues los otrso 4 restantes. Es decir, puedo pedir que se busque sólo por el apellido paterno y el resultado se mostrará ordenado por dicho campo Y ORDENADO POR LOS SIGUIENTES CAMPOS. Por ej. si busco "GOMEZ", el resultado será:

GOMEZ ACOSTA.... ¦
GOMEZ BUENDIA... ¦- El apellido materno y los
GOMEZ SUAREZ.... ¦ demas estan ordenados

Para ello los campos claves los indexo así:

USE MiDBF
INDEX ON; ER_NOMBRE+ER_APELLI+DO_APELLI+DO_NOMBRE+; DTOC(FECHA_NAC) TO CLAVE1N

INDEX ON;
DO_NOMBRE+ER_APELLI+DO_APELLI+ER_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE2N

INDEX ON; ER_APELLI+DO_APELLI+ER_NOMBRE+DO_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE1A

INDEX ON; DO_APELLI+ER_APELLI+ER_NOMBRE+DO_NOMBRE+;
DTOC(FECHA_NAC) TO CLAVE2A

INDEX ON FECHA_NAC TO CLAVEFN
USE

Bueno, esto es lo que hago (a lo mejor la estoy cagando). Espero re
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Me faltó...

Publicado por Jorge Glez. (39 intervenciones) el 13/03/2001 10:48:01
Por falta de espacio, falto poner:

Bueno, esto es lo que hago (a lo mejor la estoy cagando). Espero respuesta. Gracias

Jorge Glez.
MEXICO, D.F.

P.D.- A lo mejor la estoy cagando (o necesito fraccionar la base, no lo sé, acepto sugerencias)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tambien creo que es mucho tiempo...los indices

Publicado por ducanlive (36 intervenciones) el 13/03/2001 17:43:38
A privera vista...
no utilices nunca DTOC en campos indices..
para eso utiliza DTOS es mas aconsejables..

usalo y despues me cuentas

Salu2
>:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Usaré DTOS...pero

Publicado por Jorge Glez. (39 intervenciones) el 14/03/2001 10:57:29
Hola duncanlive:

Usaré el DTOS() y después te comentará, sin embargo, me gustaría saber qué diferencia en rapidez existe en comparación con el DTOC().
Espero respuesta. Gracias

Jorge Glez.
México, D.F.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

YA USÉ EL DTOS( )...SIGUE IGUAL

Publicado por Jorge Glez. (39 intervenciones) el 15/03/2001 08:22:45
Duncanlive:

Insistentemente gracias...
He usado el DTOS(), como me recomendaste y, desafortunadamente, sigue la lentitud en la indexación. Para serte sincero, con reloj en mano, tomé tiempo y se tarda entre 5-8 segundos menos por cada indice, lo que no resulta muy significativo... Ahora bien, haciendo "pruebiñas" con el DTOS() y viendo que me regresa el valor en formato aaaammdd, comprendí que es mejor así que con DTOC(), sin embargo y sin parecer necio, no hay cambio en la lentitud de la indexación como te mencionaba...
Bueno, de cualquier manera, muchas gracias, trataré de solucionar mediante la "partición del archivo"...

Jorge Glez.
México, D.F.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Prueba esto

Publicado por Pablo Alberto Vidal (48 intervenciones) el 14/03/2001 03:03:42
Este es tu indice
USE MiDBF
INDEX ON ER_NOMBRE+ER_APELLI+DO_APELLI+DO_NOMBRE+ DTOC(FECHA_NAC) TO CLAVE1N

Tratas de realizarlo asi:
USE MiDBF
INDEX ON ER_NOMBRE TO CLAVE1N
INDEX ON ER_APELLI TO CLAVE2N

Y asi...

Trata de Usar la funcion DbReindex(), solamente usa la generación de indices desde cero en casos extremos.

midbfs->( DBREINDEX() )

Yo cuando vuelvo a generar los indices de nuevo lo que hago es borrar los ya existentes y volverlos a crear.

Espero que esto te sirva de alguna ayuda...

Pablo Alberto Vidal
La Vega, República Dominicana
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lo probé, pero ése no es el asunto...

Publicado por Jorge Glez. (39 intervenciones) el 14/03/2001 10:08:01
Ricardo:

Nuevamente de antemano te agradezco que me contestes, pero el asunto es que quiero mantener ordenados los registros al momento de la consulta.
Ahora bien, con tu explicación, ¿cómo ordeno los demás campos al momento de la búsqueda?. Es decir:
1)Ya tengo mis índices (como me recomendaste)
2)No hay apagones, así que no vuelvo a indexar (o reindexar)...hasta aquí no hay problema
3)Suponiendo que voy a buscar a "GONZALEZ CANO JORGE ALBERTO" con fecha de Nac. 12/12/1985, resulta que en ése momento no sé cual es su 2o. apellido ni la fecha de nac.
4)En pantalla le pido al sistema que me busque por Apellido Paterno="GONZALEZ", 1er. Nombre="JORGE", 2do. Nombre="ALBERTO"
5)La lista que aparece (con mi indexación) está ordenada por:
Todos los GONZALEZ, despues todos Apellidos maternos, todos los JORGE, todos los ALBERTO y por último por fecha de nac. Y en cuestión de segundo, el puntero se posiciona al más cercano posible (generalmente está a 2 o 3 registros del que busco).
Todo esto lo consigo gracias a las claves de mi indexación. (ApellPat+ApellMat+1erNom+2doNom+Fnac)
6)Sin embargo, haciéndolo Indice por Campo (como me comentas) no me da el resultado que quiero y, si ocupo rutinas (filtrados, etc.) es muy lenta la aparición de dicha lista. Entonces habría lentitud no solo en la generación de indices, sino también en la busqueda.
7)Entonces, ¿Cómo le hago...?

Gracias de todas maneras
Jorge Glez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ESPERO TE AYUDE

Publicado por MARTIN (3 intervenciones) el 18/03/2001 09:31:25
HOLA ESPERO NO SEA DEMASIADO TARDE Y ADEMAS DE QUE TE PUEDA AYUDAR, RECOMIENDO LOS CDX PERO ANTES DE DE CREARLOS, ELIMINALOS FISICAMENTE DEL DISCO, YO MANEJO BASE DE DATOS DE CASI UN MILLON Y EL TIEMPO ES EN PROMEDIO DE 8 MIN. SALUDOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ESPERO TE AYUDE

Publicado por Jorge Glez. (39 intervenciones) el 20/03/2001 03:21:42
Hola Martín:
Revisa tu correo...espero respuesta.

Jorge Glez.
México, D.F.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Revisa tu PC

Publicado por Jaime (5 intervenciones) el 20/03/2001 19:39:40
Hola:
yo tengo consultas como la que tienes y con mas registros, personalmente no uso indices con cadenas largas.
Yo creo que si deseas usar tus indices en la forma que lo estas haciendo, deberas ponerle mas fierro (memoria, disco SCCI, cpu mas rapida)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Revisa tu PC

Publicado por Jorge Glez. (39 intervenciones) el 22/03/2001 00:04:46
Hola Jaime:

¿Podría usar una PC Intel Celeron 600 Mhz, D.D. 20.4GB y 64MB RAM?
Es que esa es la configuración de las Pc's en donde está el sistema. Ahora bien, ¿tengo que actualizarlas a mejores caracteríticas?...

Jorge Glez.
México, D.F.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bases

Publicado por Humberto Hernandez (4 intervenciones) el 17/04/2001 20:30:12
No se si ya resolviste tu problema, pero yo creo que usando un solo indexado y filtrando los datos podrias resolver tu problema :

** VARIABLE
cBusca := "PEREZ"
**
**BUSQUEDA EN LA BASE DE DATOS
set filter to upper(rtrim(cBusca))$upper(er_nombre).or.upper(rtrim(cBusca))$upper(do_nombre).or.upper(rtrim(cBusca))$upper(er_apelli).or.upper(rtrim(cBusca))$upper(do_apelli).or.upper(rtrim(cBusca))$upper(dtoc(fecha_nac))
**SEGUN LA VARIABLE ESTO NOS ARROJARIA:

CUEVAS PEREZ ARNULFO
HERNANDEZ PEREZ FRANSISCO
PEREZ MARTINEZ JUAN
PEREZ PLACENCIA ALBERTO

S


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bases

Publicado por Humberto Hernandez (4 intervenciones) el 17/04/2001 20:32:40
Si crees que te puede servir lo anterior lo podemos ver con mas detalle.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar