MongoDB до Postgres
Про що це?
Під час співбесіди на посаду в одній компанії мене попросили відповісти на наступне запитання: «Чи можете ви описати найскладнішу проблему, яку ви вирішили?» Підсумовуючи, найскладніша проблема, яку я вирішив, сталася, коли я працював в eBay, де я мігрував один із великих внутрішніх проєктів eBay з використанням MongoDB на Postgres у 2023 році. Однак це запитання змусило мене задуматися, як я вирішив цю складну проблему, і дало можливість розмірковувати про мій шлях розробника. Через це я написав дуже детальну та ґрунтовну відповідь на це запитання і захотів поділитися нею на своєму веб‑сайті.
Яке було запитання?
Чи можете ви описати найскладнішу проблему, яку ви вирішили? Будь ласка, відповідайте не більше чотирьох абзаців і повідомте нам:
- Що ви робили
- Чому це було складно
- Чого ви навчилися з цього досвіду
- Як ви виросли в результаті
Яка була моя відповідь?
1 - Що ви робили
Наразі, у моїй кар’єрі, найскладніша проблема, яку я вирішив, виникла під час роботи на моїй поточній посаді в eBay. Наразі в eBay, де я працюю за контрактом через Hitachi Vantara, я розробляю та підтримую внутрішній інструмент під назвою Storage Management System або STMS. STMS — це інструмент, який використовується командою Service & Storage Infrastructure (SSI) eBay для моніторингу та управління пристроями у дата‑центрах eBay. STMS дозволяє інженеру моніторити метрики численних масивів, комутаторів, хостів, груп дисків, кластерів та баз даних, а також обробляти сповіщення для комутаторів і масивів і легко дозволяє інженеру виконувати складні завдання, такі як розподіл хостів. STMS приймає понад 1,5 мільйона метрик за хвилину, охоплюючи десятки‑сотні масивів, комутаторів, хостів, груп дисків і кластерів у дата‑центрах eBay. Це критичний інструмент для команди SSI, який моніторить і керує інфраструктурою зберігання eBay, що є життєво важливим для основного сервісу та бізнес‑моделі eBay. Знаючи все це, найскладнішою проблемою, яку мені довелося вирішити під час роботи в eBay, було перенесення STMS з використанням бази даних MongoDB на базу даних Postgres.
2 - Чому це було складно
Ця проблема була складною, тому що MongoDB і Postgres принципово різні бази даних. MongoDB — це документно‑орієнтована база даних (NoSQL), тобто дані зберігаються у вигляді JSON у колекції (подібно до документів у картотеці), а Postgres — це реляційна база даних (SQL), тобто дані зберігаються у рядках таблиці (подібно до електронної таблиці). Крім того, весь бекенд STMS був побудований для обробки та управління даними у вигляді JSON, використовуючи пакети, сумісні лише з MongoDB, для операцій з базою даних. Також, під час цієї міграції не могло бути простою, і майже всі функції мали продовжувати працювати, оскільки STMS є критичним внутрішнім інструментом. Міграція в цілому мала бути завершена протягом кількох місяців, без простою і без чіткого плану її виконання. Я також не мав великого досвіду роботи з Postgres заздалегідь, і разом зі всіма моїми колегами не мав жодного досвіду міграції великого застарілого коду з NoSQL на SQL‑базу даних.
3 - Чого ви навчилися з цього досвіду
Міграція коду STMS з MongoDB на Postgres була успішно завершена без простою, при цьому зберігши майже всі функції та можливості. Це вимагало інтенсивних досліджень, навчання, тестування та усунення проблем. Я перебудував наші структури даних, щоб вони ефективніше працювали з реляційними базами даних, і розробив нові пакети, які замінили ті, що не інтегрувалися з Postgres. Загалом, міграція пройшла бездоганно і без реальних недоліків, що перевищило мої очікування. Протягом цього процесу я багато навчився. Технічно я отримав глибше розуміння Postgres, SQL, дерев розбору, ORM‑ів, Sequelize, Prisma, конструкторів запитів, перевірки еквівалентності, налаштування первинно‑резервної бази даних та юніт‑тестування, пов’язаного з базами даних. Фундаментально я навчився ефективніше розбивати складну проблему на менші частини та впроваджувати ефективні рішення для цих частин. Крім того, я навчився бути лідером і вести цей проєкт до завершення, незважаючи на численні обмеження, затримки та невідомі фактори.
4 - Як ви виросли в результаті
Я розпочав свою кар’єру в робототехніці під час бакалаврату, але перейшов до веб‑розробки, коли отримав роботу в eBay, увійшовши в галузь, у якій не мав попереднього досвіду. Цей перехід заклав основу для кар’єри, визначеної постійним навчанням і адаптивністю. Виклик міграції STMS з MongoDB на Postgres став значним кроком у моїй кар’єрі, суттєво сприяючи моєму професійному зростанню. Це було не лише поглибленням розуміння баз даних або підвищенням навичок розв’язання проблем. Цей проєкт вивів мене на нову територію, вимагав ретельного планування та зобов’язання щодо відсутності простою. Керуючи міграцією без попереднього досвіду у великих переходах баз даних, я навчився цінності чіткої комунікації, командної роботи та розбиття складних викликів на керовані частини. Цей досвід розширив мої технічні навички і також підвищив мою впевненість, спрямовуючи мене до більш амбітних цілей і проєктів. Цей етап у моїй кар’єрі не лише продемонстрував мій зріст як розробника та лідера, а й як вирішувача проблем, показуючи, що прийняття невідомого і успішне його подолання — ключ до особистого та професійного розвитку.
Який підсумок?
Мої відповіді просунули мене до другого етапу процесу співбесіди в компанії, дозволивши провести приємну розмову з одним із розробників команди, що було досить приємно. Але, головним чином, це завдання дозволило мені розмірковувати над найскладнішою технічною проблемою, яку я вирішив у своїй кар’єрі під час роботи в eBay. Воно допомогло мені подумати про мій розвиток як розробника/інженера, розвинути нові навички та підвищити впевненість у адаптації та розв’язанні складних проблем.