Jump to content

FelipeVerbanek

Pessoal da TecnoSpeed
  • Contagem de Conteúdo

    2
  • Ingressou

  • Última visita

  • Dias Ganhos

    1

FelipeVerbanek ganhou o dia em Agosto 18 2022

FelipeVerbanek teve o conteúdo mais curtido!

Informações Pessoais

  • Cidade
    Mandaguari
  • Estado
    Paraná (PR)

Clientes & Parceiros

  • Você é um cliente TecnoSpeed?
    Não
  • Você é um parceiro da Casa do Desenvolvedor?
    Não

Visitantes Recentes do Perfil

O bloco de visitantes recentes está desativado e não está sendo mostrado a outros usuários.

Conquistas de FelipeVerbanek

  • Positividade Raro

Emblemas Recentes

6

Reputação na Comunidade

  1. Você já teve uma query que demora mais do que o normal, e você não sabe onde começar para conseguir identificar o problema ? Nesse tópico gostaria de apresentar uma forma que utilizo para analisar uma query e identificar onde está sendo gerado a lentidão. Verificar plano de execução Um dos primeiros passos é analisar o plano de execução da query, nesse caso precisamos utilizar o explain analyze, esse comando mostra o plano de execução de forma distribuída, onde é possível analisar os custos computacionais de cada operação do SQL. Para exemplificar, vamos utilizar um exemplo com duas tabelas, onde a tabela "teste" possui milhões de registros. Query utilizada: Resultado: Será retornando varias instruções com todo o plano de execução da query, e com esse resultado podemos analisar as tabelas e filtros que estão mais lentos. Nesse cenário que testamos é possível identificar a métrica "Rows Removed by Filter" super elevada, ou seja, a query precisou remover 6666670 linhas para conseguir encontrar o registro. Nesse caso talvez um índice resolva nosso problema. Em um cenário que temos uma query muito complexa, fica muito difícil conseguir analisar o plano de execução dessa forma, e nessas ocasiões indico a plataforma https://tatiyants.com/pev/#/plans. Vamos ver um exemplo utilizando a plataforma tatiyants Primeiramente precisamos executar o explain em nossa query com o seguinte comando: EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON) O resultado ficou da seguinte forma: Será retornado o campo no formato json, e no site https://tatiyants.com/pev/#/plans preenchemos os dados com o json e também com a query que utilizamos. Ao clicar em submit, será retornado um diagrama que é possível visualizar as bifurcações da query. Também é possível clicar no card onde está indicando lentidão, e podemos visualizar as métricas. Agora vamos finalizar criando um index chamado "teste_a_idx" para o campo "a" da tabela "teste", e realizar o processo utilizando o explain analyze novamente. Resultado: Comando utilizado para criar o index: CREATE INDEX teste_a_idx ON public.teste (a); Após a criação do index, conseguimos visualizar que o index teste_a_idx já está sendo utilizado na query e também observar que houve um ganho de performance na busca do resultado. Não será em todos os cenários que a criação de um index será a solução, isso vai depender do problema que você está resolvendo. Use index com moderação! Você trabalhar de uma forma diferente ? deixe nos comentários suas dicas!
  2. O que é trunk based development (desenvolvimento baseado em tronco) Trunk based development é um modelo de controle de versão, onde os desenvolvedores trabalham em pequenas atualizações, e centralizam seu código em uma única ramificação chamada ‘tronco’, que na maioria das vezes vai ser a branch master ou main. Nesse modelo é evitado ao máximo criar ramificações com ciclo de vida longo, para não ocorrer problemas nas mesclagens de código. Esse modelo se enquadra bem para projetos que exigem uma entrega contínua de código, pois ele preza em criar ramificações com ciclo de vida curto, fazendo com que seja mais fácil ter o controle da ramificação principal do projeto, além de facilitar a prática de code reviews e deploys diários. Por conta da ramificação principal receber merge request constantes, é necessário possuir configurado um pipeline com testes automatizados e validadores de qualidade de código, para que todos commits que estejam na ramificação principal, estejam aptos para serem disponibilizados em produção. Exemplo da ramificação: Principais características do trunk based development As ramificações devem ter ciclos de vida curto, ficando sempre perto da ramificação principal. A Ramificação principal sempre precisa estar em estado de pronto para deploy em produção. Os hotfixes precisam ser criados a partir da ramificação principal e serem devolvidos à ramificação principal. Recomendado para aplicações: Micros serviços, single page application, Prova de conceito (POC), Sistemas distribuídos. É preciso ter um processo de integração contínua, com etapas de testes automatizados e validadores de qualidade de código. O que é Gitflow Gitflow é um modelo criado para manter um fluxo de trabalho mais organizado e facilitado para realização do versionamento do código. É um modelo para projetos que possuem vários desenvolvedores trabalhando no mesmo projeto, e também softwares que possuem entregas de versão agendadas. Esse modelo trabalha com branches, onde cada uma possui uma responsabilidade. Branch Main ou Master: Essa é a ramificação espelho do código que está em produção, só é realizado mesclagem de código nessa ramificação através de Hotfix ou nova Release. Branch Develop: Essa ramificação é o código que possui novas funcionalidades da aplicação, e através dessa ramificação que se cria novas ramificações de Feature. Branch Feature: É uma ramificação temporária criada a partir da “Develop”, nessa ramificação o desenvolvedor vai criar as novas funcionalidades da aplicação, e assim que finalizar ela deve ser obrigatoriamente devolvida a branch “Develop”. Branch Hotfix: É uma ramificação temporária criada a partir da Main / Master, essa ramificação serve para corrigir problemas que ocorreram em ambiente de produção e possuem urgência para ser realizado. No final do seu ciclo de vida ela é mesclada nas ramificações Main / Master e também na Develop. Branch Release: É a ramificação responsável por unir todas as atualizações prontas e então é feito a mesclagem na branch principal Main ou Master. Após esse processo é criado a tag para controle de versão. Exemplo das ramificações utilizando o GitFlow: Principais características do Gitflow Os recursos novos são iniciados a partir da ramificação Develop, e podem possuir um ciclo de vida mais longo. A branch Release é criada a partir da branch Develop e deve ser devolvida a branch Develop após a implementação da release estiver estabilizada. Somente hotfixes são criados a partir da Main / Master. Recomendado para produtos complexos, maduro e monolítico. Frequência de lançamento é mais lenta, e geralmente possui um cronograma pré-determinado. Conclusão Nesse artigo, foi apresentado as principais características do trunk based development e Gitflow, a escolha de qual modelo utilizar vai depender do projeto e estratégia que o produto possui. Geralmente projetos com uma alta frequência de deploy ou que estão bem no início, utilizam o trunk based development. Já projetos que possuem um produto mais maduro, que tem datas agendadas para disponibilizar novos recursos, utilizam o Gitflow. Antes de escolher algum desses fluxos é importante realizar um estudo aprofundado e levantar as vantagens e desvantagens de cada fluxo. Referência: https://trunkbaseddevelopment.com/ https://www.devbridge.com/articles/branching-strategies-git-flow-vs-trunk-based-development/ https://www.alura.com.br/artigos/git-flow-o-que-e-como-quando-utilizar
×
×
  • Create New...