Dúvidas ORDSCOPE e Indices Temporário

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

Moderador: Moderadores

jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Dúvidas ORDSCOPE e Indices Temporário

Mensagem por jelias »

Amiguinhos,

Tenho um cadastro de pedido onde pude perceber a situação que irei descrever abaixo em um resumido código . Não sei é correto mudar a ordem DBSETORDER de um alias filtrado com ORDSCOPE
Em minhas pesquisas sobre ORDSCOPE encontrei uma nova situação pra mim, que é o uso se índices temporários na memória. Alguém usa? Pode compartilhar suas experiências? Vale a pena em quais circunstâncias?
Estou usando xHarbour 1.2.1 + BCC 5.8 + DBFCDX.

Código: Selecionar todos

INDEX ON   ;
    TAG TO ;
    FOR    ;
    WHILE  ;
    NEXT | RECORD | REST | ALL ;
    UNIQUE ;
    ASCENDING | DESCENDING ;
    EVAL EVERY ;
    USECURRENT ;
    ADDITIVE ;
    CUSTOM ;
    NOOPTIMIZE;
    TEMPORARY

Código: Selecionar todos

sele AL_ITPED          // Faço chamado do arquivo de itens de pedidos.
DBSETORDER(1)       // Indice (Código da Carga + Número do Pedido)
ORDSCOPE(0,v_carga+v_Pedido)    // Parâmetro para filtro
ORDSCOPE(1,v_carga+v_pedido)    // Parâmetro para filtro
DBGOTOP()

TBROWSEDB()
....

// Incluir itens
sele AL_ITPED          // Faço chamada do arquivo de itens de pedidos.
DBSETORDER(2)       //  Indice (Código da Carga + Número do Pedido + Código do Item)

// Neste ponto é que estou com dúvida, posso mudar a ordem usado em um arquivo filtrado com ORDSCOPE()
// Já faço isso e nunca tive problemas, todavia estou tendo problemas com atualização de índices e estou desconfiando de tudo, até troquei o servidor para ver se resolvia, coisa que não aconteceu.
// Como muitos usuários fazem o cadastro ao mesmo tempo de pedidos diferentes e o volume de dados é "grande", revisando a rotina pela milésima vez, pensei nesta situação que até então
// não havia parado para pensar a respeito. 

if DBSEEK(v_carga+v_pedido+v_item)
   MENSAGEM("Item já cadastrado!")
else
    // Faço o cadastro
end

// Retorna ao TBROWSER

Sds,

Júlio
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Dúvidas ORDSCOPE e Indices Temporário

Mensagem por Eolo »

Júlio, até onde eu fui, o ORDSCOPE (que é fantástico) fica amarrado ao índice setado.
Se vc mudar o SET ORDER, o ORDSCOPE se perde.

Quer usar índices temporários? Desativa o ORDSCOPE de antes, cria o índice, seta um novo ORDSCOPE e usa.
Acabou? Volta pro índice anterior e seta o ORDSCOPE anterior novamente.

Comigo funcionou.
jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Dúvidas ORDSCOPE e Indices Temporário

Mensagem por jelias »

Agradeço sua contribuição Mestre Eolo.

Tenho algumas dúvidas ainda sobre o ganho de performance usando índices temporários e em quais situações podemos aproveitar seus benefícios. Portanto, peço aos colegas que já utilizam este recurso em seus sistemas e queiram compartilhar suas experiências uma ajuda.

Sds,

Júlio.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Dúvidas ORDSCOPE e Indices Temporário

Mensagem por Eolo »

Eu acho complicado criar índices temporários no run time. Se o DBF alvo for pequeno, pode até dar certo. Mas imagina o Vendas.dbf, com trocentos milhões de registros, em rede, talvez tendo que ser bloqueado para se ter uma imagem estática dele, sendo reindexado no run time várias vezes ao dia...

Eu, se aparece a necessidade de uma ordenação que não existe:
- adiciono um novo índice ao sistema, isso se o uso dessa ordenação é mesmo necessária e frequente;
- se é algo esporádico, crio um DBF temporário, com os índices adequados à situação, exclusivos a aquele usuário, e copio do Vendas.dbf (compartilhado) as informações que interessam. Quando o usuário acaba de usar a informação, deleto o DBF.

Ainda, há casos em que cabe alterar a estrutura da base de dados. Exemplo: o gerente financeiro, várias vezes por dia, acessa o Vendas.dbf para levantar as vendas consolidadas por dia, semana ou mês, para as suas elucubrações estatísticas (haja processamento!). Então, eu incluo no sistema os VendasTotalDia[Mês][Ano].dbf, alimentados no run time ou após o expediente. Com isso, o financeiro tem seus próprios arquivos e para de importunar os caixas...

Além disso, se esse Vendas.dbf tem trocentos milhões de registros ativos, com vendas desde 1950, na minha opinião tem algo de errado. Ao invés de trocar o servidor por um i7 Turbo Plus, com 100 Gb de memória para dar conta do recado, não seria melhor ter Vendas2013, Vendas2012 etc.? Acabou 2013? Arquivo morto com ele.

Em resumo, eu acho que não é só ficar buscando novas ferramentas ou processadores mais velozes. Tem que ter também um olho em que você os vai aplicar. Para que deixar 1950 na base de dados, se ninguém usa?
jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Dúvidas ORDSCOPE e Indices Temporário

Mensagem por jelias »

Obrigado por responder.

Imaginava que usando índices temporários "run time" não seria necessário usar o arquivo exclusivo, ou travar todo o arquivo com FLOCK(). Seguindo meus pensamentos, como o arquivo temporário é armazenado na memória RAM , buscava ganho de performance quanto ao acesso de dados.

Seguindo este preceito, imagino que usando o índice temporário pode-se gerar um arquivo usando a cláusula for já com os dados de um relatório. Mais como o amigo disse, pode não ser a melhor opção.
Irei fazer alguns testes aqui assim que tiver um tempinho.

Sds,

Júlio.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Dúvidas ORDSCOPE e Indices Temporário

Mensagem por Eolo »

Imaginava que usando índices temporários "run time" não seria necessário usar o arquivo exclusivo
Imagina você criar um índice (temporário ou não) sobre um arquivo que está recebendo atualizações de outros usuários... Se o DBF tem 1.000 registros, o NTX/CDX vai ter que conter a indexação desses 1.000 registros. Então, se no meio da indexação você inclui outro registro no DBF, como fica o índice?
Responder