MongoDB do Postgresa
O czym to jest?
Podczas rozmowy kwalifikacyjnej na stanowisko w jednej z firm poproszono mnie o odpowiedź na następujące pytanie: Czy możesz proszę opisać najtrudniejszy problem, jaki rozwiązałeś? W skrócie, najtrudniejszy problem, jaki rozwiązałem, pojawił się, gdy pracowałem w eBay, gdzie w 2023 roku przeniosłem jeden z dużych wewnętrznych projektów eBay z MongoDB na Postgresa. Jednak to pytanie naprawdę skłoniło mnie do zastanowienia się, jak rozwiązałem ten trudny problem, i pozwoliło mi spojrzeć wstecz na moją ścieżkę jako programisty. Z tego powodu napisałem bardzo szczegółową i wyczerpującą odpowiedź na to pytanie i chciałem podzielić się nią na mojej stronie internetowej.
Jakie było pytanie?
Czy możesz proszę opisać najtrudniejszy problem, jaki rozwiązałeś? Prosimy o odpowiedź w mniej niż 4 akapitach i poinformowanie nas:
- Co zrobiłeś
- Co sprawiło, że było to trudne
- Czego nauczyłeś się z tego doświadczenia
- Jak dzięki temu się rozwinąłeś
Jaka była moja odpowiedź?
1 - Co zrobiłeś
Obecnie w mojej karierze najtrudniejszy problem, jaki rozwiązałem, pojawił się podczas pracy na moim obecnym stanowisku w eBay. Obecnie w eBay, gdzie pracuję na podstawie kontraktu przez Hitachi Vantara, rozwijam i utrzymuję wewnętrzne narzędzie o nazwie Storage Management System, czyli STMS. STMS to narzędzie używane przez zespół Service & Storage Infrastructure (SSI) w eBay do monitorowania i zarządzania urządzeniami w centrach danych eBay. STMS umożliwia inżynierowi monitorowanie metryk licznych macierzy, przełączników, hostów, grup dyskowych, klastrów i baz danych. Ponadto obsługuje alerty dotyczące przełączników i macierzy oraz ułatwia inżynierowi wykonywanie zaawansowanych zadań, takich jak alokacje hostów. STMS przetwarza ponad 1,5 miliona metryk na minutę, obejmując ponad dziesiątki/setki macierzy, przełączników, hostów, grup dyskowych i klastrów w centrach danych eBay. Służy jako kluczowe narzędzie dla zespołu SSI do monitorowania i zarządzania infrastrukturą pamięci masowej eBay, która ma zasadnicze znaczenie dla podstawowej usługi i modelu biznesowego eBay. Wiedząc to wszystko, najtrudniejszym problemem, jaki musiałem rozwiązać podczas pracy w eBay, było przeniesienie STMS z bazy danych MongoDB do bazy danych Postgres.
2 - Co sprawiło, że było to trudne
To, co sprawiło, że ten problem był trudny, to fakt, że MongoDB i Postgres są zasadniczo różnymi bazami danych. MongoDB jest bazą danych opartą na dokumentach (NoSQL), co oznacza, że dane są przechowywane jako JSON w kolekcji (jak dokumenty w szafce kartotekowej), a Postgres jest relacyjną bazą danych (SQL), co oznacza, że dane są przechowywane jako wiersze w tabeli (jak w arkuszu kalkulacyjnym). Dodatkowo cały backend STMS został zbudowany tak, aby przetwarzać i zarządzać danymi jako JSON-ami, używając pakietów wyłącznie zgodnych z MongoDB do operacji bazodanowych. Również podczas wykonywania tej migracji nie mogło być żadnych przestojów i niemal wszystkie funkcje musiały nadal działać ze względu na to, jak istotne jest STMS jako narzędzie wewnętrzne. Całość tej migracji musiała zostać ukończona w ciągu kilku miesięcy, bez przestojów i bez jasnego planu jej realizacji. Nie miałem też wcześniej zbyt dużego doświadczenia z Postgrem, a wraz ze wszystkimi moimi współpracownikami nie mieliśmy żadnego doświadczenia w migracji dużej, starej bazy kodu z bazy NoSQL do bazy SQL.
3 - Czego nauczyłeś się z tego doświadczenia
Migracja kodu STMS z MongoDB do Postgresa została pomyślnie ukończona bez przestojów, przy zachowaniu niemal wszystkich funkcji i całej funkcjonalności. Wymagało to szeroko zakrojonych badań, nauki, testowania i rozwiązywania problemów. Przebudowałem nasze struktury danych tak, aby działały skuteczniej z relacyjnymi bazami danych, i opracowałem nowe pakiety, które zastąpiły te, od których byliśmy zależni, a które nie integrowały się z Postgrem. Ogólnie migracja przebiegła bezproblemowo i bez żadnych realnych wad, co przerosło moje oczekiwania. W trakcie tego procesu nauczyłem się bardzo wiele. Pod względem technicznym zdobyłem lepsze zrozumienie Postgresa, SQL, drzew składniowych, ORM-ów, Sequelize, Prisma, kreatorów zapytań, sprawdzania równoważności, konfiguracji bazy danych primary-standby oraz testów jednostkowych związanych z bazą danych. Zasadniczo nauczyłem się skuteczniej dzielić złożony problem na mniejsze części i wdrażać dla nich skuteczne rozwiązania. Dodatkowo nauczyłem się, jak być liderem i doprowadzić ten projekt do końca mimo wielu ograniczeń, niepowodzeń i niewiadomych.
4 - Jak dzięki temu się rozwinąłeś
Rozpocząłem karierę w robotyce podczas studiów licencjackich, ale przeszedłem do tworzenia aplikacji internetowych, gdy dostałem pracę w eBay, wchodząc do dziedziny, w której nie miałem wcześniejszego doświadczenia. Ta zmiana stworzyła fundament kariery opartej na ciągłej nauce i zdolności adaptacji. Wyzwanie polegające na migracji STMS z MongoDB do Postgresa było znaczącym krokiem naprzód w mojej karierze i ogromnie przyczyniło się do mojego rozwoju zawodowego. Nie chodziło tylko o pogłębienie mojego zrozumienia baz danych czy rozwinięcie umiejętności rozwiązywania problemów. Ten projekt wprowadził mnie na nowy teren, wymagając skrupulatnego planowania i zaangażowania w brak przestojów. Prowadząc migrację bez wcześniejszego doświadczenia w dużych przejściach między bazami danych, nauczyłem się wartości jasnej komunikacji, pracy zespołowej i rozbijania złożonych wyzwań na możliwe do opanowania części. To doświadczenie poszerzyło moje umiejętności techniczne, a także zwiększyło moją pewność siebie, kierując mnie bardziej ku ambitniejszym celom i projektom. Ten etap w mojej karierze nie tylko pokazał mój rozwój jako programisty i lidera, ale także jako osoby rozwiązującej problemy, pokazując, że przyjęcie nieznanego i odniesienie sukcesu jest kluczem do rozwoju osobistego i zawodowego.
Jaki jest wniosek?
Moje odpowiedzi pozwoliły mi przejść do drugiego etapu procesu rekrutacyjnego w tej firmie, umożliwiając mi odbycie miłej rozmowy z jednym z programistów z zespołu, co było całkiem przyjemne. Ale przede wszystkim to zadanie pozwoliło mi zastanowić się nad najtrudniejszym problemem technicznym, jaki rozwiązałem w swojej karierze podczas pracy w eBay. Umożliwiło mi to przemyślenie mojego rozwoju jako programisty/inżyniera, zdobycie nowych umiejętności i zwiększenie pewności siebie w dostosowywaniu się do złożonych problemów oraz ich rozwiązywaniu.