[firebase-br] Chave primaria Guid

Wanderlei Borges wanderleiborges em gmail.com
Segunda Março 15 08:52:26 -03 2021


Bom dia pessoal.
Vou dar minha opinião, conforme o Cantu falou, o problema de performance do
GUID ocorre porque os números gerados são muito aleatórios, fazendo com que
a árvore tenha índice muito esparso. Pensando nisso, o melhor seria ter um
MYGUID que fosse gerado com uma parte não aleatória, mas sim sequencial, e
outra parte aleatória, por exemplo DATAHORASEQUENCIAL do tamanho de
char(20).
Vc poderia fazer uma class function no Delphi que retorne 5 dígitos para a
data, 10 dígitos para hora, minuto, segundo e milésimos de segundo, e mais
5 dígitos para o número aleatório. O MYGUID ficaria com uma parte
sequencial e outra aleatória, não seria tão esparso quanto o GUID normal.
Se vc entende que se o processador for rápido o suficiente para gerar mais
de MYGUID num mesmo milissegundo, o número aleatório tratará de diferenciar
os MYGUIDs.
E se vc acha que o número aleatório pode se repetir depois de algum tempo,
certamente isso ocorrerá num milissegundo diferente, o que te permitirá um
MYGUID diferente.
Não é infalível, mas na informática não conheço nada infalível.
At.
Wanderlei


Em dom., 14 de mar. de 2021 às 16:16, Rodrigo Gomes da Silva via lista <
lista em firebase.com.br> escreveu:

> Não é melhor usar como char(16) charset NONE mesmo? Pois como o Cantu
> falou, não tem nada especial no indice de octets... E com none, nem mesmo
> tem algum tratamento de charset na string pra fazer ter alguma diferença
> (minima) de performance.
>
> Em sáb., 13 de mar. de 2021 às 19:00, Carlos Wilson via lista <
> lista em firebase.com.br> escreveu:
>
> > Vou ler o artigo sim, mas a questão de ter um char ou varchar acima de
> > 16 posiçoes pelo que vi em outros estudos é a lentidão dos índices.
> > Conforme a tabela cresce o desempenho fica horrível segundo os artigos
> > que li. a vantagem do char(16) octects é que tem o mesmo desempenho de
> > um indice inteiro de 128 bits, portanto melhor pra PK e FK.
> >
> > Mas está tudo no campo da teoria ainda, pois nem consegui fazer
> funcionar.
> >
> > Obrigado.
> >
> > []'s
> > Carlos Wilson
> > Formosystem
> > Informática e Automação Comercial
> >
> > Em 13/03/2021 17:06, Mário Reis via lista escreveu:
> > > Bem recomendo a leitura do link:
> > > https://firebirdsql.org/refdocs/langrefupd25-intfunc-gen_uuid.html
> > > Já usei com MSSSQLSERVER e guardava numa varchar(35) salvo erro. Já foi
> > há
> > > 4 anos já não lembro bem
> > > Com os meus melhores cumprimentos
> > > Mário Agostinho Reis
> > > 919262146
> > >
> > > Esta mensagem contém informação de natureza confidencial e é
> > > exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por
> > engano,
> > > receber este email agradecemos que não o copie nem o reenvie e que nos
> > > notifique do ocorrido através do email de resposta.
> > > [image: cloudHQ] <https://www.free-email-tracker.com> Powered by
> > > cloudHQ <https://www.free-email-tracker.com>
> > >
> > >
> > > Marcelo - MK Softwares via lista <lista em firebase.com.br> escreveu no
> dia
> > > sexta, 12/03/2021 à(s) 22:58:
> > >
> > >> Nessa questão de leitura o C# faz bem tranquilo, usando a dll
> > >> FirebirdSql.Data.FirebirdClient. É só declarar uma propriedade em uma
> > >> class com o tipo Guid e fazer a leitura/gravação no banco sem
> problemas
> > >> algum.
> > >>
> > >> Agora se usar em string como o Cantu sugeriu, retorna erro de leitura
> > >> gravação. Tentamos dessa forma mas sem sucesso, e só conseguimos
> > >> solucionar quando mudamos o field para esse domain que compartilhei
> > >> anteriormente.
> > >>
> > >>
> > >> Em 12/03/2021 20:32, Carlos H. Cantu via lista escreveu:
> > >>> Acredito que você tenha que usar um string e não TBytes.
> > >>>
> > >>> []s
> > >>> Carlos H. Cantu
> > >>> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
> > >>> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
> > >>>
> > >>> CWvl> Criei desse mesmo jeito no banco, a questão é na aplicação pra
> > ler
> > >> esse
> > >>> CWvl> dado.
> > >>>
> > >>>
> > >>> CWvl> []'s
> > >>> CWvl> Carlos Wilson
> > >>> CWvl> Formosystem
> > >>> CWvl> Informática e Automação Comercial
> > >>>
> > >>> CWvl> Em 12/03/2021 15:57, Marcelo - MK Softwares via lista escreveu:
> > >>>>> Aqui usamos C# e para resolver os problemas com guid, criamos esse
> > >>>>> domain, e funciona bem tranquilo.
> > >>>>>
> > >>>>> CREATE DOMAIN UUID AS CHAR(16) CHARACTER SET OCTETS COLLATE OCTETS;
> > >>>>>
> > >>>>>
> > >>>>> Em 12/03/2021 15:44, Carlos Wilson via lista escreveu:
> > >>>>>> Boa tarde a todos,
> > >>>>>>
> > >>>>>> Atravessei a madrugada pesquisando e não achei solução para o meu
> > >>>>>> problema. Utilizo o Unidac.
> > >>>>>>
> > >>>>>> Devido a tantos problemas com replicação e outros em sincronizar
> > >>>>>> bancos de várias filiais estou tentando migrar minhas PK para GUID
> > >>>>>>
> > >>>>>> depois de estudar em alguns lugares vi que a pk tem que ser criada
> > >>>>>> como Char(16) Octates. Dessa maneira a pk é gravada como bytes
> > >>>>>> binarios e o desempenho fica melhor ao indexar e usar como FK.
> > >>>>>>
> > >>>>>> No delphi fiz essa função para preenchimento da chave.
> > >>>>>>
> > >>>>>> function Tdm.IncUUID: TBytes;
> > >>>>>> var
> > >>>>>>     qry: TUniQuery;
> > >>>>>> begin
> > >>>>>>     qry := TUniQuery.Create(Self);
> > >>>>>>     qry.Connection := DBConn1;
> > >>>>>>     qry.SQL.Clear;
> > >>>>>>     qry.SQL.Add('select GEN_UUID() from RDB$DATABASE');
> > >>>>>>     qry.Open;
> > >>>>>>     Result := qry.Fields[0].AsBytes;
> > >>>>>>     qry.Free;
> > >>>>>> end;
> > >>>>>>
> > >>>>>> Ao fazer o append ele chama essa função e parece que está
> > >>>>>> preenchendo. porém ao dar um post, acontece a excessao:
> > >>>>>>
> > >>>>>> Could not convert variant of type (array byte) into type
> (integer).
> > >>>>>>
> > >>>>>> Atualizei o Unidac mas o erro persiste, mas não sei mais o que
> posso
> > >>>>>> fazer. Alguém, por favor, pode me dar uma luz?
> > >>>>>>
> > >>>>>> Grato.
> > >>>>>>
> > >>>>> ______________________________________________
> > >>>>> 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://www.firebase.com.br/pesquisa_lista.html
> > >>> CWvl> ______________________________________________
> > >>> CWvl> FireBase-BR (www.firebase.com.br) - Hospedado em
> > >> www.locador.com.br
> > >>> CWvl> Para saber como gerenciar/excluir seu cadastro na lista, use:
> > >>> CWvl> http://www.firebase.com.br/fb/artigo.php?id=1107
> > >>> CWvl> Para consultar mensagens antigas:
> > >>> CWvl> http://www.firebase.com.br/pesquisa_lista.html
> > >>>
> > >>>
> > >>> ______________________________________________
> > >>> 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://www.firebase.com.br/pesquisa_lista.html
> > >> ______________________________________________
> > >> 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://www.firebase.com.br/pesquisa_lista.html
> > >>
> > > ______________________________________________
> > > 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://www.firebase.com.br/pesquisa_lista.html
> >
> > ______________________________________________
> > 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://www.firebase.com.br/pesquisa_lista.html
> >
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>


Mais detalhes sobre a lista de discussão lista