Indices temporários, duvidas

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Indices temporários, duvidas

Mensagem por asimoes »

Pessoal,

Alguém saberia me dizer qual é a diferença entre TEMPORARY E MEMORY :

ex.: INDEX ON CHAVE TAG CHAVE MEMORY

ou INDEX ON CHAVE TAG CHAVE TEMPORARY
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Indices temporários, duvidas

Mensagem por ANDRIL »

Qual tipo de RDD esta usando? Eu usei o TEMPORARY com NTX e notei um ganho significante. Usei com CDX e não notei o mesmo ganho. Não sei se é aceita em qualquer RDD esta clausula.
Quando tentei usar o MEMORY deu erro.

Notei que ao usar o TEMPORARY, é criado um "resultado" a parte, ou seja, no DBF eu tinha 2 indices e abertos SET INDEX TO ind1,ind2 ao criar o temporario, nao consigo manter os 2 abertos, fica somente ele, o que ocasiona problema de atualização dos indices em caso de manipular o resultado fazendo alguma alteração nos dados e salvando.

Acho que fiz algo errado, mais foi esse resultado que obtive, tanto que desativei e voltei a usar o arquivo temporário físico, onde add ele no SET INDEX TO ind1, ind2, tmp1 para refletir as alterações em todos.
Ate+
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Indices temporários, duvidas

Mensagem por asimoes »

Andril,

No meu caso é CDX agora um temporário em memória é um CDX ?

Continuo querendo saber TEMPORARY X MEMORY qual a diferença?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Indices temporários, duvidas

Mensagem por asimoes »

Compilando com -p para gerar o ppo

USE APM05 ALIAS APM05 NEW SHARED
INDEX ON ID_E_BCO TAG ID_E_BCO1 TEMPORARY
INDEX ON ID_E_BCO TAG ID_E_BCO2 MEMORY

PPO:
dbUseArea( .T.,, "APM05", "APM05", iif( .T. .OR. .F., ! .F., NIL ), .F. )
ordCondSet(,,,,,, RecNo(),,,,,,,,,,, .T.,, ) ; ordCreate(, "ID_E_BCO1", "ID_E_BCO", {|| ID_E_BCO}, ) // USANDO TEMPORARY
ordCondSet(,,,,,, RecNo(),,,,,,,,,,, .T.,, ) ; ordCreate(, "ID_E_BCO2", "ID_E_BCO", {|| ID_E_BCO}, ) // USANDO MEMORY

Alguma diferença?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Indices temporários, duvidas

Mensagem por ANDRIL »

Não vejo nenhuma diferença no seu PPO. Vendo o help do xHarbour embora eu utilize no momento Harbour 3.2, no comando INDEX não tem a clausula MEMORY e sim TEMPORARY, creio que a MEMORY faça parte de algum .CH de algum RDD.
Esta usando algum .CH para CDX?
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Indices temporários, duvidas

Mensagem por asimoes »

Andril,

Esse teste eu fiz com harbour 3.4, tanto faz TEMPORARY OU MEMORY o PPO não mostra diferenças.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Indices temporários, duvidas

Mensagem por lugab »

Boa tarde, povo.

Leigamente falando, existe alguma vantagem em usar a cláusula MEMORY ou deixar de usá-la ??

Ou seja, qual vantagem há em usar INDEX ON CHAVE TAG CHAVE MEMORY em vez de simplesmente INDEX ON CHAVE TAG CHAVE ???

Grato
lugab
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Indices temporários, duvidas

Mensagem por asimoes »

Lugab,

Se você não especificar TEMPORARY OU MEMORY vai ser criado o indice fisico CDX ou NTX
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Indices temporários, duvidas

Mensagem por lugab »

Valeu, Asimoes.

Pra mim "MEMORY" é novidade. Uma ótima novidade aliás, pq dispensa o acesso a disco rígido e acelera o processo

Obrigado
lugab
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Indices temporários, duvidas

Mensagem por lugab »

Boa noite a todos...

Surgiu uma dúvida:

Ao finalizar o programa é necessário executar algum comando específico sobre o arquivo de índices gerado em memória,
para informar ao Windows que a área de memória que ele ocupou está livre para ser usada por outro aplicativo ou um Simples CLOSE DATA já faz isso ?
lugab
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Indices temporários, duvidas

Mensagem por asimoes »

DbCloseArea() ou DbCloseAll() já libera o indice da memória.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Indices temporários, duvidas

Mensagem por Toledo »

Só para complementar, se for necessário fechar o índice temporário sem ter que fechar o DBF, pode-se usar:

Código: Selecionar todos

OrdDestroy( "nome_do_arquico_temporario" )
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Indices temporários, duvidas

Mensagem por lugab »

Pessoal, muito obrigado por tanta assistência...

Coloquei o paramêtro MEMORY e , realmente, o desempenho ficou excepcional

Parabéns e muito obrigado a todos
lugab
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Indices temporários, duvidas

Mensagem por lugab »

Olá Pessoal,

Que sintaxe devo usar em "set index to" e "Orsdsetfocus" qndo há 2 ou mais índices temporários, como no exemplo a seguir ?
(qdo há apenas 1 nem precisa citar o "Set index to", nem o "Ordsetfocus")

Código: Selecionar todos

sele 200
use  c:\Temp\saldflu exclusive alias Temp
zap
index on str(numcli,6) tag saldfluN Temporary
index on valor         tag saldfluV Temporary
Set index to ????
....
....
Sele Temp
Ordsetfocus(????)
lugab
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Indices temporários, duvidas

Mensagem por JoséQuintas »

O que geralmente se esquece é que arquivo temporário em rede é terrível.
Eu uso a pasta temporária do Windows, que não tem problema de acesso, e caso esqueça de apagar, tá no lugar certo.... rs
Como é arquivo local, é na velocidade do HD.

Quanto à outra questão, parece que são sinônimos.

Código: Selecionar todos

#command INDEX ON <key> [TAG <(tag)>] TO <(bag)> ;
               [FOR <for>] [WHILE <while>] [NEXT <next>] ;
               [RECORD <rec>] [<rest:REST>] [<all:ALL>] ;
               [EVAL <eval>] [EVERY <every>] [<unique: UNIQUE>] ;
               [<ascend: ASCENDING>] [<descend: DESCENDING>] ;
               [<add: ADDITIVE>] [<cur: USECURRENT>] [<cust: CUSTOM>] ;
               [<noopt: NOOPTIMIZE>] [<mem: MEMORY, TEMPORARY>] ;
               [<filter: USEFILTER>] [<ex: EXCLUSIVE>] => ;
         ordCondSet( <"for">, <{for}>, [<.all.>], <{while}>, ;
                     <{eval}>, <every>, RecNo(), <next>, <rec>, ;
                     [<.rest.>], [<.descend.>],, ;
                     [<.add.>], [<.cur.>], [<.cust.>], [<.noopt.>], ;
                     <"while">, [<.mem.>], [<.filter.>], [<.ex.>] ) ;;
         ordCreate( <(bag)>, <(tag)>, <"key">, <{key}>, [<.unique.>] )
Nota: se não me engano, de nada adianta acrescentar a cláusula se não adicionar referência no fonte, e a LIB
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder