Filtragem por índices Arquivo CDX
Moderador: Moderadores
Filtragem por índices Arquivo CDX
Amigos, além do ORDSCOPE (que eu já sei usar), quais os outros recursos de filtragem q o CDX oferece ?
Como funcionam ?
Uso harbour e xharbour em modo console
Grato
Como funcionam ?
Uso harbour e xharbour em modo console
Grato
lugab
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Filtragem por índices Arquivo CDX
Ola!
set filter
OrdWildSeek
Index .. for temporary
index memio: ... direto na memória RAM
index, set filter, set relation, via letodb ou netio
Saudações,
Itamar M. Lins Jr.
set filter
OrdWildSeek
Index .. for temporary
index memio: ... direto na memória RAM
Código: Selecionar todos
#require "hbmemio"
REQUEST HB_MEMIO
PROCEDURE Main()
LOCAL tmp
dbCreate( "mem:test", { { "F1", "N", 9, 0 } }, , .T., "memarea" )
FOR tmp := 1 TO 1000
dbAppend()
FIELD->F1 := hb_Random() * 1000000
NEXT
INDEX ON FIELD->F1 TAG f1
dbEval( {|| QOut( FIELD->F1 ) } )
dbCloseArea()
dbDrop( "mem:test" ) /* Free memory resource */
RETURN
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Filtragem por índices Arquivo CDX
Putz, esse index memio deve ser um avião... Mas tb pode travar tudo se o arquivo em memória ficar grande, né ??
Muito Obrigado, Itamar....
Muito Obrigado, Itamar....
lugab
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Filtragem por índices Arquivo CDX
Não trava.
A memória é do OS, se tem 4Gib, e precisar de mais, o OS faz uso do cache em HD, isso é um problema do OS não do HB.
Por isso a importância de rodar em 64Bits coisa que o Harbour já faz há algum tempo e com ganhos efetivos de performance inclusive usando todos os processadores, coisa que o xHb não faz.
Isso também parece não ser importante p/ os usuários do xHarbour.
Saudações,
Itamar M. Lins Jr.
A memória é do OS, se tem 4Gib, e precisar de mais, o OS faz uso do cache em HD, isso é um problema do OS não do HB.
Por isso a importância de rodar em 64Bits coisa que o Harbour já faz há algum tempo e com ganhos efetivos de performance inclusive usando todos os processadores, coisa que o xHb não faz.
Código: Selecionar todos
Recently I've repeated above tests on the same Hardware but using 64-bit
Linux kernels and 64bit Harbour builds and here the difference is even
bigger. Here are results for ST mode:
2009-10-27 13:24:41 Linux 2.6.31.3-1-desktop x86_64
Harbour 2.0.0beta3 (Rev. 12776) GNU C 4.4 (64-bit) x86-64
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.02
====================================================================
[ T001: x := L_C ]..............................................0.03
[ T002: x := L_N ]..............................................0.02
[ T003: x := L_D ]..............................................0.02
[ T004: x := S_C ]..............................................0.03
[ T005: x := S_N ]..............................................0.03
[ T006: x := S_D ]..............................................0.03
[ T007: x := M->M_C ]...........................................0.03
[ T008: x := M->M_N ]...........................................0.04
[ T009: x := M->M_D ]...........................................0.03
[ T010: x := M->P_C ]...........................................0.04
[ T011: x := M->P_N ]...........................................0.03
[ T012: x := M->P_D ]...........................................0.03
[ T013: x := F_C ]..............................................0.10
[ T014: x := F_N ]..............................................0.17
[ T015: x := F_D ]..............................................0.08
[ T016: x := o:Args ]...........................................0.11
[ T017: x := o[2] ].............................................0.06
[ T018: round( i / 1000, 2 ) ]..................................0.15
[ T019: str( i / 1000 ) ].......................................0.32
[ T020: val( s ) ]..............................................0.18
[ T021: val( a [ i % 16 + 1 ] ) ]...............................0.28
[ T022: dtos( d - i % 10000 ) ].................................0.28
[ T023: eval( { || i % 16 } ) ].................................0.29
[ T024: eval( bc := { || i % 16 } ) ]...........................0.18
[ T025: eval( { |x| x % 16 }, i ) ].............................0.24
[ T026: eval( bc := { |x| x % 16 }, i ) ].......................0.18
[ T027: eval( { |x| f1( x ) }, i ) ]............................0.27
[ T028: eval( bc := { |x| f1( x ) }, i ) ]......................0.22
[ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................0.22
[ T030: x := &( "f1(" + str(i) + ")" ) ]........................2.05
[ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]................2.41
[ T032: x := valtype( x ) + valtype( i ) ].....................0.27
[ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.54
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.17
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.19
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.18
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.19
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.19
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.18
[ T040: ascan( a, i % 16 ) ]....................................0.22
[ T041: ascan( a, { |x| x == i % 16 } ) ].......................2.01
[ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....0.53
[ T043: x := a ]................................................0.02
[ T044: x := {} ]...............................................0.08
[ T045: f0() ]..................................................0.05
[ T046: f1( i ) ]...............................................0.08
[ T047: f2( c[1...8] ) ]........................................0.07
[ T048: f2( c[1...40000] ) ]....................................0.07
[ T049: f2( @c[1...40000] ) ]...................................0.08
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.09
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.21
[ T052: f2( a ) ]...............................................0.08
[ T053: x := f4() ].............................................0.34
[ T054: x := f5() ].............................................0.16
[ T055: x := space(16) ]........................................0.12
[ T056: f_prv( c ) ]............................................0.21
====================================================================
[ total application time: ]....................................15.60
[ total real time: ]...........................................15.61
2009-10-27 13:25:10 Linux 2.6.31.3-1-desktop x86_64
xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6629) GNU C 4.4 (64 bit) ?
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.06
====================================================================
[ T001: x := L_C ]..............................................0.05
[ T002: x := L_N ]..............................................0.03
[ T003: x := L_D ]..............................................0.04
[ T004: x := S_C ]..............................................0.05
[ T005: x := S_N ]..............................................0.03
[ T006: x := S_D ]..............................................0.05
[ T007: x := M->M_C ]...........................................0.05
[ T008: x := M->M_N ]...........................................0.04
[ T009: x := M->M_D ]...........................................0.04
[ T010: x := M->P_C ]...........................................0.06
[ T011: x := M->P_N ]...........................................0.04
[ T012: x := M->P_D ]...........................................0.04
[ T013: x := F_C ]..............................................0.25
[ T014: x := F_N ]..............................................0.17
[ T015: x := F_D ]..............................................0.11
[ T016: x := o:Args ]...........................................0.30
[ T017: x := o[2] ].............................................0.07
[ T018: round( i / 1000, 2 ) ]..................................0.32
[ T019: str( i / 1000 ) ].......................................0.87
[ T020: val( s ) ]..............................................0.32
[ T021: val( a [ i % 16 + 1 ] ) ]...............................0.48
[ T022: dtos( d - i % 10000 ) ].................................0.43
[ T023: eval( { || i % 16 } ) ].................................0.62
[ T024: eval( bc := { || i % 16 } ) ]...........................0.40
[ T025: eval( { |x| x % 16 }, i ) ].............................0.47
[ T026: eval( bc := { |x| x % 16 }, i ) ].......................0.37
[ T027: eval( { |x| f1( x ) }, i ) ]............................0.66
[ T028: eval( bc := { |x| f1( x ) }, i ) ]......................0.56
[ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................0.58
[ T030: x := &( "f1(" + str(i) + ")" ) ]........................5.95
[ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]................6.57
[ T032: x := valtype( x ) + valtype( i ) ].....................0.76
[ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.90
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.25
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.25
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.24
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.25
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.25
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.24
[ T040: ascan( a, i % 16 ) ]....................................0.46
[ T041: ascan( a, { |x| x == i % 16 } ) ].......................4.10
[ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....0.92
[ T043: x := a ]................................................0.04
[ T044: x := {} ]...............................................0.16
[ T045: f0() ]..................................................0.21
[ T046: f1( i ) ]...............................................0.23
[ T047: f2( c[1...8] ) ]........................................0.25
[ T048: f2( c[1...40000] ) ]....................................0.24
[ T049: f2( @c[1...40000] ) ]...................................0.24
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.28
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.41
[ T052: f2( a ) ]...............................................0.24
[ T053: x := f4() ].............................................0.94
[ T054: x := f5() ].............................................0.63
[ T055: x := space(16) ]........................................0.41
[ T056: f_prv( c ) ]............................................0.86
====================================================================
[ total application time: ]....................................37.14
[ total real time: ]...........................................37.16
Teste feitos em 2009 pelo Przemek.
As we can see in xHarbour we do not have any improvement executing MT
programs on MultiCPU machines while in Harbour the speed is noticeably
better. It means that Harbour is quite well scalable and users should
expect speed improvement executing MT parallel programs on multi CPU
machines. For some programs like MT servers it may be critical - programs
compiled by Harbour can be quite well improved by simple hardware
upgrade to 4, 8, 16 or more CPU machines.
Isso também parece não ser importante p/ os usuários do xHarbour.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Filtragem por índices Arquivo CDX
Uma opção interessante.
Créditos p/ Rafa Carmona.
Saudações,
Itamar M. Lins Jr.
Créditos p/ Rafa Carmona.
ANGIE SARAH LOWE
SARAH CARMONA
JULIA SARAH SMITH
Eso se consigue , pasando el patrón "*"+Cadena+"?"
cNombre := "SARAH"
fast_filter( "*"+ alltrim( cNombre ) + "?", 4, 22, 28 )
Browse()
Código: Selecionar todos
/*
Sustituto de SET FILTER
cExpr
Expresion a buscar que forme parte del indice, podemos
poner *Texto? , para buscar palabra que forme parte
nOrder
Sobre que indice activo vamos a recorrer la lista.
Por defecto es el indice activo.
nRow, nCol
Posicion fila,columna para mostrar progreso. Se ejecuta en
un hilo aparte
Return: Indice anterior
*/
function fast_filter( cExpr, nOrder, nRow, nCol )
local PantaAnt := savescreen(0,0,MaxRow(),MaxCol())
Local p := hb_threadStart( @Pajaritos(), nRow, nCol )
Local nIndice := OrdNumber()
DEFAULT nOrder TO OrdNumber()
set order to nOrder
INDEX ON &(IndexKey()) TAG _TEMP_ TO tHarbourt ;
CUSTOM ADDITIVE MEMORY
set order to nOrder
go top
DO WHILE OrdWildSeek( cExpr, .T. )
OrdKeyAdd( "_TEMP_" )
ENDDO
OrdSetFocus( "_TEMP_" )
hb_threadTerminateAll()
restscreen(0 ,0 ,MaxRow(), MaxCol(), PantaAnt)
return nIndice
PROCEDURE Pajaritos( nRow, nCol )
Local pajarito := "|",n := 0
DEFAULT nRow := MaxRow(), nCol := 1
DO WHILE .T.
do case
case n = 1
pajarito = "|"
case n = 2
pajarito = "/"
case n = 3
pajarito = "-"
case n = 4
pajarito = "\"
Otherwise
n := 0
end case
DispOutAt( nRow, nCol, "Generando Consulta....[ " + pajarito +" ]" ) //, "GR+/N" )
ThreadSleep( 500 )
n++
ENDDO
RETURN
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Filtragem por índices Arquivo CDX
E porque não funciona no xHarbour ?
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.

