[firebase-br] Tempo diminuindo...

Eduardo Jedliczka jedyfb em gmail.com
Sáb Ago 8 18:09:43 -03 2009


Kelsie. a procedure foi a mais rápida pois trouxe poucos dados (pouca
conversação entre o servidor e o aplicativo)

se você  criar uma UDF (por exemplo valida_cnpj que retorne 0 para
errado e 1 para correto) e reescrever o select para 

select cnpj, razao_social from tabela where valida_cnpj(cnpj) = 0

verá um desempenho muito melhor.

é claro que esta validação só é eficiente para "testar" dados já
existentes no banco.

durante o insert, é mais eficiente testar na aplicação, e se isto não
for possível, dá para testar o campo com um Check Constraint.

PS: prefiro falar apenas dos bancos que eu já administrei, e
desconsiderar coisas que não tenho muita base para afirmar (mas sei que
alguns membros do desenvolvimento do FB criaram um banco de 1 TB, porém
não tenho muitos detalhes sobre o funcionamento e estrutura do mesmo).
Resumindo :já trabalhei com bancos com mais de 30 milhões de registros
numa única tabela, e sei bem as vantagens e problemas deste tipo de
tabela... onde alguns deles passaram rapidamente dos 20 gb de tamanho.

abraço

Eduardo

Em Sex, 2009-08-07 às 13:20 -0300, //---- Kelsie.Z.Marshall ----//
escreveu:

> WORK IN PROGRESS
> 
> Não é o resultado final.
> 
> A idéia é subtituir a comparação por uma função, é dificil falar 
> hipoteticamente aqui.
> 
> Vamos dar um exemplo concreto que fica mais facil de entender imagine uma 
> tabela com 80 milhões de registros com duas colunas
> 
> CREATE TABLE "GRANDE_TABELA"
> (
>   "CNPJ"  VARCHAR(14),
>   "RAZAO_SOCIAL"  VARCHAR(120)
> );
> 
> Pronto um exemplo bem concreto não tem como se perder agora.
> 
> A tabela está toda preenchida.
> 
> insert into GRANDE_TABELA(CNPJ, RAZAO_SOCIAL) values 
> ('00000000000000','Empresa 1');
> insert into GRANDE_TABELA(CNPJ, RAZAO_SOCIAL) values 
> ('12243345345000','Empresa 80.000.000');
> 
> Agora queo sabr o que é mais rápido fazer a verificação via código dando um 
> scan na tabela ou fazendo uma função de verificação de CNPJ.
> 
> Pelo por SP é bem mais rápido pelo levantado até agora.
> 
> Kelsie
> 
> PS: Alguém já ouviu fazerdo bancode dados de 1 TETRA gerenciado pelo 
> FIREBIRD?  Qual o maior (Em tamanho de bytes) bando de dados que você oviu 
> falar gerenciado pelo firebird ?
> 
> 
> 
> "Adriano Ferreira" <aerreira68 em gmail.com> 
> wrote in message news:9709D68254734F979C60C97ED187F391 em principal...
> Rapaz, pelo que entendi, vc está comparando cada registro de sua tabela com 
> todos os demais registros existentes e repete isso zilhões de vezes. Isso é 
> um completo absurdo em qualquer sistema.
> 
> Basta colocar uma chave primária única na sua tabela, o que garantirá que 
> não existem chaves duplicadas, então esse seu teste se torna inútil.
> 
> Se sua tabela já contém dados, então crie uma chave primaria nela que 
> surgirão "key violation" em todos os que estiverem duplicados.
> 
> _
> Adriano Ferreira
> 
> ----- Original Message ----- 
> 
>   From: //---- Kelsie.Z.Marshall ----//
>   To: lista em firebase.com.br
>   Sent: Friday, August 07, 2009 12:33 AM
>   Subject: Re: [firebase-br] Tempo diminuindo...
> 
> 
>   Consegui alguma coisa
> 
> 
>   COMMIT WORK;
>   SET AUTODDL OFF;
>   SET TERM ^ ;
> 
>   /* Stored procedures */
> 
>   CREATE PROCEDURE "TEST_ID"
>   (
>     "IN_IDENT" VARCHAR(20),
>     "IN2" VARCHAR(20)
>   )
>   RETURNS
>   (
>     "RET" SMALLINT
>   )
>   AS
>   BEGIN EXIT; END ^
> 
> 
>   ALTER PROCEDURE "TEST_ID"
>   (
>     "IN_IDENT" VARCHAR(20),
>     "IN2" VARCHAR(20)
>   )
>   RETURNS
>   (
>     "RET" SMALLINT
>   )
>   AS
>   BEGIN
>     RET = -1;
>     FOR SELECT IDENT FROM BIG_TABLE INTO :IN_IDENT DO
>     BEGIN
>     IF ( IN_IDENT = IN2 ) THEN
>       RET = 1;
>     ELSE
>       RET = 0;
>     SUSPEND;
>     END
>   END
>    ^
> 
>   SET TERM ; ^
>   COMMIT WORK;
>   SET AUTODDL ON;
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa



Mais detalhes sobre a lista de discussão lista