✅ Tem dúvidas sobre arquitetura de camadas? Tratamento de erros? Quais as bases para colocar um projeto no ar de forma automática com Integração Contínua? Conheça meu curso do canal o Construindo CRUDs com qualidade hotm.art/mWYNKk3
Primeiro, uma observação: quando Tocantins foi criado, não surgiram novos municípios. Eles já existiam, só que eram goianos. Ao desmembrar o estado de Goiás em 2, esses municípios passaram a ser tocantinenses. Eu não sei se mudaram os CEPs, acho que não, porque eles estão muito próximos dos de Goiás. Considerando que é uma continuação de Goiás, acho que continuam sendo os mesmos. Referente a consulta, acho que uma saída interessante pode ser ir armazenando os CEPs pesquisados em uma lista local. Então, em uma requisição, pesquisa primeiro localmente. Se o CEP já foi pesquisado antes, ele estará na lista. Caso não seja encontrado, vai pra fonte externa. Eu implementaria um arquivo json que iria sendo editado em tempo real com os novos dados acrescentados.
Muito bom o vídeo, acho que vale enfatizar com quem tá iniciando é que a grande sacada para solucionar esse problema é a estrutura de dados correta: o mapa ou chave-valor Um redis ou memcached também cairia bem
Cara, esse conteúdo vale OURO! Adorei a abordagem em cima do problema e da solução e não em cima do código. Bom demais!!! Você conseguiu trazer pro vídeo a realidade do dia a dia de quem programa de verdade! Foda!!! Parabéns!!! E obrigado.
Belo video! Uma outra alternativa para evitar a consulta no brasilapi em tempo de requisição seria um script para atualizar o s3 1 vez ao mês. No cenário de novos municípios, não tem problema 1 mês de atraso da nova informação, afinal não é todo mês que surge novos municipios kkk Melhor ainda seria se o brasilapi retornasse o count de municipios consolidado, dessa forma nem precisaria bater na api se o count não atualizar.
Salve Mário!!! Um cenário bem trivial mas nos leva a soluções interessanntissimas! Este seria um caso bem interessante em usar soluções como o Redis. Não só isso, mas da uma idéia bem simples e pratica onde podemos adotar técnicas para cacheamento.
Muito top essa aula e essa forma de um mapa mental da funcionalidade para auto completar. Com certeza gostaria de ver a implementação de como gravar esses arquivos no Azure. Parabéns pelo conteúdo.. toooop demais..
Parabéns pelo conteúdo, principalmente sua explicação detalhada de cenários e gostaria muito que fizesse um vídeo sobre a implementação do S3 funcionando neste cenário.
Muito interessante! Ficou bem explicado o conteúdo, acho que você deveria trazer mais vezes o desenvolvimento da ideia no whiteboard por quê ficou algo bem facil de assimilar.
Fala Coutinho, muito foda esse vídeo parabéns🎉🎉🎉 um ponto que posso acrescentar é que nao é tao incomum "surgirem" novos municípios, pelo motivo dinheiros... o Brasil tem muitos distritos de cidades que quando se transformando em cidade começam a receber verba federal como tudo depende do número de habitantes vale a pena ficar ligado nisso no plano B pra estar semipresencial atualizado
@DevSoutinho tem uma opção no S3 de colocar um TTL no arquivo, assim vc bateria no seu cachê, se o arquivo existir, consome ele, se não, busca da API e salva ele no S3.
Grande vídeo. Em um projeto do ano passado me deparei com esse problema. Acabei fazendo o seguinte: Um Json com os estados bem parecido com o que o CHATGPT gerou pra ti. No dropdown com os estados, quando o user escolhia o estado eu chamava uma função pra popular o dropdown das cidades com os dados da base da api do IBGE. Hoje vejo que não é o mais correto e tem alguns erros que poderiam acontecer que nunca seriam explicados ao user mas na época pareceu uma boa idéia. Apesar disso o sistema não tem imensas requisições pois é um sistema interno. Mas na época considerei salvar os municipios manualmente tb. Agora com o seu vídeo fiquei bastante curioso sobre essa possibilidade de utilizar a AWS e já estou na fila para esse novo vídeo.
Muito massa esse conteúdo, com certeza vai expandir o pensamento lógico da galera no design de sistemas além de difundir o uso da Brasil API pra quem ainda não conhece. Acho que talvez seja legal manter os processos de white board e deixar a prática como exercício pro pessoal, até porque é muito mais fácil aprender como fazer um “CRUD” no S3 do que ter esse pensamento de design de sistemas.
Achei bacana a forma de pensar. Claro que existe 1 milhão de formas de fazer, mas particularmente pra esse caso específico achei muito overengineering as alternativas 1 e 2. Há uns meses atrás precisei fazer um autocomplete e utilizei apenas 1 campo no formato "nome do município (Sigla do Estado)". Coloquei todos os municípios num enum no frontend (tamanho do arquivo ficou em aprox. 330kb) e exibia apenas os 15 primeiros registros a medida que o usuário digitava. Achei a performance mais barata do que uma chamada de API (ou no caso 2 chamadas como a solução 1 e 2). Agora uma busca por CEP é bem mais complexa e essas soluções 1 e 2 seriam muito bem aplicadas.
Mas pensa que tu precisa ter a persistência disso em algum nível. Se tu desligar e ligar o sistema algum nível de guardado fixo do cachê tu tem que ter saca?
A solução 02 é a melhor, porém n acho q usar o S3 seria uma boa, como vc mesmo disse, S3 é um repositório de arquivos, e ler arquivos é demorado, acho q em vez o S3 a melhor abordagem seria usar um redis ou talvez um memcached, e caso os recursos sejam mínimos da pra fazer cache até mesmo em uma base de dados MySQL. mas o ideal mesmo seria no Redis.
O S3 hoje é super rápido e tem os tiers (do mais rápido até o super lento), e depois da primeira leitura vc consegue deixar na RAM. Nesse cenário ficaria melhor que o redis, e vc consegue ter o controle de tempo que eu falei dos 30 dias (partindo do ponto que tudo ficaria stateless)
acredito que seria melhor salvar em cache e usar um job pra fazer a requisição novamente, caso o BrasilAPI esteja fora continua utilizando o cache que está em memória, o erlang/elixir permite fazer isso tranquilamente com GenServer, podendo também salvar em banco ou em arquivo, ou seja, faz uma requisição, salva em memoria e em banco, faz um job pra cada 30 dias, se retornar renova a memoria em cache e em banco e utiliza, como todos os processos são totalmente isolados não teria nada sobrescrevendo em cima de uma memoria cacheada, bem melhor que usar o S3.
Eu faria com um banquinho relacional, mas deve ser pq essas águas do S3 são meio desconhecidas para mim. Apoio a ideia de fazer uma explicação bem completa de como tudo funciona.
Estou fazendo algo parecido em um projeto pessoal. Busco os dados sobre a FIPE do brasil. E pra não ficar batendo sempre da api deles. Eu salvo em um mongodb.
Perfeito! Eu acabei optando por não salvar no banco, pq a disponibilidade do S3 HOJE acaba sendo até mais alta daí feito uma vez só deixar na memória carregado e é uma necessidade a menos de conexão :P
Em vez de usar a S3, não dá pra utilizar a última forma de salvar junto do projeto (se considerar uma instância ec2 já até aproveita o armazenamento dela) mas adicionando um controle de cache? Daí em vez de salvar um array com os resultados, vai salvar automaticamente um json com um objeto com updated_at e um items contendo os resultados
Se eu entendi o brasilApi deveria ter um metadata sobre a data da ultima insercao de um novo municipio, ai vc soh faz o dowload do material e faz um request nos "updates do brasilAPI", pode fazer um job pra manter sua base sync com o brasil api rodando uma vez por hora soh pra saber se teve um update. Afinal se entrou um novo minucipio e vc soh vai atualizar o cache em 30 dias, sao 30 dias sem vendas
Assim, a gente tá sempre passivo disso acontecer. Mas normalmente algum usuário abre chamado, a gente perde conversão, vê um número constante caindo em X etapa… Concordo contigo! O espírito do vídeo é justamente esse pensar em como implementar e tu tá com um BOM PR pra mandar pra eles em 😍
eu faria um cloud function (lambda) agendado pra rodar toda semana pra carregar todos os dados de todos os estados e salvar num jsão num object storage (s3). se der errado, ele só fica defasado, mas continua funcionando. o json vai ter seus 350KB se as chaves forem pequenas, o que não é nada pras conexões de hoje. vira uma requisição só e pra um CDN que não cai nem ferrando e a latência fica zero pro usuário depois do primeiro load. lidar com cache é um porre, e o backend não cai se ele não existir. :)
explicando o que eu falei sobre o cachê: por mais que esse cache seja sussa, tem que prever condições de “stampede” onde mais de uma requisição dispara a renovação do cache ao mesmo tempo. aí tem que implementar alguma coisa tipo expiração prematura probabilística. me pergunta como eu descobri isso aí. :P
Em uma Ec2 na aws com banco ClickHouse lendo de um arquivo .parquet baixado do s3 e tendo uma api na ponta lendo desse banco de dados e respondendo às requisições, e um serviço extra, que cria esse arquivo novo todo mes seria uma solução boa? Pois ClickHouse lendo direto de um arquivo .Parquet é mil vezes melhro que ler direto de um arquivo json, pois esse banco de dados faz leitura tabular dos dados .
Uma duvida, e se eu armazenasse o cache em um Redis se comunicando diretamente front-redis. Teria algum problema? Pois assim não precisaria de um backend, ainda estaria cacheado e reduziria muito o processamento.
Olha, EU não faria isso. Pq o meu ponto maior aqui é que se daqui X tempo o BrasilAPI ficar fora do ar, eu quero garantir que eu tenho esse dado pra continuar operando até trocar por uma nova fonte. Isso partindo do ponto que minha infra seria stateless, eu posso desligar e ligar quando eu quiser que tudo volta. O redis nesse caso, até onde eu mexi, seria pra algo mais “temporário” a um nível curto de tempo e não longo prazo. N da pra confiar em ter um cache de 2/3 meses sem de fato persistir em algum lugar, igual eu sugiro persistir o arquivo. Faz sentido?
Eu fiz algo parecido, mas com arquivo local, baixei o arquivo do banco do IBGE e implementei uma arvore binaria de busca com os estados/municípios já ordenados, sem a arvore ficou muuuuuuuuuuuito lento.
Ter um backend independente rodando um job na brasil API tipo toda semana, novamente, independente do website e gerando esses arquivos na S3, e seu front buscar direto da s3 tb seria um caminho? ou seria mto overkill? dessa forma estariamos tentando garantir que até mesmo na 'primeira' interaction o front não dependa do brasil api naquele momento
Acho que não seria overkill. Mas tu pode aproveitar o próprio request do usuário pra resolver o problema, forma que eu trago no vídeo. Ai você economiza ter algo ligado sempre e só define a cache policy
Caso por algum motivo você não deseje depender da disponibilidade de um serviço externo como S3, salvar em memória da aplicação seria uma escolha ruim? Fazendo um update semanal ou requisitando pra brasilApi quando o sistema reiniciar por algum motivo
O meu interesse é mais a questão de como realizar esse multiplo dropdown, pois isso ae quando precisei realizar em flutter não consegui achar nenhum conteúdo bom sobre, acabei aprendendo com um professor da Academia do Flutter, mas antes disso eu nem era aluno, então a dificuldade era maior.
Cara, 100k requests de 5000 municípios que atualizam uma vez por século eu sirvo do meu relógio, overengineering sem tamanho discutindo custo. E dois drop-down nao são um auto complete, este sim um problema legal de resolver
Fala Lucas! Tudo bom? Como eu trouxe no vídeo, a própria API sugere que não façamos o full scan e talz. Tentei propor uma forma de consulta sob demanda e que nos traga independência caso eles venham a cair. A lógica em si pode ser aproveitada em vários outros cenários. Seja manual ou automático tu vai ter que baixar. Mas é isso, no final não tem jeito certo 🤝
E como o volume em si é pequeno, fazer o autocomplete no browser com um throttle/denounce fica sussa, pq tu baixou os dados na hora que seleciona o estado /o
Uma duvida(sou iniciante), a ideia de criar um backend e criar um S3 para guardar os dados do BrasilAPI não atrapalha na performance? Já que quando o frontend fizer a requisição pro nosso backend, o nosso backend vai ter que consultar o dado na S3 pra retornar? Talvez eu tenha entendido errado?
A solução é simples. Salva os estados e municípios num banco de dados relacional. Em seguida, cria uma view materializada ou usa um redis da vida para cache. Pronto, é só criar seus endpoints chamando essa estrutura.
Na minha humilde opinião, usar sistema para dependendo de serviços externos é perigoso e se deve ao máximo desacoplar isso. Mesmo fugindo de chamadas constantes ao BrasilApi, ainda teria um serviço de backend externo que meso sendo mais robusto, também pode ficar indisponível com muitas chamadas. Eu ainda iria de uma chamada a api para pegar os dados uma vez no mês por exemplo só para atualizar os dados que eu inseri localmente, já que não mudam tão frequentemente.
Boa Esperança do Norte (MT) é a primeira cidade a estrear nas urnas desde 2012, mas realidade ainda destoa de surto de emancipação dos primeiros anos de redemocratização no Brasil Cidade foi criada esse ano 😮
Nesses casos que o dado não muda tanto, eu curto a ideia de salvar em armazenamento local, como é o caso de um SQLite da vida ou algo similar. Quanto a atualização, pode usar flags que impedem de buscar online e pegar offline inicialmente, então aplica uma regra para alternar o valor da flag, seja usando datas ou algum tipo de websocket/feature flag que permite uma aplicação externa de indicar quando é necessário fazer a atualização.
Muito legal! Um pouco de over engineer... Mas bem didático. Acho que minha solução seria SQLite em memoria + arquivos sem S3. Novos municípios são muito raros de acontecer. Quando acontecem, são geralmente inexpressiveis em receita. Quando for necessário, só fazer uma mudança no arquivo que está no repositório git :)
✅ Tem dúvidas sobre arquitetura de camadas? Tratamento de erros? Quais as bases para colocar um projeto no ar de forma automática com Integração Contínua? Conheça meu curso do canal o Construindo CRUDs com qualidade hotm.art/mWYNKk3
e só pesquisar json municípios e estado aparece no GITHUB só colocar no o javascript implementar no option do select do html e muito facil
2:12 showwwwww meu queridão!!!! muito massa ver o BrasilAPI aparecendo no seu canal 💪
DEEEESCHAMPS 🫂 valeu você pela iniciativa!!!
Teló... cadê vc?
Esse conteúdo com foco na resolução do problema é perfeito.
Tutorial passo a passo é "pescaria".
Conteúdo provocativo é inspiração.
Vlw Soltinho 👊
Valeu pelo feedback meu querido!!! 😍 segunda ou terça vem a próxima parte 🔥
Tenho interesse sim! Vai ser top ver essa implementação
Da uma olhada na aba comunidade 🥷🔥
Primeiro, uma observação: quando Tocantins foi criado, não surgiram novos municípios. Eles já existiam, só que eram goianos. Ao desmembrar o estado de Goiás em 2, esses municípios passaram a ser tocantinenses. Eu não sei se mudaram os CEPs, acho que não, porque eles estão muito próximos dos de Goiás. Considerando que é uma continuação de Goiás, acho que continuam sendo os mesmos. Referente a consulta, acho que uma saída interessante pode ser ir armazenando os CEPs pesquisados em uma lista local. Então, em uma requisição, pesquisa primeiro localmente. Se o CEP já foi pesquisado antes, ele estará na lista. Caso não seja encontrado, vai pra fonte externa. Eu implementaria um arquivo json que iria sendo editado em tempo real com os novos dados acrescentados.
Muito bom, parabens pelo vídeo e ganhou um novo inscrito.
Muuuuuuito obrigado meu querido!
Muito bom o vídeo, acho que vale enfatizar com quem tá iniciando é que a grande sacada para solucionar esse problema é a estrutura de dados correta: o mapa ou chave-valor
Um redis ou memcached também cairia bem
Perfeito!!! No vídeo sequência que saiu essa semana em cima desse, eu trago esse exemplo logo de cara 🤝
Cara, esse conteúdo vale OURO! Adorei a abordagem em cima do problema e da solução e não em cima do código. Bom demais!!! Você conseguiu trazer pro vídeo a realidade do dia a dia de quem programa de verdade! Foda!!! Parabéns!!! E obrigado.
Vaaaaleu pelo feedback meu querido! 😍 a meta é fazer com que independente da linguagem a pessoa aproveite o conteúdo /o
Gostei do vídeo ! lança o Ep 2
Ta na edição já!
Parabéns pelo vídeo, muito bom!
Vaaaaleu 😍
Belo video!
Uma outra alternativa para evitar a consulta no brasilapi em tempo de requisição seria um script para atualizar o s3 1 vez ao mês.
No cenário de novos municípios, não tem problema 1 mês de atraso da nova informação, afinal não é todo mês que surge novos municipios kkk
Melhor ainda seria se o brasilapi retornasse o count de municipios consolidado, dessa forma nem precisaria bater na api se o count não atualizar.
Peerfeito! \o\
Inclusive, saiu o vídeo novo com várias dicas pra resolver isso pra valer!
Salve Mário!!! Um cenário bem trivial mas nos leva a soluções interessanntissimas! Este seria um caso bem interessante em usar soluções como o Redis. Não só isso, mas da uma idéia bem simples e pratica onde podemos adotar técnicas para cacheamento.
Muito top essa aula e essa forma de um mapa mental da funcionalidade para auto completar. Com certeza gostaria de ver a implementação de como gravar esses arquivos no Azure. Parabéns pelo conteúdo.. toooop demais..
Valeu pelo feedback! Tem 2 vídeos nessa pegada já, o anterior eu explico como o React sobe um local host 3000 no comando npm run dev /o
Parabéns pelo conteúdo, principalmente sua explicação detalhada de cenários e gostaria muito que fizesse um vídeo sobre a implementação do S3 funcionando neste cenário.
Traz mais vídeos de whiteboard, achei da hora
Tem um da semana retrasada sobre como o react sobe o localhost:3000 na sua maquina
Muito interessante! Ficou bem explicado o conteúdo, acho que você deveria trazer mais vezes o desenvolvimento da ideia no whiteboard por quê ficou algo bem facil de assimilar.
Já tem um video da semana passada, mas já tô gravando o próximo hehe
tenho interesse em aprender sim
Boa Noite Souto, adorei o conteúdo!! Adoraria ver como seria implementar algo assim!
Fala Coutinho, muito foda esse vídeo parabéns🎉🎉🎉 um ponto que posso acrescentar é que nao é tao incomum "surgirem" novos municípios, pelo motivo dinheiros... o Brasil tem muitos distritos de cidades que quando se transformando em cidade começam a receber verba federal como tudo depende do número de habitantes vale a pena ficar ligado nisso no plano B pra estar semipresencial atualizado
Perfeito! Valeu pelo feeeback 😍😍😍 isso aí é bom de encaixar um fluxo num endpoint de admin da vida
@DevSoutinho tem uma opção no S3 de colocar um TTL no arquivo, assim vc bateria no seu cachê, se o arquivo existir, consome ele, se não, busca da API e salva ele no S3.
GENIAL! Não sabia dessa
Obrigado pelo conteudo!
Obrigado você pelo comentário aqui meu querido 😍
Ótimo vídeo! Parabéns! Ps: curti a camisa da Caelum :D
Bons tempos que eu dava aula lá haha
Conteúdo bom demais! Sou de fã meu parceiro
Grande vídeo.
Em um projeto do ano passado me deparei com esse problema. Acabei fazendo o seguinte: Um Json com os estados bem parecido com o que o CHATGPT gerou pra ti.
No dropdown com os estados, quando o user escolhia o estado eu chamava uma função pra popular o dropdown das cidades com os dados da base da api do IBGE.
Hoje vejo que não é o mais correto e tem alguns erros que poderiam acontecer que nunca seriam explicados ao user mas na época pareceu uma boa idéia.
Apesar disso o sistema não tem imensas requisições pois é um sistema interno. Mas na época considerei salvar os municipios manualmente tb.
Agora com o seu vídeo fiquei bastante curioso sobre essa possibilidade de utilizar a AWS e já estou na fila para esse novo vídeo.
Booooaaa!!! Valeu pelo relato, ele tá no forno aqui 🥘
Interessante essa questão do S3 junto com validação em x dias...
Muito massa esse conteúdo, com certeza vai expandir o pensamento lógico da galera no design de sistemas além de difundir o uso da Brasil API pra quem ainda não conhece.
Acho que talvez seja legal manter os processos de white board e deixar a prática como exercício pro pessoal, até porque é muito mais fácil aprender como fazer um “CRUD” no S3 do que ter esse pensamento de design de sistemas.
Achei bacana a forma de pensar. Claro que existe 1 milhão de formas de fazer, mas particularmente pra esse caso específico achei muito overengineering as alternativas 1 e 2. Há uns meses atrás precisei fazer um autocomplete e utilizei apenas 1 campo no formato "nome do município (Sigla do Estado)". Coloquei todos os municípios num enum no frontend (tamanho do arquivo ficou em aprox. 330kb) e exibia apenas os 15 primeiros registros a medida que o usuário digitava. Achei a performance mais barata do que uma chamada de API (ou no caso 2 chamadas como a solução 1 e 2).
Agora uma busca por CEP é bem mais complexa e essas soluções 1 e 2 seriam muito bem aplicadas.
Se o back for node pode usar também o MEMORY-CACHE. Tem soluções parecidas de cache de variável para outras linguagens.
Tenho interesse em aprender 😊
Tão bom quanto degustar o elixir hahah
HAHAHAHAHHA provido pela janela
Eu não iria no S3 pra essa solução específica, meteria um memory cache no backend mesmo, ou um Redis
Mas pensa que tu precisa ter a persistência disso em algum nível. Se tu desligar e ligar o sistema algum nível de guardado fixo do cachê tu tem que ter saca?
A solução 02 é a melhor, porém n acho q usar o S3 seria uma boa, como vc mesmo disse, S3 é um repositório de arquivos, e ler arquivos é demorado, acho q em vez o S3 a melhor abordagem seria usar um redis ou talvez um memcached, e caso os recursos sejam mínimos da pra fazer cache até mesmo em uma base de dados MySQL. mas o ideal mesmo seria no Redis.
O S3 hoje é super rápido e tem os tiers (do mais rápido até o super lento), e depois da primeira leitura vc consegue deixar na RAM. Nesse cenário ficaria melhor que o redis, e vc consegue ter o controle de tempo que eu falei dos 30 dias (partindo do ponto que tudo ficaria stateless)
acredito que seria melhor salvar em cache e usar um job pra fazer a requisição novamente, caso o BrasilAPI esteja fora continua utilizando o cache que está em memória, o erlang/elixir permite fazer isso tranquilamente com GenServer, podendo também salvar em banco ou em arquivo, ou seja, faz uma requisição, salva em memoria e em banco, faz um job pra cada 30 dias, se retornar renova a memoria em cache e em banco e utiliza, como todos os processos são totalmente isolados não teria nada sobrescrevendo em cima de uma memoria cacheada, bem melhor que usar o S3.
Eu faria com um banquinho relacional, mas deve ser pq essas águas do S3 são meio desconhecidas para mim. Apoio a ideia de fazer uma explicação bem completa de como tudo funciona.
Estou fazendo algo parecido em um projeto pessoal. Busco os dados sobre a FIPE do brasil. E pra não ficar batendo sempre da api deles. Eu salvo em um mongodb.
Perfeito! Eu acabei optando por não salvar no banco, pq a disponibilidade do S3 HOJE acaba sendo até mais alta daí feito uma vez só deixar na memória carregado e é uma necessidade a menos de conexão :P
@@DevSoutinho vou tentar implementar dessa forma também. Eu não tinha pensando nisso haha
Em vez de usar a S3, não dá pra utilizar a última forma de salvar junto do projeto (se considerar uma instância ec2 já até aproveita o armazenamento dela) mas adicionando um controle de cache? Daí em vez de salvar um array com os resultados, vai salvar automaticamente um json com um objeto com updated_at e um items contendo os resultados
Se eu entendi o brasilApi deveria ter um metadata sobre a data da ultima insercao de um novo municipio, ai vc soh faz o dowload do material e faz um request nos "updates do brasilAPI", pode fazer um job pra manter sua base sync com o brasil api rodando uma vez por hora soh pra saber se teve um update. Afinal se entrou um novo minucipio e vc soh vai atualizar o cache em 30 dias, sao 30 dias sem vendas
Assim, a gente tá sempre passivo disso acontecer. Mas normalmente algum usuário abre chamado, a gente perde conversão, vê um número constante caindo em X etapa…
Concordo contigo! O espírito do vídeo é justamente esse pensar em como implementar e tu tá com um BOM PR pra mandar pra eles em 😍
eu faria um cloud function (lambda) agendado pra rodar toda semana pra carregar todos os dados de todos os estados e salvar num jsão num object storage (s3).
se der errado, ele só fica defasado, mas continua funcionando.
o json vai ter seus 350KB se as chaves forem pequenas, o que não é nada pras conexões de hoje. vira uma requisição só e pra um CDN que não cai nem ferrando e a latência fica zero pro usuário depois do primeiro load.
lidar com cache é um porre, e o backend não cai se ele não existir. :)
explicando o que eu falei sobre o cachê: por mais que esse cache seja sussa, tem que prever condições de “stampede” onde mais de uma requisição dispara a renovação do cache ao mesmo tempo. aí tem que implementar alguma coisa tipo expiração prematura probabilística. me pergunta como eu descobri isso aí. :P
Usar lambda é um “plus a mais” top! valeu por compartilhar aqui /o vou trazer num próximo vídeo algo com essa pegada
Eu ja precisei fazer isso, mas eu coloquei tudo em banco de dados mesmo.
ótimo video, eu estou estudando uma nova liguagem e estava procurando um projeto legal, posso utilizar o seu miro p criar ?
Fica a vontade Sérgio! Fico feliz que tenha curtido 😍
Gostaria de aprender!!!
Em uma Ec2 na aws com banco ClickHouse lendo de um arquivo .parquet baixado do s3 e tendo uma api na ponta lendo desse banco de dados e respondendo às requisições, e um serviço extra, que cria esse arquivo novo todo mes seria uma solução boa? Pois ClickHouse lendo direto de um arquivo .Parquet é mil vezes melhro que ler direto de um arquivo json, pois esse banco de dados faz leitura tabular dos dados .
Uma duvida, e se eu armazenasse o cache em um Redis se comunicando diretamente front-redis. Teria algum problema?
Pois assim não precisaria de um backend, ainda estaria cacheado e reduziria muito o processamento.
Olha, EU não faria isso. Pq o meu ponto maior aqui é que se daqui X tempo o BrasilAPI ficar fora do ar, eu quero garantir que eu tenho esse dado pra continuar operando até trocar por uma nova fonte. Isso partindo do ponto que minha infra seria stateless, eu posso desligar e ligar quando eu quiser que tudo volta. O redis nesse caso, até onde eu mexi, seria pra algo mais “temporário” a um nível curto de tempo e não longo prazo. N da pra confiar em ter um cache de 2/3 meses sem de fato persistir em algum lugar, igual eu sugiro persistir o arquivo.
Faz sentido?
É simples de resolver...
Eu fiz algo parecido, mas com arquivo local, baixei o arquivo do banco do IBGE e implementei uma arvore binaria de busca com os estados/municípios já ordenados, sem a arvore ficou muuuuuuuuuuuito lento.
Para não depender de uma API eu baixei os dados o IBGE uma vez e salvei usando postgis
Ter um backend independente rodando um job na brasil API tipo toda semana, novamente, independente do website e gerando esses arquivos na S3, e seu front buscar direto da s3 tb seria um caminho? ou seria mto overkill? dessa forma estariamos tentando garantir que até mesmo na 'primeira' interaction o front não dependa do brasil api naquele momento
Acho que não seria overkill. Mas tu pode aproveitar o próprio request do usuário pra resolver o problema, forma que eu trago no vídeo. Ai você economiza ter algo ligado sempre e só define a cache policy
vai fazer a parte da S3? Sim ou com certeza?
O povo pede dsuhdhusa
Quem ai pensou em um arquivo javascript exportando um objeto com { estado : [municipios] } levanta a mão 😂
Na hora da emergência 👀
O cache não é diferente disso…. É praticamente esse arquivo que está salvo no s3
Caso por algum motivo você não deseje depender da disponibilidade de um serviço externo como S3, salvar em memória da aplicação seria uma escolha ruim? Fazendo um update semanal ou requisitando pra brasilApi quando o sistema reiniciar por algum motivo
Não seria! No final do vídeo eu ainda sugiro pra salvar em memória quando o serviço sobe ou na hora que recebe o request 🤝
O meu interesse é mais a questão de como realizar esse multiplo dropdown, pois isso ae quando precisei realizar em flutter não consegui achar nenhum conteúdo bom sobre, acabei aprendendo com um professor da Academia do Flutter, mas antes disso eu nem era aluno, então a dificuldade era maior.
Saquei! Na web ele é nativo! Basta usar 2 tags select com options. Que tudo funciona
Cara, 100k requests de 5000 municípios que atualizam uma vez por século eu sirvo do meu relógio, overengineering sem tamanho discutindo custo. E dois drop-down nao são um auto complete, este sim um problema legal de resolver
Fala Lucas! Tudo bom? Como eu trouxe no vídeo, a própria API sugere que não façamos o full scan e talz. Tentei propor uma forma de consulta sob demanda e que nos traga independência caso eles venham a cair. A lógica em si pode ser aproveitada em vários outros cenários.
Seja manual ou automático tu vai ter que baixar. Mas é isso, no final não tem jeito certo 🤝
E como o volume em si é pequeno, fazer o autocomplete no browser com um throttle/denounce fica sussa, pq tu baixou os dados na hora que seleciona o estado /o
Talvez eu tenha perdido essa explicação no video, mas alguém sabe explicar o pq os correios simplesmente não disponibilizam uma base?
O IBGE disponibiliza uma base. Que o próprio BrasilAPI usa, mas o ponto acaba sendo disponibilidade disso mesmo.
Muitos municípios mudam de nome com o tempo... Tem que se ligar nisso.
Sim! Por isso sugiro um update mensal no final do vídeo /o
Uma duvida(sou iniciante), a ideia de criar um backend e criar um S3 para guardar os dados do BrasilAPI não atrapalha na performance? Já que quando o frontend fizer a requisição pro nosso backend, o nosso backend vai ter que consultar o dado na S3 pra retornar? Talvez eu tenha entendido errado?
Tipo, não seria melhor salvar os dados no nosso próprio servidor backend? Isso seria possível?
Manda a implementação!
O link do whiteboard com o código base tá na descrição /o aí fica faltando só a parte do s3 mesmo hehe
A solução é simples. Salva os estados e municípios num banco de dados relacional. Em seguida, cria uma view materializada ou usa um redis da vida para cache. Pronto, é só criar seus endpoints chamando essa estrutura.
Agora coloca listagem de bairros nesse BO aí
Existem limites Rodolfo ahahahahh mas por CEP a lógica seria parecida /p
Adoro seu conteúdo, pois não aprendemos a simplesmente codar igual maluco, vc ensina ENGENHARIA DE SOFTWARE e pensamento analítico!
Valeu demais pelo comentário 😍 a meta é essa mesma, ir variando nos assuntos e sempre trazer problemas legais 🤝
Caramba, ninguém conhece _Rate Limit_ e _Redis_ ???
Outra coisa, não haverá novos municípios.
A constituição de 1988 proibiu a criação de novos.
Pelo amor de Deus Mario! Tem criança chorando e idoso passando mal aqui esperando a continuação desse vídeo com a implementação rs
Hahahahahah olha! Tirando a parte do S3. O código do vídeo tá lá no miro, só pegar /o
Na minha humilde opinião, usar sistema para dependendo de serviços externos é perigoso e se deve ao máximo desacoplar isso. Mesmo fugindo de chamadas constantes ao BrasilApi, ainda teria um serviço de backend externo que meso sendo mais robusto, também pode ficar indisponível com muitas chamadas. Eu ainda iria de uma chamada a api para pegar os dados uma vez no mês por exemplo só para atualizar os dados que eu inseri localmente, já que não mudam tão frequentemente.
Total! No finalzinho do vídeo eu levanto essa
Eu só pensei em pesquisar no gpt 😂🤦🏻 (iniciante na área é f#da😂)
Hahahahahaha faz parte! O importante é botar em prática pra garantir que ele passou certo
Boa Esperança do Norte (MT) é a primeira cidade a estrear nas urnas desde 2012, mas realidade ainda destoa de surto de emancipação dos primeiros anos de redemocratização no Brasil
Cidade foi criada esse ano 😮
Nesses casos que o dado não muda tanto, eu curto a ideia de salvar em armazenamento local, como é o caso de um SQLite da vida ou algo similar.
Quanto a atualização, pode usar flags que impedem de buscar online e pegar offline inicialmente, então aplica uma regra para alternar o valor da flag, seja usando datas ou algum tipo de websocket/feature flag que permite uma aplicação externa de indicar quando é necessário fazer a atualização.
Mario parece que tu vê vídeo de uma galera do Tibia viu kkkkk
Você nunca viu eu e o Nalu no mesmo vídeo né? 👀
@@DevSoutinho Hahahahaha
Boa
Muito legal! Um pouco de over engineer... Mas bem didático.
Acho que minha solução seria SQLite em memoria + arquivos sem S3.
Novos municípios são muito raros de acontecer.
Quando acontecem, são geralmente inexpressiveis em receita.
Quando for necessário, só fazer uma mudança no arquivo que está no repositório git :)
Justissimo!
Você não pode ser preso!