Da MongoDB a Postgres
Di cosa si tratta?
Durante un colloquio per una posizione in un’azienda, mi è stato chiesto di rispondere alla seguente domanda: Puoi descrivere il problema più difficile che hai risolto? In sintesi, il problema più difficile che ho risolto è avvenuto mentre lavoravo presso eBay, dove ho migrato uno dei grandi progetti interni di eBay dall’uso di MongoDB a Postgres durante l’anno 2023. Tuttavia, questa domanda mi ha fatto davvero riflettere su come ho risolto questo difficile problema e mi ha permesso di riflettere sul mio percorso da sviluppatore. Per questo motivo, ho scritto una risposta molto dettagliata e approfondita a quella domanda, e volevo condividerla sul mio sito web.
Qual era la domanda?
Puoi descrivere il problema più difficile che hai risolto? Per favore rispondi con meno di 4 paragrafi e facci sapere:
- Cosa hai fatto
- Cosa lo ha reso difficile
- Cosa hai imparato da questa esperienza
- Come sei cresciuto di conseguenza
Qual è stata la mia risposta?
1 - Cosa hai fatto
Attualmente, nella mia carriera, il problema più difficile che ho risolto è avvenuto mentre lavoravo nella mia posizione attuale presso eBay. Attualmente, presso eBay, dove sono assunto tramite Hitachi Vantara, sviluppo e mantengo uno strumento interno chiamato Sistema di Gestione dello Storage o STMS. STMS è uno strumento utilizzato dal team Service & Storage Infrastructure (SSI) di eBay per monitorare e gestire i dispositivi nei data center di eBay. STMS permette a un ingegnere di monitorare le metriche di numerosi array, switch, host, gruppi di dischi, cluster e database. Gestisce anche gli avvisi per switch e array e consente facilmente a un ingegnere di completare attività avanzate come l’allocazione degli host. STMS acquisisce oltre 1,5 milioni di metriche al minuto, provenienti da dozzine/centinaia di array, switch, host, gruppi di dischi e cluster nei data center di eBay. Serve come uno strumento critico per il team SSI per monitorare e gestire l’infrastruttura di storage di eBay, che è vitale per il servizio principale e il modello di business di eBay. Sapendo tutto questo, il problema più difficile che ho dovuto risolvere durante il mio periodo a eBay è stato migrare STMS dall’uso del database MongoDB all’uso del database Postgres.
2 - Cosa lo ha reso difficile
Ciò che ha reso questo problema difficile è che MongoDB e Postgres sono database fondamentalmente diversi. MongoDB è un database basato su documenti (NoSQL), il che significa che i dati sono memorizzati come JSON in una collection (come documenti in un archivio), mentre Postgres è un database relazionale (SQL), il che significa che i dati sono memorizzati come righe in una tabella (come in un foglio di calcolo). Inoltre, l’intero backend di STMS era stato costruito per elaborare e gestire i dati come JSON, utilizzando pacchetti esclusivamente compatibili con MongoDB per le operazioni sul database. Inoltre, durante questa migrazione non poteva esserci alcun downtime e quasi tutte le funzionalità dovevano continuare a funzionare, dato quanto STMS è vitale come strumento interno. Questa migrazione nella sua interezza doveva essere completata entro pochi mesi, senza downtime e senza un piano chiaro per la sua esecuzione. Inoltre, non avevo molta esperienza con Postgres in precedenza e, insieme a tutti i miei colleghi, non avevamo esperienza nella migrazione di un grande codebase legacy da un database NoSQL a uno SQL.
3 - Cosa hai imparato da questa esperienza
La migrazione del codice STMS da MongoDB a Postgres è stata completata con successo senza downtime mantenendo quasi tutte le funzionalità. Questo ha richiesto ricerche estensive, apprendimento, test e risoluzione dei problemi. Ho ristrutturato le nostre strutture dati per lavorare più efficacemente con database relazionali e ho sviluppato nuovi pacchetti per sostituire quelli da cui dipendevamo che non si integravano con Postgres. Nel complesso, la migrazione è andata senza intoppi e senza reali difetti, superando le mie aspettative. Durante questo processo ho imparato molto. Tecnicamente, ho acquisito una migliore comprensione di Postgres, SQL, alberi di parsing, ORM, Sequelize, Prisma, query builder, controllo di equivalenza, configurazione database primary-standby e test unitari relativi al database. Fondamentalmente, ho imparato come suddividere in modo più efficace un problema complesso in parti più piccole e implementare soluzioni efficaci per quelle parti. Inoltre, ho imparato come essere un leader e guidare questo progetto fino alla sua conclusione nonostante affrontassi molte limitazioni, contrattempi e incognite.
4 - Come sono cresciuto di conseguenza
Ho iniziato la mia carriera nella robotica durante l’università, ma mi sono orientato verso lo sviluppo web quando ho ottenuto il lavoro presso eBay, entrando in un campo in cui non avevo esperienza precedente. Questa transizione ha gettato le basi per una carriera caratterizzata da apprendimento costante e adattabilità. La sfida di migrare STMS da MongoDB a Postgres è stata un salto significativo nella mia carriera, contribuendo immensamente alla mia crescita professionale. Non si trattava solo di approfondire la mia comprensione dei database o migliorare le mie capacità di problem solving. Questo progetto mi ha spinto in un nuovo territorio, richiedendo una pianificazione meticolosa e l’impegno a non avere downtime. Guidando la migrazione senza esperienza precedente in transizioni di database su larga scala, ho imparato il valore di una comunicazione chiara, del lavoro di squadra e della suddivisione delle sfide complesse in parti gestibili. Questa esperienza ha ampliato le mie competenze tecniche e ha anche aumentato la mia fiducia, orientandomi verso obiettivi e progetti più ambiziosi. Questo traguardo nella mia carriera ha dimostrato non solo la mia crescita come sviluppatore e leader, ma anche come risolutore di problemi, mostrando che abbracciare l’ignoto e avere successo è fondamentale per lo sviluppo personale e professionale.
Qual è la conclusione?
Le mie risposte mi hanno fatto passare alla seconda fase del processo di colloquio presso l’azienda, permettendomi di avere una piacevole conversazione con uno degli sviluppatori del team, il che è stato molto carino. Ma, principalmente, questo compito mi ha permesso di riflettere sul problema tecnico più impegnativo che ho risolto nella mia carriera durante il mio periodo a eBay. Mi ha permesso di riflettere sulla mia crescita come sviluppatore/ingegnere, sviluppare nuove competenze e accrescere la mia fiducia nell’adattarmi e risolvere problemi complessi.