Sempre gosto mais do que é novo e vem para somar. A alguns anos, sempre quando me deparava com modelagem de bancos dava preferência a tipos de dados uniqueidentifier. É uma preferência pessoal, porém, ajuda quando temos que lidar com INSERTS de aplicações offline.

Mas em uma conversa com o Rafael, um amigo de trabalho, começamos a discutir sobre o desempenho e performance se comparado a uma chave primária do tipo int. Com certeza vai ter problema de escabilidade. Comparar uma a performance de indexação de um campo de 4 bytes com um binário de 16 bytes é covardia.

Mas desde a versao 7 do SQL Server, a Microsoft criou uma solução para isso. Antes, os campos uniqueidentifier você atribuia um valor com alguma função System.Guid.NewGuid() ou mesmo interna do SQL Server, NEWID(). Mas isso gera queda de performance e problemas de escabilidade. O banco vai fragmentar. Olha algumas GUID criadas com o .NET Framework.

  • {4558B194-FA8B-435f-9FDF-363EF258447F}
  • {0C93A685-0F67-4e04-A8BA-AB04B460320E}
  • {669D610F-ECED-4fea-8F88-18B63551A9D0}
  • {66EB380A-CD70-4ede-AF99-5B18927524ED}

Indexar uma tabela carregada com chaves primárias nesse formato traria dor de cabeça.

Agora, veja algumas GUID criadas com a função interna NEWSEQUENTIALID() do SQL Server 7.

  • B3BFC6B1-05A2-11D6-9FBA-00C04FF317DF
  • B3BFC6B2-05A2-11D6-9FBA-00C04FF317DF
  • B3BFC6B3-05A2-11D6-9FBA-00C04FF317DF
  • B3BFC6B4-05A2-11D6-9FBA-00C04FF317DF
  • B3BFC6B5-05A2-11D6-9FBA-00C04FF317DF

Dá pra perceber que apenas o oitavo byte é mudado, o restante é constante, isso que ajuda a indexação. No SQL Server 2000 apenas o 13º byte é constate. Olha agora algumas GUID geradas no meu SQL Server 2005 Express.

  • 6dca3a74-097c-dd11-8241-0019d1a5065d
  • 6eca3a74-097c-dd11-8241-0019d1a5065d
  • 351ccf7a-097c-dd11-8241-0019d1a5065d
  • 54703d8b-097c-dd11-8241-0019d1a5065d
  • 55703d8b-097c-dd11-8241-0019d1a5065d

A sequência é gerada nos 8 primeiros bytes, o restante é constante.

A dica é essa, se quiser usar uniqueidentifier como chave primária de suas tabelas, use a função interna NEWSEQUENTIALID() do SQL Server para melhorar a performance e escabilidade das suas aplicações.

Só lembrando, ainda assim chaves primárias do tipo int ainda assim são mais performáticas, porém, seguindo a dica, a queda de performance não será percebida. Lembrando também que esses problemas de performance e escabilidade só são identificados quando sua base possuir muitos registros, lá na casa dos 300 mil, 500 mil, 1 milhão, ou seja, “coisa pra (b)aralho”.

Para aqueles que se perguntarem “se essa GUID não repete” a possibilidade é mínima. Matematicamente falando é mais facil ganhar na Megasena. NEWSEQUENTIALID() usa um algoritimo que para gerar a GUID se utiliza do MAC da placa de rede (que os fabricantes dizem nunca se repetir) e do DateTime da máquina.

Segue também uma leitura que eu recomendo descrevendo em mais detalhes o assunto!

[]´s

OBS:

Ainda não somos independentes mas pelo menos hoje é um ótimo dia para postar a nossa bandeira que é sem dúvida a mais bonita do mundo!

brazil-flag

, , ,

O mercado de R.I.A. está em constante crescimento e as empresas estão adotando cada vez mais o Flex como interface para seus sistema.
Recentemente a Adobe Liberou a especificação do AMF3 oque possibilitou uma melhor safra de middleware e um dos produtos que seguiu essa onda foi o FluorineFx, que faz a chamada de métodos remotos em aplicações dotnet.
Quem acompanha a evolução do DotNet Framework, sabe que foi adicionado na versão 3.0 um novo mecanismo de consulta denominado LINQ, cuja função é servir como camada de acesso à dados, seja ela SQL, XML, Objetos, etc.
Essa semana eu começei um projeto usando essas duas tecnologias e é claro com Flex, por isso resolvi fazer um post sobre como configurar esse projeto para ajudar quem vier a ter dificuldades.

Read the rest of this entry

, , , , , , , ,

Tá na moda o “open-source” né?

Até eu já lancei (tentei) 2 projetinhos open-source, o JPOHelper e o JPOBlogger. É legal para aprender e ajudar quem quer aprender.

No meu recente projeto resolvi retrabalhar algumas tabelas e modelos de banco e resolvi lançar uma novidade: MODELO DE ENTIDADES RELACIONAIS OPEN-SOURCE! Nesse nosso primeiro modelo a licença será a UAVL. (Use A Vonts License)

Nesse meu primeiro modelo que estou disponibilizando, criei algumas tabelas de cliente e algumas relações. Por exemplo documentos, endereços, dependentes e forma de contato.

Dêem uma olhada.

Modelo de Entidade Relacional

Aqui disponibilizo o Dump das tabelas Cliente para SQL Server 2005.

Meu modelo é o mais genérico possível, podendo ser aplicado em caso todos os casos de sistemas onde temos cadastros de clientes. Claro que esse “cliente” pode mudar podendo ser uma pessoa, um fornecedor entre outros.

No caso o que segue no post é a dica! A idéia de um modelo!

Aos interessados postem suas dicas. E quem ficou com alguma dúvida é só perguntar.

Edit: No dump esqueci de colocar o AUTO_INCREMENT nas chaves primárias.

Edit II: Logo vou postar também o dump do modelo para MySQL, quem quiser mandar o dump de outros bancos é só mandar para jul.oliveira@gmail.com

 Mais um Edit: Logo vou disponibilizar aqui no Programando em .NET um repositório de modelos de bases.

[]´s

, , , , , , , ,