Aumentando em 999x a velocidade de processamento de dados com Node.js

แชร์
ฝัง

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

  • @MsVextor
    @MsVextor 4 หลายเดือนก่อน +17

    Vídeo muito bom, tenho só um complemento. A técnica de paralelismo realmente influencia muito na velocidade, mas temos que lembrar que, no primeiro caso, os dados precisaram passar pela camada de rede e, no segundo caso, foi entre dois bancos na mesma máquina. Só para exemplificar, uma coisa é passar um vídeo de uma pasta para outra no próprio PC, outra coisa é fazer upload desse vídeo para o TH-cam ou fazer download dele.
    Vídeo excelente e sobre um conteúdo que vejo pouco no youtube, parabéns.

    • @angolatechreviews8420
      @angolatechreviews8420 4 หลายเดือนก่อน +1

      Exactamente numa situação real o problema seria as operações IO passando pela camada de rede. Bom ponto!

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

      Excelenteeee!! Faz um teste ai pra ver quanto ficaria, só trocar as variáveis de ambiente e ver a velocidade quanto vai

    • @atilaaugusto_
      @atilaaugusto_ 4 หลายเดือนก่อน +1

      sem contar que não existe nenhum tipo de validação ou controle de fluxo. fiquei curioso de ver como seria rodar isso com graalvm

  • @carlosvinicius9767
    @carlosvinicius9767 4 หลายเดือนก่อน +22

    Rodei o projeto na minha maquina e levou 30 segundos para migrar TODOS os registros... impressionante

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

    Caraca, Skrillex estava ensinando programação todo esse tempo e eu aqui, vou me inscrever hehe

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

      CALL 911 NOW!!!!!!

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

      @@wduandy kkkkkk

  • @micheldiniz4165
    @micheldiniz4165 4 หลายเดือนก่อน +3

    Cara, parabéns pelo conteúdo, aprendi muito, poucos ocupam o tempo para ensinar algo útil e de valor hoje em dia, continue assim!

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

    Man... te achei no Tik tok... é vc não tem tantos seguidores lá... mas aqui vc é um god man!... congratulations 🖖🏼👏🏼👏🏼👏🏼👏🏼

  • @AleffSK8
    @AleffSK8 4 หลายเดือนก่อน +2

    Irado o vídeo Erick, boa explicação e ótima solução para esse problema, me deu ótimos insights

  • @luancarvalho1310
    @luancarvalho1310 2 หลายเดือนก่อน +1

    Acabei de saber que o Akita passou o bastão pra você. O pouco que já vi dos seus videos, entendo porque ele fez isso.

  • @douglaspoma
    @douglaspoma 4 หลายเดือนก่อน +14

    Poderia fazer um vídeo parecido mas processando um arquivo gigante, utilizando streams e distribuindos os chunks entre childs

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +10

      Opaaa e se eu te falar que tem isso aqui no canal? Pesquisa sobre processando 30gb que mostrei (e sem precisar de child process, fiz com webstreams então você pode combinar os dois)

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

    Cara muito top, isso é foda parabéns, Erick fala de IA com node

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

    Excelente, penso que em uma situação real, por exemplo ao imigrar de um banco de dados em Heroku para Aurora DB a maior parte do tempo será gasto em operações IO mas olha que as técnicas que passaste aqui podem ajudar muito a balancear a carga de trabalho! Excelente trabalho. 🎉

  • @nacionalgessodecoracoes7294
    @nacionalgessodecoracoes7294 12 วันที่ผ่านมา

    Erick vc e o cara do Node.

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

    Me deu uma insights muito bons Erick, valeu! Possívelmente vamos passar por umas migrações la no trabalho, papo de mais de 5b de registros, isso com certeza pode ser uma opção

    • @caramba158
      @caramba158 4 หลายเดือนก่อน +2

      Cara, 5b de registros? Com certeza não faria no JS. Usaria o Goroutines, muito mais seguro

  • @Tatan-GIR
    @Tatan-GIR 2 หลายเดือนก่อน +1

    que mejor que aprender JS y practicar mi portugues !! muy buenoo !!!
    Eres un grande !!
    Tah legal ! Obrigado !

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

    Erick acompanho seus vídeos e dicas por aqui e pelo linkedin, gostaria de iniciar a programar em Javascript, vi que não tem mais o curso para iniciantes no teu site...Está em outro nível kkkk, mas me diz aí, poderia indicar um bom curso pra quem quer iniciar no Java?

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

    Muito bom conteúdo Erick! Fiquei em dúvida do quanto a rede dominou o tempo de duração do script quando rodou em produção, acho que seria interessante fazer um comparativo das duas soluções rodando tudo na mesma máquina para isolar a melhoria e ver de uma forma mais precisa o quanto de fato foi possível melhorar. Ainda acho importante destacar alguns cuidados com um alto nível de paralelismo (levando em conta também as promises sem await), que poderia sobrecarregar o banco. Chamo a atenção pra isso porque essa prática em código de produção pode ter efeitos colaterais não imaginados, como consumir todas as conexões disponíveis do banco.

  • @flaviolourenco1311
    @flaviolourenco1311 4 หลายเดือนก่อน +2

    Erick parabéns pelo profissionalismo, fiquei curioso sobre a troca do banco de dados, seria custos, algo do tipo?

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +1

      Opaaa, na verdade só um caso de uso mesmo, poderia ser o contrário tambem

  • @astaron-eremita
    @astaron-eremita 4 หลายเดือนก่อน

    Sempre usei Spring boot reativo(assíncrono), na empresa que trabalho é 2 milhões de dados por dia... é bem performático para ser sincero tanto a escrita tanto a leitura, o segredo de tudo isso está no assíncrono.

  • @sathishramesh3765
    @sathishramesh3765 4 หลายเดือนก่อน +3

    please make it in english also, i know it have sub titles, but try to consider this req..because i know this is such valuable content about node

  • @TheDaissuke
    @TheDaissuke 4 หลายเดือนก่อน +1

    fala mano, blz? a alguns anos atrás eu fiz algo similar mas em python e alterei os arquivos para documentod no mongodb e para paralelizar eu usei workers consumindo msgs do rabbitmq. no meu caso estava criando um report de rightsizing de vms azure que em algumas situações demoravam mais do que 24 horas, e caiu para menos de 15 mins.

  • @CarlosEduardo-nt8pm
    @CarlosEduardo-nt8pm 4 หลายเดือนก่อน +6

    Poderia ter mostrado o uso de memoria / processamento durante a execução dos processos no NodeJS 👀

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +3

      Até pensei nisso, mas o vídeo ia ficar grande demais hahahah meu objetivo eh mostrar e as pessoas experimentarem e medirem

  • @felipesilva697
    @felipesilva697 4 หลายเดือนก่อน +1

    Erick como seria a melhor maneira possível para lidar com: Tenho uma quantidade limitada de produtos exemplo 10 mas existem 20 pessoas querendo comprar/adquirir, como lidar se essas 20 requisições acontecerem ao mesmo tempo sem gera erro e não acaba ficando com um número negativo. Estou com um problema semelhante ao tentar criar um sistema de reserva de quartos. Vi algumas opções mas gostaria de saber como você faria pra resolver.

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

      Ja pensou em utilizar socket? Acredito que com ele voce ira conseguir suprir essa necessidade, pois assim ira ter consistencia nas informacoes.
      Pensa como um banco, voce precisa mostrar os dados reais do usuario, ele nao pode ter um saldo de 1 mil sendo que tem 1 real, entao e necessario focar na consistencia, fez qualquer coisa, ja processa essa informacao, caso contrario, aponte um erro.
      Acredito que assim vai dar certo hehe

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

    Legal! Só uma dúvida, o número de processos que vc spawna não é na prática meio limitado pelo número de cores da CPU?

  • @GAsempre
    @GAsempre 2 วันที่ผ่านมา

    Brabo 👽

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

    Fala Erick! Tudo certo? Fala sobre a normalização de dados com nodejs em grande escala acima de 100mb de dados

  • @diegogoulart159
    @diegogoulart159 4 หลายเดือนก่อน +1

    Eu usei essa técnica para fazer o inverso, escrever os dados em uma planilha do google. Foi bem rápido também.

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +1

      Que demais!!! Incrivel a velocidade da parada

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

      @@ErickWendelTraining É bem rápido mesmo, usei pra resolver um problema em um desafio técnico de uma vaga. E é claro que eu passei :D

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

    Você é demais, me tira uma dúvida... é possível hoje em dia trabalhar com node sem typescript sendo que na maioria das vagas pedem typescript?

  • @GuilhermeLima-md3ci
    @GuilhermeLima-md3ci 4 หลายเดือนก่อน

    Qual é a melhor biblioteca para paralelizar processamento hoje no nodejs? Achei muito legal entender como funciona por baixo dos panos. mas gostaria de ver uma boa biblioteca e até mesmo dar uma estudada no código dela. Já fiz algo bem parecido com o que você mostrou no video usando threads em c.

  • @nvieirarossett
    @nvieirarossett 4 หลายเดือนก่อน +1

    Erick, achei muito legal, to fazendo algo grande também que processo muitas informações por aqui, meu bd de mongo ta com 100gb e crescendo, PORÉM... diferente do seu o meu precisa ser de forma sequencial, pois seria um sistema de backtest de mercado financeiro, eu preciso esperar concluir um processo para ir para o próximo, não tem como, preciso usar await em uma função recursiva que executa um cursor no mongoDB pois normalmente são mais de 2 milhões de linhas em um loop, mas vc acha que childProcess pode fazer diferença em dados que precisam ser sequenciais? Ou se tem alguma forma de otimizar o processo em uma situação como essa? Uma coisa que vou fazer ainda é ao menos nesse sistema de backtest tirar o mongoose da jogada, pois vi que ele deixa mais lento o processamento, quanto mais der pra otimizar melhor.

    • @jorgehabib3933
      @jorgehabib3933 4 หลายเดือนก่อน +1

      Já trabalhei com algo similar, minhas sugestões:
      1. Não se comunique com o banco de dados no meio do loop. Pegue todos os dados antes do loop e escreva todos os dados depois do loop. Tudo fica salvo em memória nesse meio tempo.
      2. Worker Threads ou child_processes só vai te ajudar a processar vários símbolos de uma vez. Como o resultado de um dia depende do dia anterior, tem que ser sequencial mesmo.
      3. Cuidado com manipulações de datas no meio do loop (timezone e etc). Nesses casos extremos a lib dayjs me deu muitos problemas de performance.
      4. Aprenda a utilizar o profiler do debugger do Chrome. Lá com os flamegraphs você consegue encontrar exatamente a função que está tomando mais tempo no seu programa, e otimizar ela.

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

    Um dúvida que tenho é: o node tem os módulos "child-process" e " cluster". Qual a diferença entre eles?

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

    Como fica a situação do banco em questão de cpu, sessões ativas e tals

  • @leonardorangel8558
    @leonardorangel8558 4 หลายเดือนก่อน +1

    Boa tarde! Fiz o teste no wsl do windows ele usou 8gb de memoria de 16gb e tenho um i5 9600k. o script rodou em 102 segundos, muito rápido kkk o processamento da cpu ficou em 100%

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +1

      Olocooooooooooo que demais! Daria p aumentar a quantidade do cluster pra ver como ficaria

  • @Marcos.Silva7
    @Marcos.Silva7 3 หลายเดือนก่อน

    pessoal qual é a melhor linguagem para um júnior fazer o backend do html, css e js de um site? quero conseguir uma vaga no mercado, mas não consigo me decidir pra onde ir

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

    Por que usar processos filhos invés de usar threads?

  • @gamecraftbrasil3813
    @gamecraftbrasil3813 4 หลายเดือนก่อน +2

    Não daria para ter um desempenho similar usando o worker_threads?

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

      Estou com a mesma dúvida

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

    Legal, isso me lembrou uma dúvida de um projeto que estou fazendo, tipo tenho um endpoint de uma api que gera presignedUrls para o s3, as vezes preciso gerar 3000 urls, pra essa quantidade é necessário fazer filas tipo com o bullmq ou não? Tenho a dúvida pq não sei se para essa quantidade vale a pena pra economizar recursos do servidor.

  • @misterl8129
    @misterl8129 18 วันที่ผ่านมา

    Thank you!
    I have a Q; What is the difference using working threads vs "childs"? Or is the same :O

  • @LeonardoAraujo-bc3qn
    @LeonardoAraujo-bc3qn 4 หลายเดือนก่อน +1

    Fala Erick, belezinha? Nesse fluxo, a utilização do método "cursor" na query do MongoDB não seria mais performático? Ou teria algum problema?

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +1

      Seria sim!! Ao invés de usar um .toArray! Tenta modificar ai e fazer pra vermos o quanto melhora 🤘🏻🤘🏻

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

    Erick, oque vc faria para não carregar um grande volume de dados vindos do Mongo ou de qualquer outra fontes em um array?
    Bem nesta linha aqui: index.js linha 17
    const items = await data.toArray()
    Pensei no Node Stream, mas existe outra solução?

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

    Em relação aos testes unitários, você acha que os testes que usam DOM seriam testes de funcionalidade, não testes unitários?

  • @matheusspinosa9201
    @matheusspinosa9201 4 หลายเดือนก่อน +1

    Não seria mais performático inserir múltiplos items de uma vez? Ao invés de inserir basicamente 1 por 1? Tive um problema de dados do tipo e tive que fazer as coisas em lote porque eu fritava a maquina do mongo fazendo um por 1 kkkkk

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

    fala erick tudo bem ? atualmente uso webpack em uma extensao web, minha ideia e fazer scripts automatizados em javascript(node) mas o webpack nao aceita utilizar node, gostaria de uma ideia para fazer scripts node e outro para webpack (extensao web), se puder dar umas dicas vlww !

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

    Não sei se é uma particularidade do NodeJS, embora eu goste muito do NodeJS. Já fiz muita migração de dados com Python, Go e até PHP e, localmente, sempre são resultados muito bons. Até porque localmente não tem uma virtualização de CPU, a maioria hoje tem GHz mais que suficientes, também tem no mínimo 8GB de memória RAM disponível e não depende da latência. Em outras palavras, independente da linguagem ou da qualidade do algoritmo, sempre vai ser mais rápido local.
    Por isso, geralmente faço um dump do banco de dados, importo localmente. Depois migro, faço um dump do novo banco de dados e importo no cloud.

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

      Mas ai você tá falando de projeto pequeno. Trabalhei em lugar que era gerado log de 5TB por dia. Como faz dump disso haha?

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

      @@BrasilEmFatos se é log porque você faria migração de dados?

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

    "o cara é foda patroa..." 👏👏👏

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

    Muito obrigado irmão

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

    Insano! 🚀

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

    Qual seria a diferença entre implementar usando child_process e worker threads? Nenhuma, certo?

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

    Como posso saber o número ideal de cluesterSize para minha maquina suportar?

  • @rafael_tg
    @rafael_tg 4 หลายเดือนก่อน +2

    top o video. Quanto tempo será que roda se fizer em Rust ?

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +1

      Acredito que o fator aqui eh que estamos inserindo e recebendo dados de bancos externos, entao os dois podem chegar no mesmo limite que eh o limite de leitura e inserção dos bancos, mas acredito que vale o experimento

  • @ChristianPrado-nl5vj
    @ChristianPrado-nl5vj 4 หลายเดือนก่อน

    Erick, acha que usando o worker_threads do nodejs seria mais leve, por não ter que criar um processo completo? Ou não teria tanta diferença?

    • @and7231
      @and7231 4 หลายเดือนก่อน +1

      É recomendável usar worker threads para uso intensivo de CPU como renderização de imagens ou até mesmo algoritmo de ordenação, para processamento assíncrono I/O utliza-se geralmente child process, mas sua inicialização seria mais rápida sim.

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

    muito daora! vou testar o meu caso de uso numa máquina na aws mas será que a gnt conseguiria fazer ter um resultado parecido numa máquina com 2 cores e 1024 Mb de ram???

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

      Na verdade isso aí é bastante recurso, da tranquilamente.

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

    th-cam.com/video/EnK8-x8L9TY/w-d-xo.html No caso o for await se faz necessário por o generator retornar um iterator de promises (que da no mesmo que iterar sobre um array de promises). O for await garante que a cada iteração a promise seja resolvida antes de ser atribuída à variável "data".

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

    no meu corei3 de 7th, 12gb de ram demorou 10,5 minutos

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

    Erick, uma duvida, como tu faria para ter o número de clusters dinamicamente? ou seja, em vez de ser 99 na mão, ser 'N' dinâmico, conforme o poder de processamento disponivel

    • @and7231
      @and7231 4 หลายเดือนก่อน +2

      import os from 'os'
      const cpusNumber = os.cpus().length - 1

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

    queria que o erp da minha empresa fosse assim, quando vai reparar o banco = 1 hora KKKKKKKK, imagina se fosse pra 2 minutos.

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

    pq você não utiliza typescript?

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

    Tenho que ser sênior pra aprender isso?

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

    Top! Mais 1 vez que aumentasse e chegava na metade do dotnet.

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +2

      Hahaha lança o desafio que provo que dá pra fazer mais rápido que dotnet 😜

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

      @ErickWendelTraining Peraí... Fiquei pensando, como seria a disputa se cada layer da arquitetura tivesse sua própria instância Docker - tipo, Postgres, Django, e entre nodejs/dotnet? Quem termina mais rápido na camada {{framework}}? Seria uma boa disputa, hein!
      Falando nisso, tô com uma dúvida sobre a experimentação. Pelo que saquei, você tá usando isso pra simular carga pesada em chamadas de endpoint, né? Ainda tô meio na dúvida. No mundo real, eu talvez fosse de Python ou, quem sabe, ADF na Azure, dependendo de como essa liberação rolar em produção.
      Agora, pensando no desafio entre nodejs e dotnet, acho que deveria ser algo tipo: medir quanto tempo cada framework leva pra pegar uma requisição HTTP, processar, salvar alguma coisa no banco e devolver uma resposta. Aí sim, daria pra montar um cenário com clean architecture pra ver como eles se saem no dia a dia, longe dos monolitos simples. Podíamos até armar um setup com k6, Grafana e InfluxDB para os testes de carga. Que tal?

  • @xsamuelx3603
    @xsamuelx3603 4 หลายเดือนก่อน +1

    Uma técnica de paralelepípedo :D

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

    Queria ver a diferença entre o Worker Threads vs Child Process na prática.

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

    erick lenda

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

    Meu prefeito

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

    o brabo

  • @eliseumds
    @eliseumds 4 หลายเดือนก่อน +1

    Macbook M3 Max 48GB, 48 segundos.

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

    conteudo TRUE

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

    aqui levou 65 segundos.

  • @gabrielandre5747
    @gabrielandre5747 4 หลายเดือนก่อน +1

    Se 1 milhão de linhas em 3 minutos é rápido eu sou um abacate

  • @drksbr
    @drksbr 4 หลายเดือนก่อน +2

    Oculus sujo da poxa. Como que tu tá vendo através disso, Man ? Kkkkk

    • @sdmastergames4905
      @sdmastergames4905 4 หลายเดือนก่อน +2

      bah fiscal de oculos, diferente

    • @nandomax3
      @nandomax3 4 หลายเดือนก่อน +1

      Ele não ve direito, ele usa óculos

    • @luisguilherme7889
      @luisguilherme7889 4 หลายเดือนก่อน +1

      Eu com óculos podre vendo esse comentário: 🤡

    • @ErickWendelTraining
      @ErickWendelTraining  4 หลายเดือนก่อน +1

      HAHAHAHAHHA pior que só incomodou depois que gravei 😂😂😂

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

    2 segundos aqui

  • @rafael.aloizio1769
    @rafael.aloizio1769 4 หลายเดือนก่อน +1

    eu sei que é moh idiota falar isso, mas eu tenho toc, nao consegui. tem um typo no nome da tua funcao de balanceamento de carga deveria ser roundRobin nao Roubin haha