Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Usando UUID no Ruby on Rails

Usando UUID no Ruby on Rails

Nessa apresentação abordo sobre utilizar UUID para identificar registros através do Postgresql ou do Active Record ao invés de utilizarmos o Sequential ID que é padrão no Ruby on Rails. Falo um pouco de como funciona o UUID, tipos de aplicações e as vantagens de utiliza-lo. Após tudo isso, há espaço para fazer um hands on simples implementando as duas abordagens, uma usando o Postgres e a outra usando os callbacks do ActiveRecord.

Avatar for Lincoln Rodrigues

Lincoln Rodrigues

June 10, 2019

Other Decks in Programming

Transcript

  1. O modo Rails de resolver as coisas • “Convention over

    configuration” • rails new • ActiveRecord • rails g model Author name:string
  2. Sequential ID • Gerado por estruturas internas do banco de

    dados • Geração centralizada • Fácil predição de valores válidos para o modelo
  3. • Composto por 5 grupos alfanúmericos separados 4 hiféns •

    Cada grupo tem o valor calculado isoladamente UUID - Universally Unique Identifier • 16-octets/128-bit padronizado pela RFC 4122 7fe1e927-dffa-42a9-a5fa-72f020fd7690
  4. UUID - Universally Unique Identifier • Geradas de forma randômica

    ou usando alguns seeds ◦ Versão 1: Timestamp e MAC address ◦ Versão 2: Timestamp, MAC address e DCE security version ◦ Versão 3 e 5: Namespace name-based ◦ Versão 4: Random 7fe1e927-dffa-42a9-a5fa-72f020fd7690
  5. UUID - Universally Unique Identifier • Risco de colisão baixíssimo

    (tratado como bug) 7fe1e927-dffa-42a9-a5fa-72f020fd7690
  6. • Difícil (quase impossível) predição de valores válidos para o

    modelo UUID - Universally Unique Identifier • Geração descentralizada 7fe1e927-dffa-42a9-a5fa-72f020fd7690 • Permitir regras no frontend (aplicações MVP com GraphQL)
  7. • Modelos que o frontend consome UUID - Universally Unique

    Identifier • Gateways de pagamento 7fe1e927-dffa-42a9-a5fa-72f020fd7690 • Aplicações que usam API GraphQL
  8. Ruby on Rails + UUID • Usando extensão do Postgresql

    para gerar as chaves • Usando o modulo SecureRandom do Ruby