FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Thu Feb 07, 2013 07:03 PM

Harbour 3
FWH 13.1
Borland 582

Estoy intentando modificar el codigo para pasar de TWBROWSE a TXBROWSE y en este caso tambi茅n de 16 a 32 bits:
Tengo un Browse con dos bases de datos (DBF) relacionadas (SET RELATION) y adem谩s filtradas (SET FILTER) ya que s贸lo debe mostrar el browse los registros que cumplen cierta condici贸n en varias de las columnas.
Ambas bases de datos pueden ser modificadas por separado, por otros usuarios, y con otros programas; pero obviamente usando los mismos 铆ndices.

En resumen:
1 Base de datos.
-Codigo
-Denominaci贸n
2 Base de datos.
-Codigo
-Fecha
-Importe

Ambas relacionadas por "codigo". S贸lo debe mostrar el browse los registros de la primera base de datos entre una cota de fechas y con "importe" <> 0 de la segunda base de datos. Se muestran en el browse los cuatro campos. Adem谩s debe poderse ver ordenados por "c贸digo" o "denominaci贸n" del indice de la primera base de datos

Me funciona, pero no es que va lento, las plantas crecen m谩s r谩pido.

驴A alguien se le ocurre alguna idea para acelerar el xbrowse hasta llegar a conseguir que al menos sea operativo?

En 16 bits y con TWBROWSE tardaba un poco en hacer la relaci贸n y el filtrado, despu茅s era perfectamente operativo. Ahora, con practicamente el mismo c贸digo no lo es.

Muchas gracias de atemano y un saludo

FWH 12.12 HB 3.2 BCC 5.82
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Thu Feb 07, 2013 07:26 PM

Ander, creo que no debes hacer muchos cambios, lo que si te recomendaria es que si estas trabajando con indices .NTX te cambies de una vez por .CDX, ya con eso aumenta tu velocidad y seguridad en tus datos. El manejo de la clase TDATABASE es buenisima para DBF, del resto todo funciona bien, no me gusta mucho set filter, pero bueno, cualquier cosa estamos a la orden, saludos... :shock:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Thu Feb 07, 2013 08:14 PM

Mchas gracias por la r谩pid铆sima respuesta:

Ya se usan indices CDX, en ambas bases de datos. Tambi茅n soy consciente de que el SET FILTER est谩 relentizandolo todo... pero no se ocurre otra forma de producir el filtrado en el xbrowse sin ella, habida cuenta de usar ordscope() en este caso... se me antoja complicado. En otros browses del programa, el filtrado lo hago mediante este ordscope() y todo funciona fenamenal. En este caso con la relaci贸n, la ordenaci贸n, y el filtro .... se me est谩 cruzando... pero cruzando. No encuentro una soluci贸n real y pr谩ctica.

Un Saludo y gracias. Voy a seguir intentandolo a ver si encuentro una forma de hacerlo operativo.

FWH 12.12 HB 3.2 BCC 5.82
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Thu Feb 07, 2013 09:05 PM

Has probado con DBSETFILTER().? creo que deberias probar con otra opcion, yo en mi caso prefiero con DBF hacer mi filtro de forma manual, creo una DBF TMP o un ARRAY con los campos que cumplan la condicion, asi se que de verdad me muestra la cantidad de registros que quiero y no que solo me oculta los que no quiero o que no cumplen la condicion dad, nose si sera mejor o peor como lo hago, pero siento que me va muy bien, ademas de recudir el tama帽o de la DBF a mostrar en el xBrowse que tambien es rapido, bueno seria ir cambiandote a MYSQL, alli olvidas todos esos problemas de velocidad, estamos a la orden, saludos... :shock:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Thu Feb 07, 2013 09:44 PM

Tomo nota: estudiar cambio a Mysql. 驴Sabes de alg煤n "buen" manual?

La soluci贸n del temporal o el array, ya la he considerado, pero pierdo la situaci贸n on-line actual. Cualquier modificaci贸n que se produzca en los ficheros originales (que se actualizan constantemente) no ser铆a visible hasta una nueva creaci贸n del temporal. S铆 es algo m谩s r谩pido, pero no es una opci贸n en este caso.

FWH 12.12 HB 3.2 BCC 5.82
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Thu Feb 07, 2013 10:11 PM

Para manual, millones en Mr:google, te doy link del mismo de la web de mysql, luego de esto hay muchos ejemplos aca en el foro, y tienes 2 clases super buenas, tdolphin que yo uso de Daniel y tmysql creo de willian, saludos... :shock:

MySql

http://dev.mysql.com/doc/refman/5.0/es/index.html

tdolphin

viewtopic.php?f=6t=19204hilit=tdolphin

http://tdolphin.blogspot.com/2010/11/co ... d-lib.html

tmysql

viewtopic.php?f=6t=25458p=138734hilit=tmysql#p138734

&&&&&
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Fri Feb 08, 2013 09:43 PM

Lo mas probable es que estes usando el rdd DBFCDX el cual no tiene bitmap filter, esto bitmap filter aceleran enormemente los filtros, ya que usa los indices para encontrar los registros a incluir en el filtro. (esto en Foxpro por ejemplo se llama tecnologia Rushmore, en ads es AOF)

si usas el rdd ADS podras hacer uso de esta tecnologia.

basicamente funciona de la siguiente manera.

si usas un filtro como este

select "prestamos"
set filter to fecha_pago >= date()

donde fecha_pago es un campo en la tabla a filtrar, este campo debe estar indexado, esto provocara que el filtro use el indice para encontrar mas rapidamente el registro.
y el rdd gestione mas rapidamente la inclusion del registro en el filtro, es cierto que esto es facilmente reemplazable en el rdd DBFCDX con un scope, ya que igualmente fecha_pago debe estar indexado, y hacemos un scope SetScope( date(), NIL ), aca abos tendra una velocidad similar.

pero, siempre un pero, si el filtro sube en complejidad, por ejemplo

set filter to ( fecha_pago >= date() .or. cliente_mp=.t. ) and saldo >0

ya la cosa se complica para un scope, (tu bien lo sabras, ya que esto es lo que probablemente te quito las ganas de usar scope)
si bien no es complicado usar aca un scope, genera un poco mas de trabajo, campos extras, suma de expresiones, conversiones, etc.

ahi es donde los filtros en ads local superan a un scope en dbfcdx, por que en ads solamente seria necesario crear indices a los tres campos involucrados y tachan el filtro volaran, como los Blackbird que pasaban por el cielo cuando era ni帽o aca en nicaragua :-).

si previamente indexamos los tres campos involucrados en el filtro:

index on fecha_pago tag fecha_pago
index on cliente_mp tag cliente_mp
index on saldo tag saldo

no seria necesario nada mas que tener indexado estos tres campos para que ADS use su tecnologia AOF (Advantage Optimized Filter ) para acelerar los filtros a velocidades similares a un scope.

si los tres campos estan indexados tendremos un AOF con nivel ADS_OPTIMIZED_FULL (velocidad de un ferrari)
si dos de los campos estan indexados tendremos una AOF con nivel ADS_OPTIMIZED_PART (velocidad de toyota)
y si ninguno de los tres campos esta indexado entonces tendremos una AOF con nivel ADS_OPTIMIZED_NONE el cual se comportara como tu filtro actual el cual es lento, muy lento, como el caballo del malo al final de las peliculas de vaqueros cuando los siguen los buenos.

salu2
carlos vargas

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Sat Feb 09, 2013 08:25 AM

Muchas gracias,
Tomo nota y voy a probar. Son bastantes cambios, pero parece que puede merecer la pena.

Un saludo.

FWH 12.12 HB 3.2 BCC 5.82
Posts: 518
Joined: Fri Jun 29, 2012 12:49 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Sat Feb 09, 2013 10:58 AM

Un par de dudas Carlos:

En la creaci贸n del 铆ndice, 驴el tag debe ser obligatoriamente igual al nombre del campo para que funcione el AOF?.

驴Funciona el AOF con 铆ndices temporales TO TEMP TEMPORARY?.

Mil gracias.

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Sat Feb 09, 2013 01:57 PM

TO TEMP TEMPORARY ( me parece que esto no esta implementeado en ADS solo en los Rdd Nativos de harbour.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 518
Joined: Fri Jun 29, 2012 12:49 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Sat Feb 09, 2013 04:45 PM

Carlos,

En la creaci贸n del 铆ndice, 驴el tag debe ser obligatoriamente igual al nombre del campo para que funcione el AOF?.

Gracias.

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Sat Feb 09, 2013 09:42 PM

nop.

salu2

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 302
Joined: Fri Apr 23, 2010 04:30 AM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Sun Feb 10, 2013 04:52 AM

Lo puedes solucionar facil sin hacer filtro , en una de las columnas haces el seek a la otra relacionada y creas inices condicionado donde imorte sea diferente cero y punto

PROD->( DBSEEK( IMEX->CODPRO ) , NOMPRO )

Slds

Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
Posts: 4
Joined: Sat Sep 11, 2010 02:55 AM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Sun Feb 10, 2013 03:15 PM

Con indices NTX y aplicacion compilada con XHARBOUR trabaja muy bien llos filtros con ORDERSCOPE()

OrdScope(0, cClave )
OrdScope(1, cClave )

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: TXBROWSE 驴C贸mo acelerarlo en mi caso?
Posted: Tue Feb 12, 2013 03:50 AM
ander7319 wrote:Muchas gracias,
Tomo nota y voy a probar. Son bastantes cambios, pero parece que puede merecer la pena.

Un saludo.


Este es mi correo y skype joseluisy@hotmail.com / joseluisy alli podemos estar en contacto haber si resolvemos y para pasarte las cosas que tengo de MYSQL, saludos... :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!

Continue the discussion