Melhor estratégia de IDs para seu próximo app (UUID ou autoincrement?)

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 ม.ค. 2025

ความคิดเห็น • 100

  • @RafaelDailySantosMartins
    @RafaelDailySantosMartins 7 หลายเดือนก่อน +26

    Simplesmente uma AULA de sistemas distribuidos. Ótimo conteúdo. Esse nível de conhecimento eu só fui ter na faculdade e raramente vejo em português na internet.

    • @thiagosilvaloopes
      @thiagosilvaloopes 7 หลายเดือนก่อน

      Sim. Por isso que os caras da Rocketseat são sensacionais, muito conteúdo gratuito, com extrema qualidade 🥳🎉

  • @nasilvanick
    @nasilvanick 7 หลายเดือนก่อน +7

    Adorei este conteúdo, IDs era uma das coisas que mais me quebravam a cabeça na questão de performance e aplicabilidade. Eu realmente não encontrei outro vídeo igual a este. Esse conteúdo que o diegão fez tem um baita valor. Parabéns, DIegão. Baita aula

  • @rafacamarda
    @rafacamarda 7 หลายเดือนก่อน +8

    Curti muito Diego, acho que a Rocket ganha muito se começar a trazer pra cá mais conteúdos fundamentais não específicos de uma linguagem.

  • @eorafasantos
    @eorafasantos 7 หลายเดือนก่อน +1

    Simplesmente gratificante entrar aqui e ter esse tipo de conteúdo pra consumir. Fico feliz de estar na Rocket e poder entender e conectar esses conteudos com meu aprendizado atual. Começando a construir minhas bases. Sensacional ❤❤

  • @raimundoclessyo8943
    @raimundoclessyo8943 7 หลายเดือนก่อน +1

    Simplesmente facinante ❤.
    Entrega muito contéudo em um único vídeo e o melhor totalmente grátis

  • @astropgn
    @astropgn 7 หลายเดือนก่อน

    Em 13:04 ele diz que todo algorítimo de geração de dado único tem risco de colisão "porque na computação nada é aleatório". Porém o risco de colisão não é apenas por causa da aleatoriedade, mas também por conta do tamanho do domínio dos algorítimos. Você pode fazer algorítimos com aleatoriedade real (usando os hardware random number generator, ou a entropia de vários sistemas naturais como som ambiente, imagens dinâmicas de processos físicos aleatórios etc) e mesmo assim haver colisão. A analogia é se o ID for gerado por um dado. Um dado é aleatório, mas o domínio só vai de 1 a 6. Se você jogar o dado 7 vezes, terá 7 resultados aleatórios e obrigatoriamente uma colisão no mínimo.

  • @MilsonPazienza
    @MilsonPazienza 5 หลายเดือนก่อน

    Que vídeo de alto valor, parabéns, ainda existem TH-camrs Tech que realmente fazem conteudo interessante.

  • @ageurodriguesdeoliveira8953
    @ageurodriguesdeoliveira8953 7 หลายเดือนก่อน +1

    Muito bom, eu nem sabia desses problemas que podem ter. Ou seja nunca fiz uma aplicação que tem inserções absurdas

  • @Iacapuca
    @Iacapuca 7 หลายเดือนก่อน +3

    Você pode usar UUID e Incremental ao mesmo tempo.
    Usa o incremental como sua primary key e cria uma coluna para o uuid como por exemplo "external_refid", dai tu passa a usar o refid para tudo o que precisar fora do seu backend.
    Isso é util para não expor o incremental ao mesmo tempo que você tem as vantagens dele

    • @GabrielOliveira-nj9qg
      @GabrielOliveira-nj9qg 7 หลายเดือนก่อน +1

      5:29

    • @CanalExistencial
      @CanalExistencial หลายเดือนก่อน

      Que tal algo semelhante ao ObjectId do MongoDB? Ele é time Sortable e tem 12 bytes.

  • @jotauser
    @jotauser 7 หลายเดือนก่อน

    Como sempre um conteúdo maravilhoso, mas gostaria de colocar os meus dois centavos para tentar contribuir.
    Na questão da pesquisa por faixa de ID também poderíamos usar na clausula WHERE a faixa de ID, por exemplo: SELECT * FROM TABELA WHERE ID BETWEEN 980 AND 1000, pois usaríamos da mesma forma o índice ( método usado seria INDEX RANGE SCAN). Durante a explicação da geração dos IDs foi colocado que a aplicação não teria como saber o ID a priori, mas na verdade, teríamos a opção de usar o objeto SEQUENCE do banco de dados. Vc poderia, inclusive, combinar o SEQUENCE com TRIGGER. A TRIGGER usaria automaticamente a SEQUENCE para fornecer o próximo número para o ID caso o DEV não o passasse. Isso poderia ajudar em necessidades de cargas de dados legados onde fosse necessário aproveitar os mesmos IDs. Obviamente, depois de um processo de carga, seria necessário "resetar" a SEQUENCE para o último valor carregado para que a aplicação pudesse continuar sozinha. Os meus comentários não invalidam em nada a apresentação e minha intenção e de apenas contribuir para a questão.

  • @edu_sdorneles
    @edu_sdorneles 7 หลายเดือนก่อน +3

    Que vídeo RICO em informações, muito massa!!!

  • @gabrielaltran
    @gabrielaltran 7 หลายเดือนก่อน

    Entendi alguma coisa que o Diego disse? Com certeza não, mas a didática e a forma de explicar é sensacional

  • @pk7r_
    @pk7r_ 4 หลายเดือนก่อน

    geralmente eu gosto de atribuir os indexes que vou utilizar para realizar buscar independente do id e uso UUIDv4 como id.

  • @sedraccalupeteca5769
    @sedraccalupeteca5769 7 หลายเดือนก่อน

    Eu utilizo uuid, na maioria das vezes faço API, eu ordeno com created_at (já tive caso de ter encontrado o registro com mesmo timestamp), e para minimizar os registros da db utilizo multitenancy a nível de base dados (não seja tanta vantagens em fazer a nível de tabelas), de modo mais mecânico como a fazer backup de informações antigas e depois apago.

  • @daniellimae
    @daniellimae 7 หลายเดือนก่อน

    esse video ficou mt bom, esses cortes facilitou mt assistir ao video

  • @juniormartinxo
    @juniormartinxo 7 หลายเดือนก่อน +2

    Bom vídeo. Eu, particularmente, gosto muito de uuid, pois já tive que fazer junção de dados com sequence e foi um BO enorme trabalhar um monte de ID igual. No final tive que reescrever as chaves... loucura!
    Bacana mostrar Snowflake ID e semelhantes, mas na minha opinião, "created_at" com timestamp(3) já torna o campo suficientemente ordenável para a maioria das aplicações.

    • @vitvitvitvitvitvitvitvit
      @vitvitvitvitvitvitvitvit 7 หลายเดือนก่อน +1

      com timestamp(3) não aconteceria o problema que diego disse? eu só fiz site interno e sempre uso id auto incremental mesmo por ser mais fácil.

    • @juniormartinxo
      @juniormartinxo 7 หลายเดือนก่อน

      @@vitvitvitvitvitvitvitvit cara, muito difícil de acontecer em uma aplicação comum pois as datas são persistidas com milissegundos, saca este exemplo real (2024-04-19 01:08:48.277 e 2024-04-19 01:08:48.688), repara a casa dos milissegundos (277 e 688). Estes dados foram inseridos juntos e ainda assim deu uma diferença grande.

    • @juniormartinxo
      @juniormartinxo 7 หลายเดือนก่อน

      @@vitvitvitvitvitvitvitvit sim, pois a data é persistida com milissegundos.

    • @lucascaton
      @lucascaton 7 หลายเดือนก่อน +1

      É muito raro, quase impossível. O timestamp do PostgreSQL já tem resolução em nanosegundos 🙂

  • @rodrigoaraujo1608
    @rodrigoaraujo1608 7 หลายเดือนก่อน

    Que conteúdo foda, me tirou várias dúvidas !

  • @palharez
    @palharez 7 หลายเดือนก่อน +1

    Que conteúdo de altíssimo nível 👏

  • @GabrielOliveira-nj9qg
    @GabrielOliveira-nj9qg 7 หลายเดือนก่อน

    Por favor Diegão, traz mais conteúdos técnicos como esse

  • @CarlosEduardo-we7gb
    @CarlosEduardo-we7gb 7 หลายเดือนก่อน

    Eu aqui me perguntando como que faz uma paginação, e o Daniel explicando isso no vídeo também, xô correr ali pro meu Backend rapidin hahahaha

  • @omarcospreviato
    @omarcospreviato 7 หลายเดือนก่อน +1

    Uso sempre o nanoid com 21 char, na minha opinião é o melhor dos mundos, a colisão aconteceria em ~41 milhões de anos com a inserção de 1.000 ids por segundo.

  • @fernandomoraes2325
    @fernandomoraes2325 7 หลายเดือนก่อน

    Considerações:
    - Existem variações do UUID, e a versão 4 é ordenável.
    - Indiferente de conter ou não na url um id amigável, é seu dever no backend fazer a segurança do acesso
    - Para a maioria gigantesca das aplicações o custo extra de um id maior (tamanho de banco e etc) nunca será um problema

  • @reginaldosnunes
    @reginaldosnunes 7 หลายเดือนก่อน +1

    Muito bom, interessante e direto ao ponto.

  • @vinybas
    @vinybas 7 หลายเดือนก่อน

    Criei recentemente uma aplicação, e, na hora de discutir a estratégia de Id (as legadas usavam Identity/auto-increment, eu queria usar Guid), o DBA implicou com o Guid dizendo que, o fato dele não ser ordenável, traria uma perda de performance muito grande no BD. Acabei recorrendo ao ULID, tem suas desvantagens, principalmente por não ser muito popular, mas atendeu muito bem ao projeto. Dei uma olhada no snowflake mas o custo de implementação não valeria a pena.

  • @felipe-muniz
    @felipe-muniz หลายเดือนก่อน

    2:50 esse ponto positivo de paginacão em sql não faz sentido, a maneira mais eficaz de paginar é utilizando OFFSET (Skip) e FETCH (Take) na consulta sql, o id não influencia em nada na paginacão, a não ser os caracteres a mais que irão ser retornado a mais na consulta caso seja usado guid/uid.

  • @LeandroSantiagoGomes
    @LeandroSantiagoGomes 7 หลายเดือนก่อน

    a partir do momento que você precisa fazer um SORT vc já acaba com a condição de "ordenável" da chave ID, afinal você obrigatoriamente vai aplicar uma ordenação por um campo no bd, e pra isso existe indexes

  • @carlotadias9335
    @carlotadias9335 2 หลายเดือนก่อน

    Olá, ainda estou a ver o vídeo muito obrigada
    mas já tenho algumas perguntas !
    O do snowflake usar o timestamp para ordenação não pressupõe o mesmo problema de repetição que tinha o create_at ?
    Mesmo que depois sejam diferentes pela máquina ..
    Depois, para evitar conflitos a 100%, não se poderia usar o username para gerar ese id, já que é único ?
    Valeu mano
    Muito bom

  • @TrickUltimatefull
    @TrickUltimatefull 7 หลายเดือนก่อน

    Simplesmente genial! 🙌

  • @rvian4
    @rvian4 7 หลายเดือนก่อน

    Vale adicionar que os uuid dao uma quebrada em index clusterizadas. Sql server tem o global uniqueidentifier que da uma mitigada nisso

  • @odevrenan
    @odevrenan 7 หลายเดือนก่อน +2

    Sei q o vídeo e sobre bancos relacionais e tal, mas qual sua opinião sobre o ObjectId do MongoDB? Será q ele é suficiente pra grandes projetos como um Twitter da vida, ou teríamos q usar um SnowflakeID também?

  • @thiagoteles8963
    @thiagoteles8963 7 หลายเดือนก่อน

    vc pode criptografar o id, para usuario e no backend descriptografa e busca os dados necessarios , uso assim no laravel
    fica a mesma coisa no banco de dados e o usuario sempre irá ver criptografado

    • @ElVen1x
      @ElVen1x 7 หลายเดือนก่อน

      Mas ainda vai ter problemas de legibilidade e caso tu precise de alguma forma encontrar essa informação, tu vai ter que ter acesso a chave secreta da criptografia

  • @georgebezerra8863
    @georgebezerra8863 7 หลายเดือนก่อน

    Cara muito bom esse conteúdo !!!!!

  • @isaquesb
    @isaquesb 7 หลายเดือนก่อน +1

    "Onde é que começa essa desgraça?, onde é que termina essa desgraça?"
    Fernandes, Diego - 2024
    kkkkkkkkk!!!

  • @AlexandredeCarli
    @AlexandredeCarli 7 หลายเดือนก่อน

    Bem, acredito que houve uma simplificação ingênua na comparação de que a diferença entre armazenar um integer ocupa menos espaço que uma string.
    Vários bancos de dados relacionais reservam espaço em disco sobre o tamanho da página que o registro ocupa, e não necessariamente o que está escrito dentro da página, portanto é uma falácia dizer que necessariamente por ter dados inteiros ou texto vão ocupar mais ou menos espaço. Espero que isso leve a mais pessoas pesquisarem sobre o tema (:

  • @ronalddurand2680
    @ronalddurand2680 7 หลายเดือนก่อน

    valeu Diego pela info top de mais

  • @rhkina
    @rhkina 7 หลายเดือนก่อน +7

    Não sei se a solução de pegar os últimos registros a partir da ordem dos registros funciona... E se já houver registros deletados?
    Mas, com certeza, o espaço ocupado e o tempo de processamento contam bastante a favor do auto incremento.
    Tem uma boa explicação do problema de se usar uuid no vídeo do Theo (th-cam.com/video/a-K2C3sf1_Q/w-d-xo.htmlsi=_NNKfuFI5o-x9jxz). Ele sugere o uso do nanoid.

    • @VictorTorresOficial
      @VictorTorresOficial 7 หลายเดือนก่อน

      Funciona porque é um cursor. Se tiver registro apagado depois do where id > ponteiro, o banco de dados vai contar normalmente apenas os registros que ele encontrou, retornando ao atingir o valor definido no limit ou ao esgotar as linhas da tabela. O cursor é apenas uma referência de onde você parou na última página, um ponto de partida.

  • @LuizGustavo-km1yb
    @LuizGustavo-km1yb 7 หลายเดือนก่อน

    kct, esse conteúdo foi foda

  • @CaioCaiu
    @CaioCaiu 5 หลายเดือนก่อน

    Qual seu Mac Diego?

  • @vkRenan
    @vkRenan 5 หลายเดือนก่อน

    Dito isso, usarei apenas ID e UUID juntos.

  • @Luccas_Alves
    @Luccas_Alves 5 หลายเดือนก่อน

    Solução, concatenar no UUID em algum lugar dele, um valor numérico ordenado e fragmentado entre as posições do UUID e coloca um pré processamento no back pra pegar de qual user estamos recebendo aquele UUID.
    Por nada!

  • @williamroger9375
    @williamroger9375 7 หลายเดือนก่อน +20

    Galera por favor, me respondam onde é e quando acontecem essas lives de onde tiram esses cortes?

    • @devgustavovasquez
      @devgustavovasquez 7 หลายเดือนก่อน +2

      poderiam avisar por email/insta, as notificações da twitch não chegam para mim

    • @ivambergsilva591
      @ivambergsilva591 7 หลายเดือนก่อน +3

      Na Twitch, pow. No canal dele.
      É avisado no discord, toda vez

    • @Mora0219
      @Mora0219 7 หลายเดือนก่อน

      Qual é o canal dele?​@@ivambergsilva591

    • @williamroger9375
      @williamroger9375 7 หลายเดือนก่อน +2

      @@ivambergsilva591 Valeu mano, eu não tenho o hábito de usar muito o discord, raramente acessso, mas essas lives do Diego eu quero muito ficar acompanhando então vou seguir ele lá na Twitch também, muito obrigado!

  • @etni_dev
    @etni_dev 7 หลายเดือนก่อน

    o custo computacional de se criar um id é assim tão relevante? O snow flake parece bem completo, precisamos de tantas soluções? Me parece que criar uma coluna para ordenação é mais interessante, é mais simples e o custo computacional não é assim tão alto, mas não colocaria o nome de public_id, ter 2 ids parece confuso

  • @fellipeutaka
    @fellipeutaka 7 หลายเดือนก่อน

    Alguém tem um exemplo de cursor based pagination usando ulid ou outro id time sortable? Tentei mas n consegui 😅

  • @engroga
    @engroga 7 หลายเดือนก่อน

    2:45 substituir o offset por comparação com id numérico? E se os ids não forem contíguos? 🤔

    • @felipe-muniz
      @felipe-muniz หลายเดือนก่อน

      Essa forma de paginar não é a ideial, ele meio que tentou forcar um ponto positivo que não existe. Uma paginacão bem feita voce ira utilizar OFFSET (skip) e FETCH (Take ).

  • @devarthurreis
    @devarthurreis 7 หลายเดือนก่อน

    Aula perfeita

  • @lucasmordzin
    @lucasmordzin 5 หลายเดือนก่อน

    Não é só utilizar um timestamp + nanoid, por ex?

  • @M0T4
    @M0T4 7 หลายเดือนก่อน

    Otimo conteudo pra mim que so usava ShortId() em tudo haha

  • @yuur1440
    @yuur1440 7 หลายเดือนก่อน

    Onde é feito essas lives?

  • @gabrielmedeiros9806
    @gabrielmedeiros9806 7 หลายเดือนก่อน

    Uma dúvida, mas se eu usar a opção where para fazer a paginação com o id não corre o risco de repetir o dado, pois algum desse registro pode ser apagado e essa sequência ser quebrada?

  • @pedroenrique6783
    @pedroenrique6783 7 หลายเดือนก่อน

    Qual essa ferramenta que ele usa para digitar na tela alguém sabe ? 😅

  • @e2e23e
    @e2e23e 4 หลายเดือนก่อน

    Confesso que não entendo muito bem a necessidade do id ser sortable. Podemos usar outro campo para ordenação que não o id ( ex. Data de criação)

    • @abralvs
      @abralvs 3 หลายเดือนก่อน

      É porque demora mais e alguém pode ter criado ao mesmo tempo, pelo id é mais difícil, pq é auto Incremento e também pra ordenar id custa menos, porque é número e é pequeno

  • @reinheimermat
    @reinheimermat 7 หลายเดือนก่อน

    Alguém sabe dizer onde o Diego grava essas lives?

  • @eliseumds
    @eliseumds 7 หลายเดือนก่อน

    Eu sei que é natural pensar que daria pra fazer paginação desse jeito aí (id > 980), mas na realidade não funciona porque muitas vezes teremos filtros aplicados.

  • @ThiagoDias-v2t
    @ThiagoDias-v2t 7 หลายเดือนก่อน

    cara qual app é esse q ele usa pra fazer notas e navegar ao mesmo tempo?

  • @lucasfranzolin
    @lucasfranzolin 7 หลายเดือนก่อน +8

    Vou ter que refatorar mais uma app....poxa Diegão 😂

  • @talismamanuel
    @talismamanuel 7 หลายเดือนก่อน +1

    muitas inserções seriam tipo quanto?

    • @Brendospdev
      @Brendospdev 7 หลายเดือนก่อน

      eu colocaria no mínimo na casa dos milhares para milhões em um certo período de tempo. Na empresa que trabalho, lidamos com mais de 15k inserções por minuto e isso não é muito se comparado com twitter, instagram, discord...

    • @joaovitor6352
      @joaovitor6352 หลายเดือนก่อน

      Depende da máquina, aplicação e banco. Mas vc pode tratar 100/200k por segundo como algo que já seria muito. Mas ainda sim não tão muito. Apenas algo p vc se preocupar c filas, pools e afins.

  • @dridev01
    @dridev01 7 หลายเดือนก่อน

    Caralho que AULA da porra

  • @Matheus-qv7yw
    @Matheus-qv7yw 7 หลายเดือนก่อน

    baita aula

  • @rfullstack
    @rfullstack 6 หลายเดือนก่อน

    F para eu com meus Guid em multitenant com uma base pra 100 cliente no momento =D

  • @samuhmatos
    @samuhmatos 7 หลายเดือนก่อน

    Seria bacana falar sobre o fato do next nao permitir cachear arquivos que são carregados dinámicamente durante a execução em produção. Sempre retorna erro 404, e para contornar o problema, precisa criar um servidor customizado... Chatao isso

  • @felipe-muniz
    @felipe-muniz หลายเดือนก่อน

    youtu.be/gD_jNycK=1:00 Id legivel em url não é ponto positivo, muito pelo contrario, isso abre muita brecha para ataques.

  • @Herongozo54
    @Herongozo54 7 หลายเดือนก่อน

    gran video

  • @iury664
    @iury664 7 หลายเดือนก่อน

    "Eita..."' hahahahahah

  • @TiagoCaus
    @TiagoCaus 7 หลายเดือนก่อน +3

    Cara, pra que xingar?????

    • @odevrenan
      @odevrenan 7 หลายเดือนก่อน

      E qual é o problema??!

    • @melkyvinicius6201
      @melkyvinicius6201 7 หลายเดือนก่อน

      Sério cara? Então tá bom de voltar pro fundamental, pqp

    • @TiagoCaus
      @TiagoCaus 7 หลายเดือนก่อน +2

      @@odevrenan na grande maioria, minha filha de 5 anos está proximo. Não deu outra ela perguntou "Pai o que é !"#$"? Entendeu?

    • @TiagoCaus
      @TiagoCaus 7 หลายเดือนก่อน +1

      @@melkyvinicius6201 Não sei o que é prioridade para você, mas no dia que tiver uma filha e ela ouvir uma pessoa falando palavras que não é de comum, vai entender. Desejo o melhor para você.

  • @filipesilva432
    @filipesilva432 15 วันที่ผ่านมา

    Deus me livre 😂
    Vou passar a odiar os benditos IDs 😅

  • @jonnyborgesdev
    @jonnyborgesdev 7 หลายเดือนก่อน

    Nem assisti o video porque UUID ou autoincrement NUNCA devem ser utilizados em um banco de dados, abraço.

    • @Theoxysmusic
      @Theoxysmusic 7 หลายเดือนก่อน +2

      O que deve ser usado então na sua opinião ?

    • @Bruno-cg4vu
      @Bruno-cg4vu 7 หลายเดือนก่อน +1

      Ué, tem dois ERP onde eu trabalho e são grandes internamente e usa autoincremente

    • @Öyster_Boy
      @Öyster_Boy 7 หลายเดือนก่อน

      @@Bruno-cg4vu Relaxa, o JonnyBorgesdev sabe o que 'e melhor para a gente.
      A qualidade do codigo dele e alta, ou seja, esta alinhada com o tamanho do ego dele.

    • @allanfarias1988
      @allanfarias1988 7 หลายเดือนก่อน +1

      Poderia por gentileza nos mostrar a melhor solução?

    • @algeupepes1785
      @algeupepes1785 7 หลายเดือนก่อน +14

      falou "nunca" já sei que tá errado