[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Desempenho e confiabilidade em bd..
From: |
moysespr |
Subject: |
Re: [shell-script] Desempenho e confiabilidade em bd.. |
Date: |
Mon, 20 Oct 2003 20:32:41 -0700 (PDT) |
Oi, desculpem todos, mais uma postagem.
Fernando, tive um click repentino, e não pude deixar de tentar
melhorar o seu dia.
Se você precisa apenas fazer um lançamento (novo ou alteração, sem
diferenciar) poderia experimentar as linhas abaixo onde, se existir o
registro, será excluido, e o lançamento será inserido no fim do
arquivo.
grep -v $chave2 file.db>file.dbt
echo "linha a ser lançada aqui">>file.dbt
daà os mv de segurança que estão na anterior (abaixo).
Hihh, lá faltou um "p" depois dos ...999
Imagino desta última forma ser bem mais rápido o proceso. Nada
testado. Considere o dito anteriormente. Será que só é possÃvel
processar um registro por vez??? :(
Agora o melhor:
Fim!
--- moysespr <address@hidden> wrote:
> Oi, eu não sei quase nada, mas vou tentar te passar o que penso.
> Espero que ajude de alguma forma.
>
> Primeiro, acho que você deve orientar o seu script para linhas
> (registros) como ocorre trivialmente em dbs. Como você não tem um
> Ãndice, e aqui nem justificaria, você usaria o sed para te dar a
> linha, assim:
>
> reg=`grep -n $chave2 file.db|cut -d: -f1`
> não use o cat, pois um programa adicional (dispensável aqui) só
> deve
> fazer o tempo de resposta subir
>
> Imagino que haja apenas duas possibilidades reg vazio (não existe)
> e
> reg algum_numero (número da linha onde reside a chave2, suponho-a
> única).
>
> Com essa info você toma sua decisão. Se você não ordena as suas
> linhas é so 'appendar" uma nova linha para a inclusão.
>
> Para a alteração você faz algo assim:
>
> sed --silent 1,$(($reg-1))p file.db>file.dbt
>
> echo "a linha alterada aqui">>file.dbt
>
> sed --silent $(($reg+1)),999999 file.db>>file.dbt
>
> mv file.db file.db`date +%s`; mv -i file.dbt file.db
>
>
> Na alteração, o ideal seria não escrever outro arquivo (ou o mesmo
> integralmente). O ótimo seria apenas fazer a alteração desejada no
> ponto, ou pelo menos na linha correspondente. Certa vez até postei
> uma dúvida sobre isso, mas não houve respostas. Talvez não haja
> algo
> assim para "unix", o que seria realmente uma pena. Mas como citei
> no
> inÃcio tome minhas palavras com ressalvas.
>
> Me esforcei nas linhas de comando para não errar, mas esteja de
> mente
> aberta. Acho que deve funcionar. Não experimentei.
>
> Se der certo, estou curioso sobre a performance. Dê notÃcias.
>
>
>
> --- Fernando Lemes da Silva <address@hidden> wrote:
> >
> > Cara, acabei apelando pro mysql mas não tá muito eficiente..
> são
> > mais ou
> > menos 11.000 registros e o arquivo mysql tem pouco mais de 1
> > mega... o que
> > eu tentei inicialmente foi :
> >
> > Inserir : echo $chave1$chave2 >> file.db
> > Buscar : cat file.db | grep $chave2
> > Atualizar : cat file.db | sed
> "s/.\{32\}$chave2/$chave1$chave2/"
> > >
> > file.db
> >
> > $chave1 é de tamanho fixo com 32 caracteres (chave md5sum)
> > $chave2 é um nome de arquivo
> >
> > Para uma quantidade pequena de arquivos parecia funcionar, mas
> > quando
> > rodei para os 11 mil registros ele começou a perder as chaves e
> eu
> > não
> > entendi bem o porque...
> >
> > Se alguem puder me dar uma luz de como fazer isso eu posso
> > tentar para
> > melhorar o desempenho...
> >
> > E se eu carregasse o arquivo na memoria ? dá pra fazer um
> vetor,
> > um hash
> > ou qualquer coisa assim no shell ?
> >
> > []'s
> > Fernando Lemes
> >
> > P.S. Enderson, assim que eu conseguir fazer isso funcionar de
> > forma
> > satisfatoria eu te mando, ok ?
> >
> >
> >
> > ----- Original Message -----
> > From: "Aurelio Marinho Jargas" <address@hidden>
> > To: <address@hidden>
> > Sent: Saturday, October 18, 2003 9:03 AM
> > Subject: Re: [shell-script] Desempenho e confiabilidade em bd..
> >
> >
> > > como você mesmo disse "coisa simples".
> > > não há necessidade de amarrar teu script a um banco de dados
> > > completo só pra ter a relação entre 2 colunas.
> > > quanto a eficiência, o banco de dados com arquivo texto só
> > > ficará lento se teu arquivo ficar muito, mas MUITO grande
> > > com vários MEGAS de tamanho. mas como isso é meio raro,
> > > usa texto sim!
> > > basta fazer tipo o /etc/passwd, separando as colunas por :
> > > ou até mesmo por TABs pra depois usar grep|cut pra extrair
> > > os dados.
> > > guarde o canhão para moscas maiores, pois as ferramentas do
> > > UNIX te dão a maior força para não precisar dele :)
> > > falou.
> > > Aurelio Marinho Jargas - Floripa
> >
> >
>
>
> __________________________________
> Do you Yahoo!?
> The New Yahoo! Shopping - with improved product search
> http://shopping.yahoo.com
>
>
>
---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de
> programação, como perl, C etc. Quem insistir em não seguir esta
> regra será moderado sem prévio aviso.
>
---------------------------------------------------------------------
> Sair da lista: address@hidden
>
---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listasdiscussao.cjb.net
>
---------------------------------------------------------------------
>
>
> Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
> http://br.yahoo.com/info/utos.html
>
>
__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com