Um dos fatores relevantes para desenvolvedores backend é conhecimento em bancos de dados e/ou aplicações que gerenciam dados de alguma forma. Nest post irei descrever as minhas respostas para as perguntas que eu faço em relação ao tema “Data”, ou Dados em português, que foram mencionadas no post #0 da série.
Motivação
A quantidade de dados que são produzidos é imensa e cada vez mais esse é um tópico relevante para ser estudado e discutido. Em minha experiência, muitos sistemas utilizam bancos de dados relacionais, outros usam bancos não relacionais e ainda existe a possibilidade de misturar ambos para resolver problemas diferentes em um mesmo sistema.
Em alguns casos, trabalhar bem com bancos de dados poderá ser um fator determinante para uma aprovação, mas na maioria dos cenários que tive a oportunidade de presenciar, este tema foi considerado diferencial. Em outras palavras, eu considero esse tema como um fator diferencial e não de eliminação ao entrevistar um Dev Java, no entanto, pode ser considerado um conjunto de hard skills que podem contribuir e muito a prever e/ou resolver problemas no dia a dia.
Perguntas
- Como você analisaria um problema de performance em um relatório feito em um banco de dados relacional?
Resposta: Começaria olhando o plano de execução da query para identificar possíveis problemas de performance, identificando usos de índice, partições e joins problemáticos, depois daria atenção para os filtros, funções de agregação, agrupamentos e ordenação para verificar se realmente são necessários ou se falta utilizar algum. O modelo de dados pode ser um problema neste cenário também e ai vale identificar se está adequado para gerar relatórios a partir dele. Isolar os dados utilizados em relatórios gerenciais do fluxo principal de processamento do negócio pode ser uma boa alternativa para resolver problemas de performance em relatórios.
- O que é NoSQL?
Resposta: NoSQL é Not Only Structured Query Language, ou Not Only SQL e costuma ser aplicada principalmente em bancos de dados não relacionais, como MongoDB por exemplo.
- Como você decidiria qual banco de dados utilizar em um novo sistema?
Resposta: Varia muito de acordo com a necessidade de negócio, segurança, auditoria, performance e escalabilidade do sistema como um todo.
Os bancos relacionais são soluções robustas e padronizadas que estão consolidadas no mercado há muito tempo e, na maioria dos casos que já vi e estudei, eles atendem a grande maioria das necessidades de negócio.
Eu considero o uso de bancos de dados não relacionais quando os dados de uma gama de entidades são diferentes e não conectados, onde eu precisaria obrigar um relacionamento e forçar colunas que não fazem sentido em muitos cenários apenas para ter um relacionamento. Por exemplo, produtos tem características diferentes e não necessariamente se relacionam com as mesmas características de outros produtos, então, ao invés de forçar um relacionamento utilizando uma solução relacional, eu poderia utilizar um banco de dados não relacional como MongoDB para não precisar definir um schema e otimizar seu uso para escrita ou para leitura com base nos requisitos do negócio.
- Conhece alguma ferramenta de indexação de dados?
Resposta: Conheço e já utilizei o Elasticsearch para indexar dados de produto otimizados para busca e para armazenar e analisar logs de aplicações. Também utilizei ferramentas gráficas que podem apoiar na visualização dos dados indexados, como Kibana e Splunk.
Essas são algumas das perguntas que costumo fazer em entrevistas para desenvolvedores.
Os temas em torno de dados podem variar muito de acordo com a utilização pela empresa que está contratando e fazendo as perguntas, podem ir para uma área mais relacional, não relacional, data science, ferramentas de indexação, big data, entre outras possibilidades.
As respostas que espero costumam ser baseadas em experiência prática e estudos relacionados. Por exemplo, eu já estudei MySQL, utilizei MariaDB, PostgreSQL, me aprofundei um pouco mais em SQL e banco de dados Oracle, e atualmente estudo e trabalho com Oracle, MongoDB e Elasticsearch.
Este é um tema que eu gosto bastante de estudar e aplicar nos sistemas que desenvolvo no trabalho e estudos. Acredito que não existe “bala de prata” para resolver todos os problemas e que cada ferramenta tem seus pontos fortes e fracos. Então, realmente depende da necessidade de cada negócio.
Considero um bom ponto de partida estudar SQL, que ainda é a linguagem de bancos de dados mais utilizada e acredito que deve permanecer ainda por um bom tempo como uma necessidade técnica de muitas empresas.
Para saber mais
- Recomendações para estudar SQL
- Udemy
- Alura
Gostou? Foi útil? Concorda ou discorda de algum ponto? Comenta ai e vamos aprender mais juntos.
Espero que te ajude 😉