No video

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

Quanto mais informações eu preciso armazenar e lidar dentro da minha aplicação, maior vai ser o banco de dados dela, e tudo isso impacta no preço que se paga para manter o armazenamento desses dados.
Dependendo do tamanho e estilo do seu projeto, existem algumas estratégias de ID que podem ajudar a diminuir esse número e ainda ser mais efetivas para o seu resultado, inclusive coisas como paginação.
Nesse vídeo vou trazer uma estratégia bem conhecida, desenvolvida pelo Twitter/X, mas também algumas alternativas mais acessíveis, já que dificilmente seu app vai ser do tamanho de um Twitter ou Instagram, por exemplo.
-----
Conecte-se a 500mil devs e avance para o próximo nível com a nossa plataforma: rocketseat.com.br/
Cadastre-se na nossa plataforma: app.rocketseat.com.br/signup
Junte-se a mais de 392mil devs em nossa comunidade no Discord: / discord
Acompanhe a Rocketseat nas redes sociais:
Twitter: @rocketseat
Facebook: @rocketseat
Instagram: @rocketseat

Пікірлер: 91

  • @RafaelDailySantosMartins
    @RafaelDailySantosMartins2 ай бұрын

    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

    2 ай бұрын

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

  • @nickolassilva8994
    @nickolassilva89942 ай бұрын

    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

  • @podcastcafecomrafa
    @podcastcafecomrafa2 ай бұрын

    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
    @eorafasantos2 ай бұрын

    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
    @raimundoclessyo89432 ай бұрын

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

  • @edu_sdorneles
    @edu_sdorneles2 ай бұрын

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

  • @eduardopalhares3526
    @eduardopalhares35262 ай бұрын

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

  • @daniellimae
    @daniellimae2 ай бұрын

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

  • @astropgn
    @astropgn2 ай бұрын

    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
    @MilsonPazienza25 күн бұрын

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

  • @reginaldosnunes
    @reginaldosnunes2 ай бұрын

    Muito bom, interessante e direto ao ponto.

  • @rodrigoaraujo1608
    @rodrigoaraujo16082 ай бұрын

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

  • @georgebezerra8863
    @georgebezerra88632 ай бұрын

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

  • @ronalddurand2680
    @ronalddurand26802 ай бұрын

    valeu Diego pela info top de mais

  • @Iacapuca
    @Iacapuca2 ай бұрын

    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

    2 ай бұрын

    5:29

  • @TrickUltimatefull
    @TrickUltimatefull2 ай бұрын

    Simplesmente genial! 🙌

  • @devarthurreis
    @devarthurreis2 ай бұрын

    Aula perfeita

  • @GabrielOliveira-nj9qg
    @GabrielOliveira-nj9qg2 ай бұрын

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

  • @ageurodriguesdeoliveira8953
    @ageurodriguesdeoliveira89532 ай бұрын

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

  • @CarlosEduardo-we7gb
    @CarlosEduardo-we7gb2 ай бұрын

    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

  • @rhkina
    @rhkina2 ай бұрын

    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 (kzread.info/dash/bejne/k2F_lKVso8mXj7Q.htmlsi=_NNKfuFI5o-x9jxz). Ele sugere o uso do nanoid.

  • @VictorTorresOficial

    @VictorTorresOficial

    2 ай бұрын

    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.

  • @jotauser
    @jotauser2 ай бұрын

    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.

  • @LuizGustavo-km1yb
    @LuizGustavo-km1yb2 ай бұрын

    kct, esse conteúdo foi foda

  • @rvian4
    @rvian42 ай бұрын

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

  • @gabrielaltran
    @gabrielaltran2 ай бұрын

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

  • @Matheus-qv7yw
    @Matheus-qv7yw2 ай бұрын

    baita aula

  • @devcoelho
    @devcoelho2 ай бұрын

    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?

  • @sedraccalupeteca5769
    @sedraccalupeteca57692 ай бұрын

    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.

  • @LeandroSantiagoGomes
    @LeandroSantiagoGomes2 ай бұрын

    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

  • @juniormartinxo
    @juniormartinxo2 ай бұрын

    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

    2 ай бұрын

    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

    2 ай бұрын

    @@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

    2 ай бұрын

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

  • @lucascaton

    @lucascaton

    2 ай бұрын

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

  • @e2e23e
    @e2e23eКүн бұрын

    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)

  • @Luccas_Alves
    @Luccas_Alves20 күн бұрын

    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!

  • @Herongozo54
    @Herongozo542 ай бұрын

    gran video

  • @vkRenan
    @vkRenan27 күн бұрын

    Dito isso, usarei apenas ID e UUID juntos.

  • @williamroger9375
    @williamroger93752 ай бұрын

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

  • @devgustavovasquez

    @devgustavovasquez

    2 ай бұрын

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

  • @ivambergsilva591

    @ivambergsilva591

    2 ай бұрын

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

  • @Carlos72639

    @Carlos72639

    2 ай бұрын

    Qual é o canal dele?​@@ivambergsilva591

  • @williamroger9375

    @williamroger9375

    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!

  • @vinybas
    @vinybas2 ай бұрын

    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.

  • @M0T4
    @M0T42 ай бұрын

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

  • @AlexandredeCarli
    @AlexandredeCarli2 ай бұрын

    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 (:

  • @lucasfranzolin
    @lucasfranzolin2 ай бұрын

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

  • @user-ry8nk8yi8q
    @user-ry8nk8yi8q2 ай бұрын

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

  • @CaioCaiu
    @CaioCaiu22 күн бұрын

    Qual seu Mac Diego?

  • @gabrielmedeiros9806
    @gabrielmedeiros98062 ай бұрын

    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?

  • @omarcospreviato
    @omarcospreviato2 ай бұрын

    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.

  • @engroga
    @engroga2 ай бұрын

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

  • @kenjiutaka
    @kenjiutaka2 ай бұрын

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

  • @pedroenrique6783
    @pedroenrique67832 ай бұрын

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

  • @lucasmordzin
    @lucasmordzin8 күн бұрын

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

  • @dridev01
    @dridev012 ай бұрын

    Caralho que AULA da porra

  • @isaquesb
    @isaquesb2 ай бұрын

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

  • @fernandomoraes2325
    @fernandomoraes23252 ай бұрын

    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

  • @thiagoteles8963
    @thiagoteles89632 ай бұрын

    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

    2 ай бұрын

    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

  • @yuur1440
    @yuur14402 ай бұрын

    Onde é feito essas lives?

  • @reinheimermat
    @reinheimermat2 ай бұрын

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

  • @etni_dev
    @etni_dev2 ай бұрын

    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

  • @eliseumds
    @eliseumds2 ай бұрын

    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.

  • @talismamanuel
    @talismamanuel2 ай бұрын

    muitas inserções seriam tipo quanto?

  • @Brendospdev

    @Brendospdev

    2 ай бұрын

    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...

  • @rfullstack
    @rfullstackАй бұрын

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

  • @iury664
    @iury6642 ай бұрын

    "Eita..."' hahahahahah

  • @samuelmatos8875
    @samuelmatos88752 ай бұрын

    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

  • @TiagoCaus
    @TiagoCaus2 ай бұрын

    Cara, pra que xingar?????

  • @devcoelho

    @devcoelho

    2 ай бұрын

    E qual é o problema??!

  • @melkyvinicius6201

    @melkyvinicius6201

    2 ай бұрын

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

  • @TiagoCaus

    @TiagoCaus

    2 ай бұрын

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

  • @TiagoCaus

    @TiagoCaus

    2 ай бұрын

    @@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ê.

  • @jonnyborgesdev
    @jonnyborgesdev2 ай бұрын

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

  • @Theoxysmusic

    @Theoxysmusic

    2 ай бұрын

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

  • @Bruno-cg4vu

    @Bruno-cg4vu

    2 ай бұрын

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

  • @Öyster_Boy

    @Öyster_Boy

    2 ай бұрын

    @@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

    2 ай бұрын

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

  • @algeupepes1785

    @algeupepes1785

    2 ай бұрын

    falou "nunca" já sei que tá errado