MongoDB para Postgres
Sobre o que é isso?
Enquanto participava de entrevistas para uma posição em uma empresa, me pediram para responder à seguinte pergunta: Você pode descrever o problema mais difícil que resolveu? Em resumo, o problema mais difícil que resolvi ocorreu enquanto eu trabalhava na eBay, onde migrei um dos grandes projetos internos da eBay de usar MongoDB para Postgres durante o ano de 2023. No entanto, essa pergunta realmente me fez refletir sobre como resolvi esse problema difícil e me permitiu refletir sobre minha jornada como desenvolvedor. Por causa disso, escrevi uma resposta muito detalhada e completa para essa pergunta, e quis compartilhar minha resposta em meu site.
Qual foi a pergunta?
Você pode descrever o problema mais difícil que resolveu? Por favor, responda com menos de 4 parágrafos e nos informe:
- O que você fez
- O que o tornou difícil
- O que você aprendeu com essa experiência
- Como você cresceu como resultado
Qual foi a minha resposta?
1 - O que você fez
Atualmente, na minha carreira, o problema mais difícil que resolvi ocorreu enquanto trabalhava na minha posição atual na eBay. Atualmente na eBay, onde estou contratado via Hitachi Vantara, desenvolvo e mantenho uma ferramenta interna chamada Storage Management System ou STMS. O STMS é uma ferramenta usada pela equipe de Service & Storage Infrastructure (SSI) da eBay para monitorar e gerenciar dispositivos nos data centers da eBay. O STMS permite que um engenheiro monitore as métricas de inúmeras arrays, switches, hosts, grupos de discos, clusters e bancos de dados. Além de lidar com alertas para switches e arrays e permitir facilmente que um engenheiro execute tarefas avançadas como alocações de hosts. O STMS ingere mais de 1,5 milhão de métricas por minuto, contabilizando dezenas/hundreds de arrays, switches, hosts, grupos de discos e clusters nos data centers da eBay. Serve como uma ferramenta crítica para a equipe SSI monitorar e gerenciar a infraestrutura de armazenamento da eBay, que é vital para o serviço central e modelo de negócios da eBay. Sabendo tudo isso, o problema mais difícil que tive que resolver durante meu tempo na eBay foi migrar o STMS de usar o banco de dados MongoDB para usar o banco de dados Postgres.
2 - O que o tornou difícil
O que tornou esse problema difícil foi que MongoDB e Postgres são bancos de dados fundamentalmente diferentes. MongoDB é um banco de dados baseado em documentos (NoSQL), significando que os dados são armazenados como JSON em uma coleção (como documentos em um arquivo), e Postgres é um banco de dados relacional (SQL), significando que os dados são armazenados como linhas em uma tabela (como em uma planilha). Além disso, todo o backend do STMS foi construído para processar e gerenciar dados como JSONs, usando pacotes exclusivamente compatíveis com MongoDB para operações de banco de dados. Também, ao fazer essa migração, não poderia haver tempo de inatividade e quase todos os recursos precisavam continuar funcionando devido à importância do STMS como ferramenta interna. Essa migração em sua totalidade precisava ser concluída em poucos meses, sem tempo de inatividade, e sem um plano claro para sua execução. Eu também não tinha muita experiência com Postgres anteriormente e, junto com todos os meus colegas, não tínhamos experiência em migrar uma grande base de código legada de um banco de dados NoSQL para SQL.
3 - O que você aprendeu com essa experiência
A migração do código do STMS de MongoDB para Postgres foi concluída com sucesso sem tempo de inatividade, mantendo quase todos os recursos e funcionalidades. Isso exigiu pesquisa extensiva, aprendizado, testes e solução de problemas. Reestruturei nossas estruturas de dados para trabalhar de forma mais eficaz com bancos de dados relacionais e desenvolvi novos pacotes para substituir aqueles dos quais dependíamos e que não se integravam ao Postgres. No geral, a migração ocorreu sem problemas e sem falhas reais, superando minhas expectativas. Ao longo desse processo, aprendi muito. Tecnicamente, adquiri uma melhor compreensão de Postgres, SQL, árvores de análise, ORMs, Sequelize, Prisma, construtores de consultas, verificação de equivalência, configuração de banco de dados primário-standby e testes unitários relacionados a bancos de dados. Fundamentalmente, aprendi a dividir de forma mais eficaz um problema complexo em partes menores e implementar soluções eficazes para essas partes. Além disso, aprendi a ser um líder e conduzir este projeto até sua conclusão, apesar de enfrentar muitas limitações, recuos e incertos.
4 - Como você cresceu como resultado
Comecei minha carreira em robótica durante a graduação, mas mudei para desenvolvimento web quando consegui o emprego na eBay, entrando em um campo onde não tinha experiência prévia. Essa transição lançou as bases para uma carreira definida por aprendizado constante e adaptabilidade. O desafio de migrar o STMS de MongoDB para Postgres foi um salto significativo na minha carreira, contribuindo imensamente para meu crescimento profissional. Não se tratou apenas de aprofundar meu entendimento de bancos de dados ou aprimorar minhas habilidades de resolução de problemas. Este projeto me empurrou para um novo território, exigindo planejamento meticuloso e um compromisso de não ter tempo de inatividade. Liderar a migração sem experiência prévia em transições de bancos de dados em larga escala, aprendi o valor de comunicação clara, trabalho em equipe e dividir desafios complexos em partes manejáveis. Essa experiência ampliou minhas habilidades técnicas e também aumentou minha confiança, direcionando-me para metas e projetos mais ambiciosos. Este marco na minha carreira não apenas demonstrou meu crescimento como desenvolvedor e líder, mas também como solucionador de problemas, mostrando que abraçar o desconhecido e ter sucesso é fundamental para o desenvolvimento pessoal e profissional.
Qual é a conclusão?
Minhas respostas me levaram à segunda fase do processo de entrevista na empresa, permitindo-me ter uma conversa agradável com um dos desenvolvedores da equipe, o que foi muito bom. Mas, principalmente, essa tarefa me permitiu refletir sobre o problema técnico mais desafiador que resolvi em minha carreira durante meu tempo na eBay. Ela me possibilitou pensar sobre meu crescimento como desenvolvedor/engenheiro, desenvolver novas habilidades e aumentar minha confiança em adaptar-me e resolver problemas complexos.